65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/dgrijalva/jwt-go"
|
|
"github.com/gofiber/fiber/v2"
|
|
"golang.org/x/crypto/bcrypt"
|
|
)
|
|
|
|
func HashPassword(password string) ([]byte, error) {
|
|
return bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
|
}
|
|
|
|
func VerifyAuthentication(c *fiber.Ctx, cookie string) (*jwt.StandardClaims, error) {
|
|
|
|
token, err := jwt.ParseWithClaims(cookie, &jwt.StandardClaims{}, func(token *jwt.Token) (interface{}, error) {
|
|
return []byte(os.Getenv("API_SECRET")), nil
|
|
})
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
claims := token.Claims.(*jwt.StandardClaims)
|
|
|
|
return claims, nil
|
|
}
|
|
|
|
func ProcessToken(c *fiber.Ctx) (interface{}, error) {
|
|
bearToken := c.Get("Authorization")
|
|
|
|
var token string
|
|
|
|
// Normally Authorization HTTP header.
|
|
onlyToken := strings.Split(bearToken, " ")
|
|
if len(onlyToken) == 2 {
|
|
token = onlyToken[1]
|
|
} else {
|
|
token = bearToken
|
|
}
|
|
|
|
tk, err := jwt.Parse(token, jwtKeyFunc)
|
|
|
|
if err != nil {
|
|
fmt.Println("Error 1")
|
|
return nil, err
|
|
}
|
|
|
|
claims, ok := tk.Claims.(jwt.MapClaims)
|
|
|
|
if ok && tk.Valid {
|
|
fmt.Printf("claims user: %v\n", claims["user"])
|
|
return claims["user"], nil
|
|
}
|
|
|
|
return nil, err
|
|
}
|
|
|
|
func jwtKeyFunc(token *jwt.Token) (interface{}, error) {
|
|
return []byte(os.Getenv("API_SECRET")), nil
|
|
}
|