package api import ( "time" ) type renewAccessRequest struct { RefreshToken string `json:"refresh_token" binding:"required"` } type renewAccessResponse struct { AccesToken string `json:"access_token"` AccessTokenExpiresAt time.Time `json:"access_token_expires_at"` } // func (server *Server) renewAccessToken(ctx *gin.Context) { // var req renewAccessRequest // if err := ctx.ShouldBindJSON(&req); err != nil { // ctx.JSON(http.StatusBadRequest, errorResponse(err, "")) // return // } // refreshPayload, err := server.tokenMaker.VerifyToken(req.RefreshToken) // if err != nil { // ctx.JSON(http.StatusUnauthorized, errorResponse(err, "")) // return // } // session, err := server.store.GetSession(ctx, refreshPayload.ID) // if err != nil { // if err == sql.ErrNoRows { // ctx.JSON(http.StatusNotFound, errorResponse(err, "")) // return // } // ctx.JSON(http.StatusInternalServerError, errorResponse(err, "")) // return // } // if session.IsBlocked { // err := fmt.Errorf("blocked session") // ctx.JSON(http.StatusUnauthorized, errorResponse(err, "")) // return // } // if session.Email != refreshPayload.Email { // err := fmt.Errorf("incorrect session user") // ctx.JSON(http.StatusUnauthorized, errorResponse(err, "")) // return // } // if session.RefreshToken != req.RefreshToken { // err := fmt.Errorf("mismatched session token") // ctx.JSON(http.StatusUnauthorized, errorResponse(err, "")) // return // } // if time.Now().After(refreshPayload.ExpiredAt) { // err := fmt.Errorf("Expired session") // ctx.JSON(http.StatusUnauthorized, errorResponse(err, "")) // return // } // user, err := server.store.GetUserByEmail(ctx, refreshPayload.Email) // if err != nil { // if err == sql.ErrNoRows { // ctx.JSON(http.StatusNotFound, errorResponse(err, "")) // return // } // ctx.JSON(http.StatusInternalServerError, errorResponse(err, "")) // return // } // merchant, err := server.store.GetMerchantByUserId(ctx, user.ID) // if err != nil { // ctx.JSON(http.StatusInternalServerError, errorResponse(err, "")) // return // } // accessToken, accessPayload, err := server.tokenMaker.CreateToken( // refreshPayload.Email, // merchant.ID.String(), // server.config.TokenDuration, // ) // if err != nil { // ctx.JSON(http.StatusInternalServerError, errorResponse(err, "")) // return // } // res := renewAccessResponse{ // AccesToken: accessToken, // AccessTokenExpiresAt: accessPayload.ExpiredAt, // } // ctx.JSON(http.StatusOK, res) // }