2022-07-28 15:00:43 +00:00
|
|
|
package handlers
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
2022-09-15 13:53:55 +00:00
|
|
|
"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)
|
|
|
|
}
|