package auth import ( "log" "net/http" "github.com/gorilla/sessions" "github.com/markbates/goth" "github.com/markbates/goth/gothic" "github.com/markbates/goth/providers/google" "sismedika.com/sas/westone/configs" ) var maxAge = 86400 * 1 // 30 days var isProd = false // set to true if in production var key = configs.Envs.SessionKey var store = sessions.NewCookieStore([]byte(key)) var usersession = "user" func NewOAuth() { googleClientID := configs.Envs.GoogleClientID googleClientSecret := configs.Envs.GoogleClientSecret callback := configs.Envs.PublicHost + ":" + configs.Envs.Port + "/api/v1/auth/google/callback" store.MaxAge(maxAge) store.Options.Path = "/" store.Options.HttpOnly = true store.Options.Secure = isProd store.Options.SameSite = http.SameSiteLaxMode gothic.Store = store goth.UseProviders( google.New(googleClientID, googleClientSecret, callback), ) } func addUsertoSession(w http.ResponseWriter, r *http.Request, user goth.User) error { user_session, err := store.Get(r, usersession) if err != nil { user_session, err = store.New(r, usersession) if err != nil { log.Println("[ERROR] get user to session, error: ", err) return err } } user.RawData = map[string]interface{}{} user_session.Values["user"] = user err = user_session.Save(r, w) if err != nil { log.Println("[ERROR] saving user to session, error: ", err) return err } return nil } func removeUsertoSession(w http.ResponseWriter, r *http.Request) error { user_session, err := store.Get(r, usersession) if err != nil { log.Println("[ERROR] get user to session, error: ", err) return err } user_session.Values["user"] = goth.User{} err = user_session.Save(r, w) if err != nil { log.Println("[ERROR] remove user to session, error: ", err) return err } return nil }