78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package handler
|
|
|
|
import (
|
|
_ "embed"
|
|
"github.com/loveuer/nf"
|
|
"github.com/loveuer/nf/nft/resp"
|
|
"net/http"
|
|
"net/url"
|
|
)
|
|
|
|
var (
|
|
//go:embed serve_login.html
|
|
page string
|
|
)
|
|
|
|
func LoginPage(c *nf.Ctx) error {
|
|
type Req struct {
|
|
ClientID string `query:"client_id"`
|
|
ClientSecret string `query:"client_secret"`
|
|
Scope string `query:"scope"`
|
|
RedirectURI string `query:"redirect_uri"`
|
|
}
|
|
|
|
var (
|
|
err error
|
|
req = new(Req)
|
|
)
|
|
|
|
if err = c.QueryParser(req); err != nil {
|
|
return resp.Resp400(c, err.Error())
|
|
}
|
|
|
|
if req.ClientID == "" || req.ClientSecret == "" || req.RedirectURI == "" {
|
|
return resp.Resp400(c, req)
|
|
}
|
|
|
|
// todo: 验证 client id, client secret, scoop
|
|
|
|
// todo: 如果用户是已登录状态,则直接带上信息返回到 authorize 页面
|
|
|
|
return c.RenderHTML("login", page, map[string]interface{}{
|
|
"client_id": req.ClientID,
|
|
"client_secret": req.ClientSecret,
|
|
"redirect_uri": req.RedirectURI,
|
|
"scope": req.Scope,
|
|
})
|
|
}
|
|
|
|
func LoginAction(c *nf.Ctx) error {
|
|
type Req struct {
|
|
Username string `form:"username"`
|
|
Password string `form:"password"`
|
|
ClientId string `form:"client_id"`
|
|
ClientSecret string `form:"client_secret"`
|
|
RedirectURI string `form:"redirect_uri"`
|
|
Scope string `form:"scope"`
|
|
}
|
|
|
|
var (
|
|
err error
|
|
req = new(Req)
|
|
)
|
|
|
|
if err = c.BodyParser(req); err != nil {
|
|
return resp.Resp400(c, err.Error())
|
|
}
|
|
|
|
// todo: 验证用户登录是否成功,等等
|
|
|
|
queries := make(url.Values)
|
|
queries.Add("client_id", req.ClientId)
|
|
queries.Add("client_secret", req.ClientSecret)
|
|
queries.Add("redirect_uri", req.RedirectURI)
|
|
queries.Add("scope", req.Scope)
|
|
|
|
return c.Redirect("/api/oauth/v2/authorize?"+queries.Encode(), http.StatusFound)
|
|
}
|