123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- package server
- import (
- "crypto/md5"
- "encoding/base64"
- "encoding/hex"
- "encoding/json"
- "fmt"
- "strings"
- "time"
- "github.com/pborman/uuid"
- "gopkg.in/redis.v2"
- "xiaoniaokuaiyan.com/xiaoniao/config"
- "xiaoniaokuaiyan.com/xiaoniao/util"
- )
- type AuthToken struct {
- AccessToken string `json:"access_token"`
- TokenType string `json:"token_type,omitempty"`
- Expiry util.Time `json:"expiry,omitempty"`
- ClientId string `json:"clientid"`
- Iss string `json:"iss"`
- }
- // expired reports whether the token is expired.
- // t must be non-nil.
- func (t *AuthToken) expired() bool {
- if t.Expiry.IsZero() {
- return false
- }
- return t.Expiry.Add(-10 * time.Second).Before(time.Now())
- }
- // Valid reports whether t is non-nil, has an accessToken, and is not expired.
- func (t *AuthToken) IsValid() bool {
- return t != nil && t.AccessToken != "" && !t.expired()
- }
- /*func (t *AuthToken) MarshalJSON() ([]byte, error) {
- return json.Marshal(struct {
- accessToken string `json:"access_token"`
- TokenType string `json:"token_type"`
- Expiry int64 `json:"expiry"`
- Iss string `json:"iss"`
- }{
- accessToken: t.accessToken,
- TokenType: t.TokenType,
- Expiry: t.Expiry.Unix(),
- Iss: t.Iss,
- })
- }
- func (t *AuthToken) UnmarshalJSON(buf []byte) err{
- }*/
- type SessionToken struct {
- Token string `json:"token"`
- Data interface{} `json:"data"`
- }
- /*func (st *SessionToken) IsValid() bool {
- if isExp := st.Expiry.Add(-10 * time.Second).Before(time.Now()); isExp {
- return false
- }
- return st.Token != ""
- }*/
- //刷新登录会话token过期时间
- func TouchSessionToken(tokenStr string) (*SessionToken, error) {
- var client *redis.Client = util.GetRedis()
- client.Select(REDIS_API_AUTH_DB)
- /*strCmd := client.HGet(REDIS_API_SESSION_KEY, tokenStr)
- if err := strCmd.Err(); err != nil {
- return nil, err
- }
- sessionToken := &SessionToken{}
- err := json.Unmarshal([]byte(strCmd.Val()), sessionToken)
- if err != nil {
- return nil, err
- }
- sessionToken.Expiry = util.Time{time.Now().Add(time.Hour * 24)}
- sb, _ := json.Marshal(sessionToken)
- bcmd := client.HSet(REDIS_API_SESSION_KEY, tokenStr, string(sb))
- if err := bcmd.Err(); err != nil {
- return nil, err
- }*/
- var exp int64
- exp, _ = config.IniConf.Section("server").Key("redis_api_session_expire").Int64()
- if exp < 30 {
- exp = 60
- }
- bcmd := client.Expire(tokenStr, time.Minute*time.Duration(exp))
- if err := bcmd.Err(); err != nil {
- return nil, err
- }
- return nil, nil
- }
- func GenerateSessionToken(userid string) *SessionToken {
- token := uuid.NewRandom()
- tokenStr := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(token)), "=")
- return &SessionToken{
- Token: tokenStr,
- Data: userid,
- }
- }
- func GenerateSessionId(userid string, source string) string {
- sessStr := fmt.Sprintf("%v-%v", userid, source)
- dst := md5.Sum([]byte(sessStr))
- return hex.EncodeToString(dst[0:])
- }
- func GetLoginSession(token string) (*SessionToken, error) {
- var client *redis.Client = util.GetRedis()
- client.Select(REDIS_API_AUTH_DB)
- strCmd := client.Get(token)
- if err := strCmd.Err(); err != nil {
- return nil, err
- }
- sessionToken := &SessionToken{}
- err := json.Unmarshal([]byte(strCmd.Val()), sessionToken)
- if err != nil {
- return nil, err
- }
- return sessionToken, nil
- }
|