func()

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
}