Skip to content

Commit

Permalink
fix(jwt): refine jwt user parse
Browse files Browse the repository at this point in the history
  • Loading branch information
Alice52 committed Jun 21, 2024
1 parent 40f8d6c commit 53cfe52
Show file tree
Hide file tree
Showing 2 changed files with 143 additions and 8 deletions.
148 changes: 141 additions & 7 deletions model/jwt_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,24 @@ package model

import (
"encoding/json"
"errors"
"github.com/google/uuid"
)

const (
ID = "ID"
UID = "UID"
Name = "NAME"
Email = "EMAIL"
AuthorityId = "AUTHORITY_ID"
)

type JwtUser struct {
Id *int64 `json:"id"`
Id int64 `json:"id"`
Uuid uuid.UUID `json:"uuid"`
Name *string `json:"name"`
Email *string `json:"email"`
AuthorityId *int `json:"authorityId"`
Name string `json:"name"`
Email string `json:"email"`
AuthorityId int64 `json:"authorityId"`
}

func (u *JwtUser) UserMarshal() string {
Expand All @@ -22,12 +31,137 @@ func (u *JwtUser) UserMarshal() string {
return string(marshal)
}

func UserUnMarshal(value string) *JwtUser {
func MustUser(value string) *JwtUser {

if u, err := UserUnMarshal(value); err != nil {
panic(err.Error())
} else {
return u
}
}

func UserUnMarshal(value string) (*JwtUser, error) {
var u JwtUser
err := json.Unmarshal([]byte(value), &u)
if err != nil {
panic("Unmarshal claims.Value failed: " + err.Error())
return nil, errors.New("Unmarshal claims.Value failed: " + err.Error())
}

return &u, nil
}

func GetUserID(value string) (int64, error) {
if u, err := UserUnMarshal(value); err != nil {
return 0, err
} else {
return u.Id, nil
}
}

func TryUserID(value string, defaultVal ...int64) int64 {
if u, err := UserUnMarshal(value); err != nil {
if len(defaultVal) > 0 {
return defaultVal[0]
} else {
return -1
}
} else {
return u.Id
}
}

func MustUserID(value string) int64 {
return MustUser(value).Id
}

func GetUID(value string) (uuid.UUID, error) {
if u, err := UserUnMarshal(value); err != nil {
return uuid.Nil, err
} else {
return u.Uuid, nil
}
}

func TryUID(value string) uuid.UUID {
if u, err := UserUnMarshal(value); err != nil {
return uuid.Nil
} else {
return u.Uuid
}
}

func MustUID(value string) uuid.UUID {
return MustUser(value).Uuid
}

func GetAuthorityId(value string) (int64, error) {
if u, err := UserUnMarshal(value); err != nil {
return 0, err
} else {
return u.AuthorityId, nil
}
}

func TryAuthorityId(value string, defaultVal ...int64) int64 {
if u, err := UserUnMarshal(value); err != nil {
if len(defaultVal) > 0 {
return defaultVal[0]
} else {
return -1
}
} else {
return u.AuthorityId
}
}

func MustAuthorityId(value string) int64 {
return MustUser(value).AuthorityId
}

func GetEmail(value string) (string, error) {
if u, err := UserUnMarshal(value); err != nil {
return "", err
} else {
return u.Email, nil
}
}

func TryEmail(value string, defaultVal ...string) string {
if u, err := UserUnMarshal(value); err != nil {
if len(defaultVal) > 0 {
return defaultVal[0]
} else {
return ""
}
} else {
return u.Email
}
}

func MustEmail(value string) string {
return MustUser(value).Email
}

func GetName(value string) (string, error) {
if u, err := UserUnMarshal(value); err != nil {
return "", err
} else {
return u.Name, nil
}
}

func TryName(value string, defaultVal ...string) string {
if u, err := UserUnMarshal(value); err != nil {
if len(defaultVal) > 0 {
return defaultVal[0]
} else {
return ""
}
} else {
return u.Name
}
}

return &u
func MustName(value string) string {
return MustUser(value).Name
}
3 changes: 2 additions & 1 deletion util/jwt_decode.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
)

func DecodeJwt(jwt string) (*model.CustomClaims, error) {

fmt.Printf("jwt: %s\n", jwt)
parts := strings.Split(RemoveBearer(jwt), ".")
if len(parts) != 3 {
return nil, fmt.Errorf("invalid JWT token")
Expand All @@ -19,6 +19,7 @@ func DecodeJwt(jwt string) (*model.CustomClaims, error) {
}

func DecodePayload(payload string) (*model.CustomClaims, error) {
fmt.Printf("payload: %s\n", payload)
data, err := base64.RawURLEncoding.DecodeString(payload)
if err != nil {
return nil, fmt.Errorf("failed to decode payload[%v] due to %s", payload, err.Error())
Expand Down

0 comments on commit 53cfe52

Please sign in to comment.