package auth import ( "errors" "fmt" "net/http" "time" "github.com/go-playground/validator/v10" "sismedika.com/sas/westone/types" "sismedika.com/sas/westone/utils" ) // Login login using westone account // // @Summary login using westone account // @Description login using westone account // @Tags Auth // @Accept json // @Param parameter body types.SignInPayload true "parameter" // @Produce json // @Success 200 {object} map[string]any // @Failure 400 {object} map[string]any // @Failure 500 {object} map[string]any // @Router /westone/api/v1/auth/login [post] func (h *Handler) handleLogin(w http.ResponseWriter, r *http.Request) { var payload types.SignInPayload fmt.Println("User Agent") fmt.Println(r.UserAgent()) if err := utils.ParseJSON(r, &payload); err != nil { utils.WriteError(w, http.StatusBadRequest, err) // h.store.LogSignIn(payload.Email, r.RemoteAddr, "FAILED", "LOGIN", "westone") h.store.LogRISLogin(0, r.UserAgent(), payload.Email, err.Error(), "FAILED") return } if err := utils.Validate.Struct(payload); err != nil { errorz := err.(validator.ValidationErrors) utils.WriteError(w, http.StatusBadRequest, fmt.Errorf("invalid payload: %v", errorz)) // h.store.LogSignIn(payload.Email, r.RemoteAddr, "FAILED", "LOGIN", "westone") h.store.LogRISLogin(0, r.UserAgent(), payload.Email, err.Error(), "FAILED") return } hashedPassword := HashWithMD5(payload.Password) response, err := h.store.SignInWestone(payload.Email, hashedPassword) if err != nil { var logError *utils.LogError if errors.As(err, &logError) { h.errorz.CreateErrorLog(*logError) utils.WriteErrorLog(w, http.StatusBadRequest, *logError) } // h.store.LogSignIn(payload.Email, r.RemoteAddr, "FAILED", "LOGIN", "westone") h.store.LogRISLogin(0, r.UserAgent(), response.M_StaffName, "FAILED", err.Error()) return } timenow := time.Now() token, err := CreateJWT(types.DataJWT{ User: *response, Ip: r.RemoteAddr, Agent: r.UserAgent(), Version: "v1", LastLogin: timenow.Format("2006-01-02 15:04:05"), }) if err != nil { utils.WriteError(w, http.StatusInternalServerError, err) // h.store.LogSignIn(payload.Email, r.RemoteAddr, "FAILED", "LOGIN", "westone") h.store.LogRISLogin(0, r.UserAgent(), payload.Email, err.Error(), "FAILED") return } err = h.store.UpdateUserToken(response.M_UserID, token) if err != nil { fmt.Println("err diluar", err) tst := h.store.LogRISLogin(0, r.UserAgent(), payload.Email, err.Error(), "FAILED") if tst != nil { fmt.Println("err log ris login", tst) } var logError *utils.LogError if errors.As(err, &logError) { h.errorz.CreateErrorLog(*logError) utils.WriteErrorLog(w, http.StatusBadRequest, *logError) } return } err = h.store.LogRISLogin(response.M_UserID, r.UserAgent(), response.M_StaffName, "SUCCESS", "SUCCESS") if err != nil { var logError *utils.LogError if errors.As(err, &logError) { h.errorz.CreateErrorLog(*logError) utils.WriteErrorLog(w, http.StatusBadRequest, *logError) } // h.store.LogSignIn(payload.Email, r.RemoteAddr, "FAILED", "LOGIN", "westone") return } utils.WriteJSONLogin(w, http.StatusOK, response, token, "westone") }