This commit is contained in:
2023-12-29 00:27:12 +09:00
parent b4a0b72f66
commit c31a16843d
35 changed files with 451 additions and 261 deletions

View File

@ -7,6 +7,8 @@ import (
"strings"
config "learnsteam/cslms-api/configs"
"learnsteam/cslms-api/internal/database"
"learnsteam/cslms-api/internal/models"
"github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt/v5"
@ -35,10 +37,14 @@ func Auth(permission string) gin.HandlerFunc {
return
}
fmt.Println("token", extract(c.Request))
fmt.Println("sub", sub)
valid := Valid(c.Request)
if !valid {
c.JSON(http.StatusUnauthorized, gin.H{"error": "token is not valid"})
c.Abort()
return
}
c.Set("token", extract(c.Request))
c.Set("token", Extract(c.Request))
c.Set("sub", sub)
c.Set("role", role)
c.Next()
@ -67,17 +73,21 @@ func Permission(permission *string) gin.HandlerFunc {
return
}
fmt.Println("token", extract(c.Request))
fmt.Println("sub", sub)
valid := Valid(c.Request)
if !valid {
c.JSON(http.StatusUnauthorized, gin.H{"error": "token is not valid"})
c.Abort()
return
}
c.Set("token", extract(c.Request))
c.Set("token", Extract(c.Request))
c.Set("sub", sub)
c.Set("role", role)
c.Next()
}
}
func extract(r *http.Request) string {
func Extract(r *http.Request) string {
authorization := r.Header.Get("Authorization")
strArr := strings.Split(authorization, " ")
if len(strArr) == 2 {
@ -86,8 +96,8 @@ func extract(r *http.Request) string {
return ""
}
func verify(r *http.Request) (*jwt.Token, error) {
tokenString := extract(r)
func Verify(r *http.Request) (*jwt.Token, error) {
tokenString := Extract(r)
jwtToken, err := jwt.Parse(tokenString, func(jwtToken *jwt.Token) (interface{}, error) {
if _, ok := jwtToken.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("unexpected signing method: %v", jwtToken.Header["alg"])
@ -99,8 +109,9 @@ func verify(r *http.Request) (*jwt.Token, error) {
}
func UserID(r *http.Request) (int64, error) {
jwtToken, err := verify(r)
jwtToken, err := Verify(r)
if err != nil {
fmt.Println(err)
return -1, err
}
@ -120,7 +131,7 @@ func UserID(r *http.Request) (int64, error) {
}
func Role(r *http.Request) (*string, error) {
jwtToken, err := verify(r)
jwtToken, err := Verify(r)
if err != nil {
return nil, err
}
@ -134,3 +145,12 @@ func Role(r *http.Request) (*string, error) {
return &role, nil
}
func Valid(r *http.Request) bool {
tokenString := Extract(r)
var token models.Token
fmt.Println(tokenString)
err := database.DB.Where("token = ? AND status = ?", tokenString, "on").First(&token).Error
fmt.Println(&token)
return err == nil
}