in Server/go/apptoken/apptoken.go [115:162]
func (token *AppToken) Build() (string, error) {
if token.AppKey == "" {
return "", errors.New("illegal AppKey")
}
if token.Service == nil {
return "", errors.New("illegal Service")
}
token.Service.Validate()
generatedSign, err := utils.GenerateSign(token.AppKey, token.IssueTimestamp, token.Salt)
if err != nil {
return "", errors.New("generate sign failed")
}
buf, err := token.buildSignBody()
if buf == nil || err != nil {
return "", errors.New("build sign body failed")
}
// sign
sign, err := utils.Sign(generatedSign, buf)
if err != nil {
return "", errors.New("sign failed")
}
tokenBuf := new(bytes.Buffer)
// signLength
if err := binary.Write(tokenBuf, binary.BigEndian, int32(len(sign))); err != nil {
return "", errors.New("illegal sign")
}
// signBody
if err := binary.Write(tokenBuf, binary.BigEndian, sign); err != nil {
return "", errors.New("illegal sign")
}
// buf
if err := binary.Write(tokenBuf, binary.BigEndian, buf); err != nil {
return "", errors.New("illegal buf")
}
tokenCompress, err := utils.Compress(tokenBuf.Bytes())
if err != nil {
return "", errors.New("token compress failed")
}
return VERSION_0 + base64.StdEncoding.EncodeToString(tokenCompress), nil
}