diff --git a/cmd/api/main.go b/cmd/api/main.go index 6975bc3..89f2438 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -2,17 +2,21 @@ package main import ( "fmt" + "github.com/joho/godotenv" "gothtest/internal/server" - "gothtest/internal/auth" + "log" ) func main() { + err := godotenv.Load() + if err != nil { + log.Fatal("Error loading .env file") + } server := server.NewServer() - auth.NewAuth() - fmt.Println("Server start") - err := server.ListenAndServe() + fmt.Println("Server start") + err = server.ListenAndServe() if err != nil { panic(fmt.Sprintf("cannot start server: %s", err)) } diff --git a/internal/auth/auth.go b/internal/auth/auth.go index 390e3e1..7e2630d 100644 --- a/internal/auth/auth.go +++ b/internal/auth/auth.go @@ -1,40 +1,29 @@ package auth + import ( - "log" - "os" - //"github.com/gorilla/sessions" - "github.com/joho/godotenv" - "github.com/markbates/goth" - //"github.com/markbates/goth/gothic" - "github.com/markbates/goth/providers/openidConnect" + "github.com/gorilla/sessions" + "github.com/markbates/goth" + "github.com/markbates/goth/gothic" + "github.com/markbates/goth/providers/openidConnect" + "log" + "os" ) -const ( - key = "iebdyjckwoevhdixnwgwunrvxuqobetgy" - MaxAge = 86400 * 30 - IsProd = false -) +func NewAuth(sessionStore *sessions.Store) { + oidcId := os.Getenv("OIDC_ID") + oidcSec := os.Getenv("OIDC_SECRET") + oidcDiscUrl := os.Getenv("OIDC_DISC_URL") + oidcRedirectUrl := "http://localhost:3003/auth/openid-connect/callback" -func NewAuth() { - err := godotenv.Load() - if err != nil {log.Fatal("Error loading .env file")} - - oidcId := os.Getenv("OIDC_ID") - oidcSec := os.Getenv("OIDC_SECRET") - oidcDiscUrl := os.Getenv("OIDC_DISC_URL") - oidcRedirectUrl := "http://localhost:3003/auth/openid-connect/callback" -/* - store := sessions.NewCookieStore([]byte(key)) - store.MaxAge(MaxAge) - store.Options.Path = "/" - store.Options.HttpOnly = true - store.Options.Secure = IsProd - - gothic.Store = store -*/ - openidConnect, err := openidConnect.New(oidcId, oidcSec, oidcRedirectUrl, oidcDiscUrl) + openidConnect, err := openidConnect.New(oidcId, oidcSec, oidcRedirectUrl, oidcDiscUrl) if openidConnect == nil || err != nil { - log.Fatal("Error setting up oidc") + log.Fatal("Error setting up oidc") } - goth.UseProviders(openidConnect) + goth.UseProviders(openidConnect) + + if sessionStore != nil { + gothic.Store = *sessionStore + } else { + log.Println("No auth session store set. Falling back to default gothic setting.") + } } diff --git a/internal/server/server.go b/internal/server/server.go index c10bc55..a78256e 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -7,15 +7,19 @@ import ( "strconv" "time" + "github.com/gorilla/sessions" _ "github.com/joho/godotenv/autoload" + "gothtest/internal/auth" "gothtest/internal/database" + "gothtest/internal/session" ) type Server struct { port int - db database.Service + db database.Service + store sessions.Store } func NewServer() *http.Server { @@ -23,8 +27,10 @@ func NewServer() *http.Server { NewServer := &Server{ port: port, - db: database.New(), + db: database.New(), + store: session.New(), } + auth.NewAuth(&NewServer.store) // Declare Server config server := &http.Server{ diff --git a/internal/session/session.go b/internal/session/session.go new file mode 100644 index 0000000..10dc178 --- /dev/null +++ b/internal/session/session.go @@ -0,0 +1,25 @@ +package session + +import ( + "github.com/gorilla/sessions" + "os" +) + +const ( + MaxAge = 86400 * 30 + IsProd = false +) + +func New() sessions.Store { + key := os.Getenv("SESSION_SECRET") + if key == "" { + return nil + } + store := sessions.NewCookieStore([]byte(key)) + store.MaxAge(MaxAge) + store.Options.Path = "/" + store.Options.HttpOnly = true + store.Options.Secure = IsProd + + return store +}