github.com/glide-im/glide@v1.6.0/pkg/auth/jwt_auth/auth.go (about)

     1  package jwt_auth
     2  
     3  import (
     4  	"errors"
     5  	"github.com/glide-im/glide/pkg/auth"
     6  	"time"
     7  )
     8  
     9  type JwtAuthorize struct {
    10  }
    11  
    12  type JwtAuthInfo struct {
    13  	UID         string
    14  	Device      string
    15  	ExpiredHour int64
    16  }
    17  
    18  type Response struct {
    19  	Token  string
    20  	Uid    string
    21  	Device string
    22  	Server []string
    23  }
    24  
    25  func NewAuthorizeImpl(secret string) *JwtAuthorize {
    26  	jwtSecret = []byte(secret)
    27  	return &JwtAuthorize{}
    28  }
    29  
    30  func (a JwtAuthorize) Auth(c auth.Info, t *auth.Token) (*auth.Result, error) {
    31  
    32  	token, err := parseJwt(t.Token)
    33  	if err != nil {
    34  
    35  		result := auth.Result{
    36  			Success: false,
    37  			Msg:     "invalid token",
    38  		}
    39  		return &result, nil
    40  	}
    41  
    42  	return &auth.Result{
    43  		Success: true,
    44  		Response: &Response{
    45  			Token:  t.Token,
    46  			Uid:    token.Uid,
    47  			Server: nil,
    48  		},
    49  	}, nil
    50  }
    51  
    52  func (a JwtAuthorize) RemoveToken(t *auth.Token) error {
    53  	return nil
    54  }
    55  
    56  func (a JwtAuthorize) GetToken(c auth.Info) (*auth.Token, error) {
    57  
    58  	info, ok := c.(*JwtAuthInfo)
    59  	if !ok {
    60  		return nil, errors.New("invalid auth info")
    61  	}
    62  
    63  	jt := Claims{
    64  		Uid:    info.UID,
    65  		Device: info.Device,
    66  		Ver:    genJwtVersion(),
    67  	}
    68  	if info.ExpiredHour == 0 {
    69  		info.ExpiredHour = 7 * 24
    70  	}
    71  	expire := time.Now().Add(time.Hour * time.Duration(info.ExpiredHour))
    72  	token, err := genJwtExp(jt, expire)
    73  	if err != nil {
    74  		return nil, errors.New("generate token failed")
    75  	}
    76  	return &auth.Token{Token: token}, nil
    77  }