2021-07-12 18:22:16 +00:00
|
|
|
package utils
|
|
|
|
|
2021-08-04 06:48:57 +00:00
|
|
|
import (
|
|
|
|
"net/mail"
|
2021-12-21 13:16:54 +00:00
|
|
|
"regexp"
|
2021-08-04 06:48:57 +00:00
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/authorizerdev/authorizer/server/constants"
|
2021-12-23 05:01:52 +00:00
|
|
|
"github.com/authorizerdev/authorizer/server/enum"
|
2021-09-20 05:06:26 +00:00
|
|
|
"github.com/gin-gonic/gin"
|
2021-08-04 06:48:57 +00:00
|
|
|
)
|
2021-07-12 18:22:16 +00:00
|
|
|
|
|
|
|
func IsValidEmail(email string) bool {
|
|
|
|
_, err := mail.ParseAddress(email)
|
|
|
|
return err == nil
|
|
|
|
}
|
2021-08-04 06:48:57 +00:00
|
|
|
|
2021-12-21 13:16:54 +00:00
|
|
|
func IsValidOrigin(url string) bool {
|
2021-12-31 08:22:10 +00:00
|
|
|
if len(constants.EnvData.ALLOWED_ORIGINS) == 1 && constants.EnvData.ALLOWED_ORIGINS[0] == "*" {
|
2021-08-04 06:48:57 +00:00
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
hasValidURL := false
|
2021-12-21 13:16:54 +00:00
|
|
|
hostName, port := GetHostParts(url)
|
|
|
|
currentOrigin := hostName + ":" + port
|
2021-08-04 06:48:57 +00:00
|
|
|
|
2021-12-31 08:22:10 +00:00
|
|
|
for _, origin := range constants.EnvData.ALLOWED_ORIGINS {
|
2021-12-21 13:16:54 +00:00
|
|
|
replacedString := origin
|
|
|
|
// if has regex whitelisted domains
|
|
|
|
if strings.Contains(origin, "*") {
|
|
|
|
replacedString = strings.Replace(origin, ".", "\\.", -1)
|
|
|
|
replacedString = strings.Replace(replacedString, "*", ".*", -1)
|
|
|
|
|
|
|
|
if strings.HasPrefix(replacedString, ".*") {
|
|
|
|
replacedString += "\\b"
|
|
|
|
}
|
|
|
|
|
|
|
|
if strings.HasSuffix(replacedString, ".*") {
|
|
|
|
replacedString = "\\b" + replacedString
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if matched, _ := regexp.MatchString(replacedString, currentOrigin); matched {
|
2021-08-04 06:48:57 +00:00
|
|
|
hasValidURL = true
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return hasValidURL
|
|
|
|
}
|
2021-09-20 05:06:26 +00:00
|
|
|
|
|
|
|
func IsSuperAdmin(gc *gin.Context) bool {
|
2021-12-31 08:22:10 +00:00
|
|
|
token, err := GetAdminAuthToken(gc)
|
|
|
|
if err != nil {
|
|
|
|
secret := gc.Request.Header.Get("x-authorizer-admin-secret")
|
|
|
|
if secret == "" {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
return secret == constants.EnvData.ADMIN_SECRET
|
2021-09-20 05:06:26 +00:00
|
|
|
}
|
|
|
|
|
2021-12-31 08:22:10 +00:00
|
|
|
return token != ""
|
2021-09-20 05:06:26 +00:00
|
|
|
}
|
|
|
|
|
2021-10-13 16:41:41 +00:00
|
|
|
func IsValidRoles(userRoles []string, roles []string) bool {
|
2021-09-20 05:06:26 +00:00
|
|
|
valid := true
|
2021-10-13 16:41:41 +00:00
|
|
|
for _, role := range roles {
|
2021-10-19 07:27:59 +00:00
|
|
|
if !StringSliceContains(userRoles, role) {
|
2021-09-20 05:06:26 +00:00
|
|
|
valid = false
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return valid
|
|
|
|
}
|
|
|
|
|
2021-12-23 05:01:52 +00:00
|
|
|
func IsValidVerificationIdentifier(identifier string) bool {
|
|
|
|
if identifier != enum.BasicAuthSignup.String() && identifier != enum.ForgotPassword.String() && identifier != enum.UpdateEmail.String() {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2021-09-20 05:06:26 +00:00
|
|
|
func IsStringArrayEqual(a, b []string) bool {
|
|
|
|
if len(a) != len(b) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
for i, v := range a {
|
|
|
|
if v != b[i] {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|