82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"oidc-oauth2-server/services"
|
|
|
|
"github.com/gin-contrib/sessions"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type AuthHandler struct {
|
|
authService *services.AuthService
|
|
}
|
|
|
|
type LoginData struct {
|
|
Error string
|
|
RedirectURI string
|
|
State string
|
|
ClientID string
|
|
ResponseType string
|
|
Scope string
|
|
}
|
|
|
|
func NewAuthHandler(authService *services.AuthService) *AuthHandler {
|
|
return &AuthHandler{
|
|
authService: authService,
|
|
}
|
|
}
|
|
|
|
// ShowLogin 显示登录页面
|
|
func (h *AuthHandler) ShowLogin(c *gin.Context) {
|
|
data := LoginData{
|
|
RedirectURI: c.Query("redirect_uri"),
|
|
State: c.Query("state"),
|
|
ClientID: c.Query("client_id"),
|
|
ResponseType: c.Query("response_type"),
|
|
Scope: c.Query("scope"),
|
|
}
|
|
c.HTML(http.StatusOK, "login.html", data)
|
|
}
|
|
|
|
// HandleLogin 处理登录请求
|
|
func (h *AuthHandler) HandleLogin(c *gin.Context) {
|
|
username := c.PostForm("username")
|
|
password := c.PostForm("password")
|
|
|
|
user, err := h.authService.Authenticate(username, password)
|
|
if err != nil {
|
|
data := LoginData{
|
|
Error: "用户名或密码错误",
|
|
RedirectURI: c.PostForm("redirect_uri"),
|
|
State: c.PostForm("state"),
|
|
ClientID: c.PostForm("client_id"),
|
|
ResponseType: c.PostForm("response_type"),
|
|
Scope: c.PostForm("scope"),
|
|
}
|
|
c.HTML(http.StatusOK, "login.html", data)
|
|
return
|
|
}
|
|
|
|
// 设置用户会话
|
|
session := sessions.Default(c)
|
|
session.Set("user_id", user.ID)
|
|
session.Save()
|
|
|
|
// 重定向回授权页面
|
|
redirectURI := c.PostForm("redirect_uri")
|
|
if redirectURI == "" {
|
|
redirectURI = "/authorize"
|
|
}
|
|
|
|
query := c.Request.URL.Query()
|
|
query.Set("client_id", c.PostForm("client_id"))
|
|
query.Set("response_type", c.PostForm("response_type"))
|
|
query.Set("scope", c.PostForm("scope"))
|
|
query.Set("state", c.PostForm("state"))
|
|
query.Set("redirect_uri", redirectURI)
|
|
|
|
c.Redirect(http.StatusFound, "/authorize?"+query.Encode())
|
|
}
|