package token import ( "fmt" "github.com/authorizerdev/authorizer/server/constants" "github.com/authorizerdev/authorizer/server/cookie" "github.com/authorizerdev/authorizer/server/crypto" "github.com/authorizerdev/authorizer/server/memorystore" "github.com/gin-gonic/gin" ) // CreateAdminAuthToken creates the admin token based on secret key func CreateAdminAuthToken(tokenType string, c *gin.Context) (string, error) { adminSecret, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret) if err != nil { return "", err } return crypto.EncryptPassword(adminSecret) } // GetAdminAuthToken helps in getting the admin token from the request cookie func GetAdminAuthToken(gc *gin.Context) (string, error) { token, err := cookie.GetAdminCookie(gc) if err != nil || token == "" { return "", fmt.Errorf("unauthorized") } adminSecret, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret) if err != nil { return "", err } err = crypto.VerifyPassword(token, adminSecret) if err != nil { return "", fmt.Errorf(`unauthorized`) } return token, nil } // IsSuperAdmin checks if user is super admin func IsSuperAdmin(gc *gin.Context) bool { token, err := GetAdminAuthToken(gc) if err != nil { secret := gc.Request.Header.Get("x-authorizer-admin-secret") if secret == "" { return false } adminSecret, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret) if err != nil { return false } return secret == adminSecret } return token != "" }