package auth import ( "fmt" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/handler_utils" "golang.org/x/crypto/bcrypt" "math/rand" "strings" ) // GetBearerTokenFromHeaders checks if a bearer token is passed as part of the Authorization header and returns that key func GetBearerTokenFromHeaders(headers map[string]string) string { headerValue := handler_utils.FindHeaderValue(headers, "authorization") if strings.HasPrefix(strings.ToLower(headerValue), "bearer ") { headerValues := strings.Split(headerValue, " ") return strings.TrimSpace(headerValues[1]) } return "" } // HashPassword returns a hashed version of the provided password. func HashPassword(password string) (string, error) { encryptedBytes, err := bcrypt.GenerateFromPassword([]byte(password), 14) if err != nil { return "", err } return string(encryptedBytes), nil } // PasswordIsCorrect checks whether the password is correct by validating it against the hashed password. func PasswordIsCorrect(password string, hashedPassword string) bool { err := bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(password)) return err == nil } // Create a pseudorandom password consisting of two three-letter words and two digits func RandomPassword() string { i := rand.Intn(100) var j int for { j = rand.Intn(100) if j != i { break } } return fmt.Sprintf("%s%s%s", words[i], words[j], RandomDigitString(2)) } // Create a pseudorandom string of digits (0-9) with specified length func RandomDigitString(len int) string { var str strings.Builder for i := 0; i < len; i++ { fmt.Fprintf(&str, "%v", rand.Intn(10)) } return str.String() }