124 lines
3.4 KiB
Go
124 lines
3.4 KiB
Go
package user
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/golang-jwt/jwt/v5"
|
|
"github.com/gorilla/mux"
|
|
"sismedika.com/sas/westone/services/auth"
|
|
"sismedika.com/sas/westone/types"
|
|
"sismedika.com/sas/westone/utils"
|
|
)
|
|
|
|
type Handler struct {
|
|
store types.UserStore
|
|
errorStore types.ErrorLogStore
|
|
}
|
|
|
|
func NewHandler(store types.UserStore, errorStore types.ErrorLogStore) *Handler {
|
|
return &Handler{
|
|
store: store,
|
|
errorStore: errorStore,
|
|
}
|
|
}
|
|
|
|
func (h *Handler) RegisterRoutes(router *mux.Router) {
|
|
router.HandleFunc("/login", h.handleLogin).Methods("POST")
|
|
router.HandleFunc("/register", h.handleRegister).Methods("POST")
|
|
|
|
// admin routes
|
|
// router.HandleFunc("/users/{userID}", auth.WithJWTAuth(h.handleGetUser)).Methods(http.MethodGet)
|
|
}
|
|
|
|
func (h *Handler) handleLogin(w http.ResponseWriter, r *http.Request) {
|
|
// var payload types.SignInPayload
|
|
// if err := utils.ParseJSON(r, &payload); err != nil {
|
|
// utils.WriteError(w, http.StatusBadRequest, err)
|
|
// return
|
|
// }
|
|
|
|
// if err := utils.Validate.Struct(payload); err != nil {
|
|
// errors := err.(validator.ValidationErrors)
|
|
// utils.WriteError(w, http.StatusBadRequest, fmt.Errorf("invalid payload: %v", errors))
|
|
// return
|
|
// }
|
|
|
|
// hashedPassword := auth.HashWithMD5(payload.Password)
|
|
// response, err := h.store.SignIn(payload.Email, hashedPassword)
|
|
// if err != nil {
|
|
// var logError *utils.LogError
|
|
// if errors.As(err, &logError) {
|
|
// h.errorStore.CreateErrorLog(*logError)
|
|
// utils.WriteErrorLog(w, http.StatusBadRequest, *logError)
|
|
// }
|
|
// return
|
|
// }
|
|
// // remoteAddr := r.RemoteAddr
|
|
// // userAgent := r.UserAgent()
|
|
// // response.IP = remoteAddr
|
|
// // response.Agent = userAgent
|
|
|
|
// secret := []byte(configs.Envs.JWTSecret)
|
|
// token, err := auth.CreateJWT(secret, *response)
|
|
// if err != nil {
|
|
// utils.WriteError(w, http.StatusInternalServerError, err)
|
|
// return
|
|
// }
|
|
|
|
// utils.WriteJSONLogin(w, http.StatusOK, response, token, "westone")
|
|
}
|
|
|
|
func (h *Handler) handleRegister(w http.ResponseWriter, r *http.Request) {
|
|
// var user types.RegisterUserPayload
|
|
// if err := utils.ParseJSON(r, &user); err != nil {
|
|
// utils.WriteError(w, http.StatusBadRequest, err)
|
|
// return
|
|
// }
|
|
|
|
// if err := utils.Validate.Struct(user); err != nil {
|
|
// errors := err.(validator.ValidationErrors)
|
|
// utils.WriteError(w, http.StatusBadRequest, fmt.Errorf("invalid payload: %v", errors))
|
|
// return
|
|
// }
|
|
|
|
// // check if user exists
|
|
// _, err := h.store.GetUserByEmail(user.Email)
|
|
// if err == nil {
|
|
// utils.WriteError(w, http.StatusBadRequest, fmt.Errorf("user with email %s already exists", user.Email))
|
|
// return
|
|
// }
|
|
|
|
// // hash password
|
|
// hashedPassword, err := auth.HashPassword(user.Password)
|
|
// if err != nil {
|
|
// utils.WriteError(w, http.StatusInternalServerError, err)
|
|
// return
|
|
// }
|
|
|
|
// err = h.store.CreateUser(types.User{
|
|
// FirstName: user.FirstName,
|
|
// LastName: user.LastName,
|
|
// Email: user.Email,
|
|
// Password: hashedPassword,
|
|
// })
|
|
// if err != nil {
|
|
// utils.WriteError(w, http.StatusInternalServerError, err)
|
|
// return
|
|
// }
|
|
|
|
// utils.WriteJSON(w, http.StatusCreated, nil)
|
|
}
|
|
|
|
func (h *Handler) handleGetUser(w http.ResponseWriter, r *http.Request) {
|
|
claims, ok := r.Context().Value(auth.UserContextKey).(jwt.MapClaims)
|
|
if !ok {
|
|
utils.WriteError(w, http.StatusInternalServerError, fmt.Errorf("token not found in context"))
|
|
return
|
|
}
|
|
|
|
email := claims["M_UserEmail"]
|
|
|
|
utils.WriteJSON(w, http.StatusOK, email)
|
|
}
|