docxTemplater/handlers/user.go
Danil Solovyov a39e9acbfa Tasks:
- OAuth Yandex API (#2vc89e8)
- OAuth Google API (#2vc8cqc)
- MAIN - работа с дисками (#2wmf8jf)
-
2022-09-15 18:53:55 +05:00

159 lines
3.2 KiB
Go

package handlers
import (
"errors"
"github.com/Pena-Co-Ltd/amocrm_templategen_back/dal/model"
"github.com/Pena-Co-Ltd/amocrm_templategen_back/middleware"
"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{
UserID: user.ID,
FullName: user.FullName,
Email: user.Email,
IsActivated: user.IsActivated,
})
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)
}