74 lines
1.8 KiB
Go
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
|
|
}
|