package auth import ( "nixcn-cms/internal/exception" "nixcn-cms/pkgs/authtoken" "nixcn-cms/utils" "github.com/gin-gonic/gin" "github.com/spf13/viper" ) func Refresh(c *gin.Context) { var req struct { RefreshToken string `json:"refresh_token"` } if err := c.ShouldBindJSON(&req); err != nil { errorCode := new(exception.Builder). SetStatus(exception.ErrorStatusClient). SetService(exception.AuthService). SetEndpoint(exception.AuthRefreshEndpoint). SetType(exception.ErrorTypeCommon). SetOriginal(exception.CommonErrorInvalidInput). Build() utils.HttpResponse(c, 400, errorCode) return } JwtTool := authtoken.Token{ Application: viper.GetString("server.application"), } accessToken, err := JwtTool.RefreshAccessToken(req.RefreshToken) if err != nil { errorCode := new(exception.Builder). SetStatus(exception.ErrorStatusClient). SetService(exception.AuthService). SetEndpoint(exception.AuthRefreshEndpoint). SetType(exception.ErrorTypeSpecific). SetOriginal(exception.AuthRefreshInvalidToken). Build() utils.HttpResponse(c, 401, errorCode) return } refreshToken, err := JwtTool.RenewRefreshToken(req.RefreshToken) if err != nil { errorCode := new(exception.Builder). SetStatus(exception.ErrorStatusServer). SetService(exception.AuthService). SetEndpoint(exception.AuthRefreshEndpoint). SetType(exception.ErrorTypeSpecific). SetOriginal(exception.AuthRefreshRenewFailed). Build() utils.HttpResponse(c, 500, errorCode) return } tokenResp := struct { AccessToken string `json:"access_token"` RefreshToken string `json:"refresh_token"` }{accessToken, refreshToken} utils.HttpResponse(c, 200, "", "success", tokenResp) }