Compare commits

..

6 Commits
v1.3.1 ... main

3 changed files with 26 additions and 15 deletions

View File

@ -4,7 +4,6 @@ import (
"context"
"crypto/rand"
"encoding/base64"
"fmt"
"log"
"net/http"
"time"
@ -27,6 +26,12 @@ func NewHandler(oauth2Config *oauth2.Config, session SessionStorer, verifier *oi
}, nil
}
type Identity struct {
UserID string `json:"userId"`
ProviderName string `json:"providerName"`
ProviderType string `json:"providerType"`
}
type UserClaims struct {
Email string `json:"email"`
Verified bool `json:"email_verified"`
@ -35,6 +40,7 @@ type UserClaims struct {
Picture string `json:"picture"`
Sub string `json:"sub"`
Groups []string `json:"cognito:groups"`
Identities []*Identity `json:"identities"`
}
func generateState() (string, error) {
@ -49,19 +55,21 @@ func generateState() (string, error) {
func (h *Handlers) SignIn(w http.ResponseWriter, r *http.Request) {
state, err := generateState()
if err != nil {
log.Println("Failed to generate state")
log.Printf("Failed to generate state: %v", err)
http.Error(w, "Something went wrong", http.StatusInternalServerError)
return
}
session, err := h.session.Get(r)
if err != nil {
log.Printf("Failed to get session: %v", err)
http.Error(w, "Failed to get session", http.StatusInternalServerError)
return
}
session.Values["state"] = state
err = session.Save(r, w)
if err != nil {
log.Printf("Failed to save session: %v", err)
http.Error(w, "Failed to save session", http.StatusInternalServerError)
return
}
@ -75,6 +83,7 @@ func (h *Handlers) CallbackHandler(w http.ResponseWriter, r *http.Request) {
session, err := h.session.Get(r)
if err != nil {
log.Printf("Failed to verify ID Token: %v", err)
http.Error(w, "Failed to get session", http.StatusInternalServerError)
return
}
@ -122,7 +131,6 @@ func (h *Handlers) CallbackHandler(w http.ResponseWriter, r *http.Request) {
session.Values["access_token"] = oauth2Token.AccessToken
session.Values["user_info"] = claims
fmt.Println(claims)
session.Options.MaxAge = int(oauth2Token.Expiry.Sub(time.Now()).Seconds())
err = session.Save(r, w)
if err != nil {

View File

@ -2,9 +2,10 @@ package cauth
import (
"context"
"github.com/lestrrat-go/jwx/jwk"
"log"
"net/http"
"github.com/lestrrat-go/jwx/jwk"
)
type contextKey string
@ -118,5 +119,5 @@ func GetUserFromContext(r *http.Request) *UserClaims {
return &user
}
return &UserClaims{}
return nil
}

View File

@ -3,13 +3,14 @@ package cauth
import (
"context"
"encoding/gob"
"log"
"net/http"
"github.com/coreos/go-oidc/v3/oidc"
"github.com/gorilla/sessions"
"github.com/rbcervilla/redisstore/v9"
"github.com/redis/go-redis/v9"
"golang.org/x/oauth2"
"log"
"net/http"
)
const SESSION_NAME = "auth-session"
@ -31,6 +32,7 @@ type SessionStorer interface {
func NewRedisSessionStore(params RedisSessionParams) (SessionStorer, error) {
gob.Register(&oauth2.Token{})
gob.Register(oidc.IDToken{})
gob.Register(Identity{})
gob.Register(UserClaims{})
client := redis.NewClient(&redis.Options{
Addr: params.RedisAddress,