示例#1
0
文件: auth.go 项目: wcreate/wuc
func (ut *UserToken) DecodeToken(crypto *tkits.Crypto, token string) bool {
	bs, err := base64.URLEncoding.DecodeString(token)
	if err != nil {
		return false
	}

	// decrypt
	var tbs []byte
	tbs, err = crypto.Decrypt(bs)
	if err != nil {
		return false
	}

	// check the len
	if len(tbs) != TokenLen {
		return false
	}

	ut.Flag = TokenFlag(tbs[0])
	// remain bytes
	buf := bytes.NewReader(tbs[1:])

	// read uid
	if err := binary.Read(buf, binary.BigEndian, &ut.Uid); err != nil {
		return false
	}

	// ip
	var ip net.IP
	buf.Read([]byte(ip))
	ut.ClientIP = ip.String()

	// gen time
	if err := binary.Read(buf, binary.BigEndian, &ut.GenTime); err != nil {
		return false
	}

	// gen time
	if err := binary.Read(buf, binary.BigEndian, &ut.Expire); err != nil {
		return false
	}

	return true
}