115 lines
2.6 KiB
Go
115 lines
2.6 KiB
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"homework-manager/internal/middleware"
|
|
"homework-manager/internal/service"
|
|
|
|
"github.com/gin-contrib/sessions"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type AuthHandler struct {
|
|
authService *service.AuthService
|
|
}
|
|
|
|
func NewAuthHandler() *AuthHandler {
|
|
return &AuthHandler{
|
|
authService: service.NewAuthService(),
|
|
}
|
|
}
|
|
|
|
func (h *AuthHandler) ShowLogin(c *gin.Context) {
|
|
RenderHTML(c, http.StatusOK, "login.html", gin.H{
|
|
"title": "ログイン",
|
|
})
|
|
}
|
|
|
|
func (h *AuthHandler) Login(c *gin.Context) {
|
|
email := c.PostForm("email")
|
|
password := c.PostForm("password")
|
|
|
|
user, err := h.authService.Login(email, password)
|
|
if err != nil {
|
|
RenderHTML(c, http.StatusOK, "login.html", gin.H{
|
|
"title": "ログイン",
|
|
"error": "メールアドレスまたはパスワードが正しくありません",
|
|
"email": email,
|
|
})
|
|
return
|
|
}
|
|
|
|
session := sessions.Default(c)
|
|
session.Set(middleware.UserIDKey, user.ID)
|
|
session.Set(middleware.UserRoleKey, user.Role)
|
|
session.Set(middleware.UserNameKey, user.Name)
|
|
session.Save()
|
|
|
|
c.Redirect(http.StatusFound, "/")
|
|
}
|
|
|
|
func (h *AuthHandler) ShowRegister(c *gin.Context) {
|
|
RenderHTML(c, http.StatusOK, "register.html", gin.H{
|
|
"title": "新規登録",
|
|
})
|
|
}
|
|
|
|
func (h *AuthHandler) Register(c *gin.Context) {
|
|
email := c.PostForm("email")
|
|
password := c.PostForm("password")
|
|
passwordConfirm := c.PostForm("password_confirm")
|
|
name := c.PostForm("name")
|
|
|
|
if password != passwordConfirm {
|
|
RenderHTML(c, http.StatusOK, "register.html", gin.H{
|
|
"title": "新規登録",
|
|
"error": "パスワードが一致しません",
|
|
"email": email,
|
|
"name": name,
|
|
})
|
|
return
|
|
}
|
|
|
|
if len(password) < 8 {
|
|
RenderHTML(c, http.StatusOK, "register.html", gin.H{
|
|
"title": "新規登録",
|
|
"error": "パスワードは8文字以上で入力してください",
|
|
"email": email,
|
|
"name": name,
|
|
})
|
|
return
|
|
}
|
|
|
|
user, err := h.authService.Register(email, password, name)
|
|
if err != nil {
|
|
errorMsg := "登録に失敗しました"
|
|
if err == service.ErrEmailAlreadyExists {
|
|
errorMsg = "このメールアドレスは既に使用されています"
|
|
}
|
|
RenderHTML(c, http.StatusOK, "register.html", gin.H{
|
|
"title": "新規登録",
|
|
"error": errorMsg,
|
|
"email": email,
|
|
"name": name,
|
|
})
|
|
return
|
|
}
|
|
|
|
session := sessions.Default(c)
|
|
session.Set(middleware.UserIDKey, user.ID)
|
|
session.Set(middleware.UserRoleKey, user.Role)
|
|
session.Set(middleware.UserNameKey, user.Name)
|
|
session.Save()
|
|
|
|
c.Redirect(http.StatusFound, "/")
|
|
}
|
|
|
|
func (h *AuthHandler) Logout(c *gin.Context) {
|
|
session := sessions.Default(c)
|
|
session.Clear()
|
|
session.Save()
|
|
|
|
c.Redirect(http.StatusFound, "/login")
|
|
}
|