package internal import ( "context" "log" "os" "github.com/golang-jwt/jwt/v5" ) type JwtPayload struct { UserId float64 `json:"id"` NamaLengkap string `json:"nama_lengkap"` NotesId string `json:"notes_id"` FasyankesId float64 `json:"fasyankes_id"` Email string `json:"email"` UserType float64 `json:"user_type"` PPKPelayanan interface{} `json:"ppk_pelayanan"` AlamatFasyankes interface{} `json:"alamat_fasyankes"` } func GetPayloadFromContext(ctx context.Context) *JwtPayload { payload, ok := ctx.Value(UserContext).(JwtPayload) if !ok { return nil } return &payload } func ParseJWT(s string) JwtPayload { salt := os.Getenv("JWT_SALT") mySecretKey := []byte(salt) // Parse the token token, err := jwt.Parse(s, func(token *jwt.Token) (interface{}, error) { return mySecretKey, nil }) if err != nil { log.Fatal(err) } claims, valid := token.Claims.(jwt.MapClaims) if !valid && !token.Valid { log.Fatal("Invalid token") } data := claims["user"].(map[string]interface{}) parsedToken := JwtPayload{ UserId: data["id"].(float64), NamaLengkap: data["namaLengkap"].(string), NotesId: data["notesId"].(string), FasyankesId: data["fasyankesId"].(float64), Email: data["email"].(string), UserType: data["userType"].(float64), PPKPelayanan: data["ppkPelayanan"], AlamatFasyankes: data["alamatFasyankes"], } return parsedToken }