docxTemplater/handlers/user.go

159 lines
3.2 KiB
Go
Raw Normal View History

2022-07-28 15:00:43 +00:00
package handlers
import (
"errors"
"github.com/Pena-Co-Ltd/amocrm_templategen_back/dal/model"
"github.com/Pena-Co-Ltd/amocrm_templategen_back/middleware"
2022-07-28 15:00:43 +00:00
"github.com/dgrijalva/jwt-go"
"go.uber.org/zap"
"golang.org/x/crypto/bcrypt"
"net/http"
"time"
)
type RespRegistration struct {
FullName string `json:"full-name" schema:"full-name,required"`
Email string `json:"email" schema:"email,required"`
Password string `json:"password" schema:"password,required"`
}
func (h *Handlers) UserRegistration(w http.ResponseWriter, r *http.Request) {
var resp RespRegistration
err := decodePost(&resp, r)
if err != nil {
h.reportError(w, err, 500)
return
}
id, err := h.dal.User.Insert(r.Context(), &model.User{
FullName: resp.FullName,
Email: resp.Email,
Password: resp.Password,
})
if err != nil {
h.reportError(w, err, 500)
return
}
// Set jwt token
token := jwt.NewWithClaims(jwt.SigningMethodHS256, &middleware.UserClaims{UserID: id, FullName: resp.FullName,
Email: resp.Email})
ss, err := token.SignedString(middleware.JwtSecret)
if err != nil {
h.reportError(w, err, 500)
return
}
http.SetCookie(w, &http.Cookie{
Name: "Authorization",
Value: ss,
MaxAge: 3600 * 24 * 30,
Path: "/",
})
sendResponse(w, 200, nil)
}
type RespLogin struct {
Email string `json:"email" schema:"email,required"`
Password string `json:"password" schema:"password,required"`
}
func (h *Handlers) UserLogin(w http.ResponseWriter, r *http.Request) {
var resp RespLogin
err := decodePost(&resp, r)
if err != nil {
h.reportError(w, err, 500)
return
}
user, err := h.dal.User.GetByEmail(r.Context(), resp.Email)
if err != nil {
h.reportError(w, err, 500)
return
}
// Check password
err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(resp.Password))
if err != nil {
h.reportError(w, errors.New("incorrect password"), http.StatusForbidden)
return
}
// Set jwt token
token := jwt.NewWithClaims(jwt.SigningMethodHS256, &middleware.UserClaims{
2022-08-10 13:53:34 +00:00
UserID: user.ID,
FullName: user.FullName,
Email: user.Email,
IsActivated: user.IsActivated,
2022-07-28 15:00:43 +00:00
})
ss, err := token.SignedString(middleware.JwtSecret)
if err != nil {
h.reportError(w, err, 500)
return
}
http.SetCookie(w, &http.Cookie{
Name: "Authorization",
Value: ss,
MaxAge: 3600 * 24 * 30,
Path: "/",
})
sendResponse(w, 200, nil)
}
func (h *Handlers) UserLogout(w http.ResponseWriter, r *http.Request) {
http.SetCookie(w, &http.Cookie{
Name: "Authorization",
Value: "",
MaxAge: -1,
Path: "/",
Expires: time.Unix(0, 0),
})
sendResponse(w, 200, nil)
}
func (h *Handlers) UserDelete(w http.ResponseWriter, r *http.Request) {
user := getJwtUser(r)
if user == nil {
h.reportError(w, ErrorUnauthorized, http.StatusUnauthorized)
return
}
err := h.dal.User.Delete(r.Context(), user.UserID)
if err != nil {
h.reportError(w, err, http.StatusInternalServerError)
return
}
err = h.dal.YaDisk.DeleteByUserID(r.Context(), user.UserID)
if err != nil {
h.logger.Error("ErrorHandler", zap.Error(err))
}
http.SetCookie(w, &http.Cookie{
Name: "Authorization",
Value: "",
MaxAge: -1,
Path: "/",
Expires: time.Unix(0, 0),
})
sendResponse(w, 200, nil)
}