package auth import ( "nixcn-cms/data" "nixcn-cms/pkgs/authcode" "nixcn-cms/pkgs/authtoken" "github.com/gin-gonic/gin" "github.com/spf13/viper" ) type TokenRequest struct { Code string `json:"code"` } func Token(c *gin.Context) { var req TokenRequest err := c.ShouldBindJSON(&req) if err != nil { c.JSON(400, gin.H{"status": "invalid request"}) return } email, ok := authcode.VerifyAuthCode(req.Code) if !ok { c.JSON(403, gin.H{"status": "invalid or expired token"}) return } userData := new(data.User) user, err := userData.GetByEmail(email) if err != nil { c.JSON(500, gin.H{"status": "internal server error"}) return } // Generate jwt JwtTool := authtoken.Token{ Application: viper.GetString("server.application"), } accessToken, refreshToken, err := JwtTool.IssueTokens(user.UserId) if err != nil { c.JSON(500, gin.H{"status": "error generating tokens"}) return } c.JSON(200, gin.H{ "access_token": accessToken, "refresh_token": refreshToken, }) }