mirror of
https://github.com/MirageNetwork/MirageServer.git
synced 2025-09-27 04:45:54 +08:00
70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package controller
|
|
|
|
import (
|
|
_ "embed"
|
|
"fmt"
|
|
"net/http"
|
|
"time"
|
|
|
|
"tailscale.com/version"
|
|
)
|
|
|
|
type selfData struct {
|
|
ControllerVer string `json:"ctrlver"`
|
|
Basedomain string `json:"basedomain"`
|
|
UserName string `json:"username"`
|
|
UserNameHead string `json:"usernamehead"`
|
|
UserAccount string `json:"useraccount"`
|
|
OrgName string `json:"orgname"`
|
|
}
|
|
|
|
// 提供获取用户信息的API
|
|
func (h *Mirage) ConsoleSelfAPI(
|
|
writer http.ResponseWriter,
|
|
req *http.Request,
|
|
) {
|
|
user, err := h.verifyTokenIDandGetUser(writer, req)
|
|
if err != nil || user.CheckEmpty() {
|
|
h.doAPIResponse(writer, "用户信息核对失败:"+err.Error(), nil)
|
|
return
|
|
}
|
|
userName := user.Name
|
|
userDisName := user.Display_Name
|
|
userNameHead := string([]rune(userDisName)[0])
|
|
|
|
userOrgName := user.Organization.Name
|
|
// 用户所属组织将存于数据库,合并实现前,不设置配置文件中该项,均按个人用户处理
|
|
|
|
resData := selfData{
|
|
ControllerVer: version.Long(),
|
|
Basedomain: user.Organization.MagicDnsDomain,
|
|
UserNameHead: userNameHead,
|
|
UserName: userDisName,
|
|
UserAccount: userName,
|
|
OrgName: userOrgName,
|
|
}
|
|
h.doAPIResponse(writer, "", resData)
|
|
}
|
|
|
|
// 验证Token并获取用户信息
|
|
func (h *Mirage) verifyTokenIDandGetUser(
|
|
writer http.ResponseWriter,
|
|
req *http.Request,
|
|
) (*User, error) {
|
|
controlCodeCookie, err := req.Cookie("miragecontrol")
|
|
if err == http.ErrNoCookie {
|
|
return nil, fmt.Errorf("Token不存在")
|
|
}
|
|
controlCode := controlCodeCookie.Value
|
|
controlCodeC, concontrolCodeExpiration, ok := h.controlCodeCache.GetWithExpiration(controlCode)
|
|
if !ok || concontrolCodeExpiration.Compare(time.Now()) != 1 {
|
|
return nil, fmt.Errorf("验证Token失败")
|
|
}
|
|
controlCodeItem := controlCodeC.(ControlCacheItem)
|
|
user, err := h.GetUserByID(controlCodeItem.uid)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("提取用户信息失败")
|
|
}
|
|
return user, nil
|
|
}
|