2021-07-14 18:43:19 +00:00
|
|
|
package session
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"log"
|
|
|
|
|
2021-07-23 16:27:44 +00:00
|
|
|
"github.com/authorizerdev/authorizer/server/constants"
|
2021-07-14 18:43:19 +00:00
|
|
|
"github.com/go-redis/redis/v8"
|
|
|
|
)
|
|
|
|
|
|
|
|
type SessionStore struct {
|
2021-07-17 16:29:50 +00:00
|
|
|
InMemoryStoreObj *InMemoryStore
|
|
|
|
RedisMemoryStoreObj *RedisStore
|
2021-07-14 18:43:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
var SessionStoreObj SessionStore
|
|
|
|
|
2021-10-27 17:45:38 +00:00
|
|
|
func SetToken(userId, accessToken, refreshToken string) {
|
|
|
|
// TODO: Set session information in db for all the sessions that gets generated
|
|
|
|
// it should async go function
|
|
|
|
|
|
|
|
if SessionStoreObj.RedisMemoryStoreObj != nil {
|
|
|
|
SessionStoreObj.RedisMemoryStoreObj.AddToken(userId, accessToken, refreshToken)
|
|
|
|
}
|
|
|
|
if SessionStoreObj.InMemoryStoreObj != nil {
|
|
|
|
SessionStoreObj.InMemoryStoreObj.AddToken(userId, accessToken, refreshToken)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-12-17 15:55:07 +00:00
|
|
|
func DeleteVerificationRequest(userId, accessToken string) {
|
2021-07-17 16:29:50 +00:00
|
|
|
if SessionStoreObj.RedisMemoryStoreObj != nil {
|
2021-12-17 15:55:07 +00:00
|
|
|
SessionStoreObj.RedisMemoryStoreObj.DeleteVerificationRequest(userId, accessToken)
|
2021-07-14 18:43:19 +00:00
|
|
|
}
|
2021-07-17 16:29:50 +00:00
|
|
|
if SessionStoreObj.InMemoryStoreObj != nil {
|
2021-12-17 15:55:07 +00:00
|
|
|
SessionStoreObj.InMemoryStoreObj.DeleteVerificationRequest(userId, accessToken)
|
2021-07-14 18:43:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-27 17:45:38 +00:00
|
|
|
func DeleteUserSession(userId string) {
|
2021-07-17 16:29:50 +00:00
|
|
|
if SessionStoreObj.RedisMemoryStoreObj != nil {
|
2021-10-27 17:45:38 +00:00
|
|
|
SessionStoreObj.RedisMemoryStoreObj.DeleteUserSession(userId)
|
2021-07-14 18:43:19 +00:00
|
|
|
}
|
2021-07-17 16:29:50 +00:00
|
|
|
if SessionStoreObj.InMemoryStoreObj != nil {
|
2021-10-27 17:45:38 +00:00
|
|
|
SessionStoreObj.InMemoryStoreObj.DeleteUserSession(userId)
|
2021-07-14 18:43:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-27 17:45:38 +00:00
|
|
|
func GetToken(userId, accessToken string) string {
|
2021-07-17 16:29:50 +00:00
|
|
|
if SessionStoreObj.RedisMemoryStoreObj != nil {
|
2021-10-27 17:45:38 +00:00
|
|
|
return SessionStoreObj.RedisMemoryStoreObj.GetToken(userId, accessToken)
|
2021-07-14 18:43:19 +00:00
|
|
|
}
|
2021-07-17 16:29:50 +00:00
|
|
|
if SessionStoreObj.InMemoryStoreObj != nil {
|
2021-10-27 17:45:38 +00:00
|
|
|
return SessionStoreObj.InMemoryStoreObj.GetToken(userId, accessToken)
|
2021-07-14 18:43:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
func ClearStore() {
|
2021-07-17 16:29:50 +00:00
|
|
|
if SessionStoreObj.RedisMemoryStoreObj != nil {
|
|
|
|
SessionStoreObj.RedisMemoryStoreObj.ClearStore()
|
2021-07-14 18:43:19 +00:00
|
|
|
}
|
2021-07-17 16:29:50 +00:00
|
|
|
if SessionStoreObj.InMemoryStoreObj != nil {
|
|
|
|
SessionStoreObj.InMemoryStoreObj.ClearStore()
|
2021-07-14 18:43:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-27 17:45:38 +00:00
|
|
|
func SetSocailLoginState(key, state string) {
|
|
|
|
if SessionStoreObj.RedisMemoryStoreObj != nil {
|
|
|
|
SessionStoreObj.RedisMemoryStoreObj.SetSocialLoginState(key, state)
|
|
|
|
}
|
|
|
|
if SessionStoreObj.InMemoryStoreObj != nil {
|
|
|
|
SessionStoreObj.InMemoryStoreObj.SetSocialLoginState(key, state)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetSocailLoginState(key string) string {
|
|
|
|
if SessionStoreObj.RedisMemoryStoreObj != nil {
|
|
|
|
return SessionStoreObj.RedisMemoryStoreObj.GetSocialLoginState(key)
|
|
|
|
}
|
|
|
|
if SessionStoreObj.InMemoryStoreObj != nil {
|
|
|
|
return SessionStoreObj.InMemoryStoreObj.GetSocialLoginState(key)
|
|
|
|
}
|
|
|
|
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
func RemoveSocialLoginState(key string) {
|
|
|
|
if SessionStoreObj.RedisMemoryStoreObj != nil {
|
|
|
|
SessionStoreObj.RedisMemoryStoreObj.RemoveSocialLoginState(key)
|
|
|
|
}
|
|
|
|
if SessionStoreObj.InMemoryStoreObj != nil {
|
|
|
|
SessionStoreObj.InMemoryStoreObj.RemoveSocialLoginState(key)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-07-28 06:23:37 +00:00
|
|
|
func InitSession() {
|
2021-12-31 08:22:10 +00:00
|
|
|
if constants.EnvData.REDIS_URL != "" {
|
2021-12-17 15:55:07 +00:00
|
|
|
log.Println("using redis store to save sessions")
|
2021-12-31 08:22:10 +00:00
|
|
|
opt, err := redis.ParseURL(constants.EnvData.REDIS_URL)
|
2021-07-14 18:43:19 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Fatalln("Error parsing redis url:", err)
|
|
|
|
}
|
|
|
|
rdb := redis.NewClient(opt)
|
|
|
|
ctx := context.Background()
|
|
|
|
_, err = rdb.Ping(ctx).Result()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln("Error connecting to redis server", err)
|
|
|
|
}
|
2021-07-17 16:29:50 +00:00
|
|
|
SessionStoreObj.RedisMemoryStoreObj = &RedisStore{
|
2021-07-14 18:43:19 +00:00
|
|
|
ctx: ctx,
|
|
|
|
store: rdb,
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
2021-12-17 15:55:07 +00:00
|
|
|
log.Println("using in memory store to save sessions")
|
2021-07-17 16:29:50 +00:00
|
|
|
SessionStoreObj.InMemoryStoreObj = &InMemoryStore{
|
2021-10-27 17:45:38 +00:00
|
|
|
store: map[string]map[string]string{},
|
|
|
|
socialLoginState: map[string]string{},
|
2021-07-14 18:43:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|