package survey_token import ( "fmt" "surveyService/cache" "surveyService/response" "surveyService/util" "surveyService/validators" "time" jsoniter "github.com/json-iterator/go" "gogs.uu.mdfitnesscao.com/hys/sdk" ) var json = jsoniter.ConfigCompatibleWithStandardLibrary type Mechanism struct { *sdk.AuthMechanism } func InitMechanism(authMechanism *sdk.AuthMechanism) *Mechanism { return &Mechanism{authMechanism} } // 生成一个临时凭证 func (m *Mechanism) GenerateSurveyToken(surveyId, surveyResultId, extra string, expired int64) string { var tokenData = &validators.SurveyToken{ Extra: extra, SurveyId: surveyId, MechanismId: m.Mechanism.ID, SurveyResultId: surveyResultId, } token := util.RandString(12) cacheKey := fmt.Sprintf("survey-result:token:%s", token) expiredAt := time.Duration(expired) * time.Second // 保存到redis cacheErr := cache.Instance().Put(cacheKey, tokenData, expiredAt) if cacheErr != nil { return "" } return token } // 重新修改凭证里存储的数据 func RenewSurveyToken(token string, renewSurveyToken *validators.SurveyToken, expired int64) *response.ErrCode { tokenData, getErr := GetSurveyTokenData(token) if getErr != nil { return getErr } var renewTokenData = &validators.SurveyToken{ Extra: tokenData.Extra, SurveyId: tokenData.SurveyId, MechanismId: tokenData.MechanismId, SurveyResultId: renewSurveyToken.SurveyResultId, } cacheKey := fmt.Sprintf("survey-result:token:%s", token) expiredAt := time.Duration(expired) * time.Second // 保存到redis cacheErr := cache.Instance().Put(cacheKey, renewTokenData, expiredAt) if cacheErr != nil { return &response.ErrCode{ Msg: "数据更新失败", Code: response.ERROR, } } return nil } // 获取临时凭证的数据 func GetSurveyTokenData(token string) (*validators.SurveyToken, *response.ErrCode) { cacheKey := fmt.Sprintf("survey-result:token:%s", token) var tokenData *validators.SurveyToken tokenDataStr, cacheErr := cache.Instance().Get(cacheKey) if cacheErr != nil { return nil, &response.ErrCode{ Msg: "无效的凭证信息", Code: response.ERROR, } } json.UnmarshalFromString(tokenDataStr, &tokenData) return tokenData, nil } // 移除临时凭证 func RemoveSurveyToken(token string) { cacheKey := fmt.Sprintf("survey-result:token:%s", token) cache.Instance().Delete(cacheKey) }