Files
ris-backend-go/services/auth/oauth.go
2024-12-09 09:51:19 +07:00

74 lines
1.8 KiB
Go

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
}