mirror of https://gitee.com/godoos/godoos.git
2 changed files with 149 additions and 0 deletions
@ -0,0 +1,142 @@ |
|||
package user |
|||
|
|||
import ( |
|||
"encoding/json" |
|||
"godo/libs" |
|||
"godo/model" |
|||
"net/http" |
|||
"strconv" |
|||
"sync" |
|||
) |
|||
|
|||
// 全局变量,用于存储锁屏状态
|
|||
var userLockedScreen map[uint]bool |
|||
var mu sync.Mutex // 用于保护锁屏状态的并发安全
|
|||
|
|||
// 注册系统用户
|
|||
func RegisterSysUserHandler(w http.ResponseWriter, r *http.Request) { |
|||
if r.Method != http.MethodPost { |
|||
libs.ErrorMsg(w, "invalid request method") |
|||
return |
|||
} |
|||
|
|||
var user model.SysUser |
|||
if err := json.NewDecoder(r.Body).Decode(&user); err != nil { |
|||
libs.ErrorMsg(w, "invalid input") |
|||
return |
|||
} |
|||
if user.Username == "" || user.Password == "" { |
|||
libs.ErrorMsg(w, "username or password is empty") |
|||
return |
|||
} |
|||
|
|||
if err := model.Db.Create(&user).Error; err != nil { |
|||
libs.ErrorMsg(w, "failed to create user") |
|||
return |
|||
} |
|||
|
|||
libs.SuccessMsg(w, user.ID, "") |
|||
} |
|||
|
|||
// 系统用户登录(锁屏)
|
|||
func LockedScreenHandler(w http.ResponseWriter, r *http.Request) { |
|||
if r.Method != http.MethodPost { |
|||
libs.ErrorMsg(w, "invalid request method") |
|||
return |
|||
} |
|||
|
|||
var req model.SysUser |
|||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil { |
|||
libs.ErrorMsg(w, "invalid input") |
|||
return |
|||
} |
|||
|
|||
var user model.SysUser |
|||
if err := model.Db.Where("username = ? and password = ?", req.Username, req.Password).First(&user).Error; err != nil { |
|||
libs.ErrorMsg(w, "invalid username or password") |
|||
return |
|||
} |
|||
|
|||
userEncodeStr, err := libs.EncodeFile("godoos", strconv.Itoa(int(user.ID))) |
|||
if err != nil { |
|||
libs.ErrorMsg(w, "failed to encode user") |
|||
return |
|||
} |
|||
|
|||
w.Header().Set("sysuser", userEncodeStr) |
|||
|
|||
// 登录成功,锁屏状态设置为 true
|
|||
mu.Lock() |
|||
if userLockedScreen == nil { |
|||
userLockedScreen = make(map[uint]bool) |
|||
} |
|||
userLockedScreen[user.ID] = true |
|||
mu.Unlock() |
|||
|
|||
libs.SuccessMsg(w, nil, "system locked") |
|||
} |
|||
|
|||
// 系统用户登录(解锁)
|
|||
func UnLockScreenHandler(w http.ResponseWriter, r *http.Request) { |
|||
if r.Method != http.MethodPost { |
|||
libs.ErrorMsg(w, "invalid request method") |
|||
return |
|||
} |
|||
|
|||
var req model.SysUser |
|||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil { |
|||
libs.ErrorMsg(w, "invalid input") |
|||
return |
|||
} |
|||
|
|||
var user model.SysUser |
|||
if err := model.Db.Where("username = ? and password = ?", req.Username, req.Password).First(&user).Error; err != nil { |
|||
libs.ErrorMsg(w, "invalid username or password") |
|||
return |
|||
} |
|||
|
|||
// 登录成功,锁屏状态设置为 false
|
|||
mu.Lock() |
|||
if userLockedScreen == nil { |
|||
userLockedScreen = make(map[uint]bool) |
|||
} |
|||
userLockedScreen[user.ID] = false |
|||
mu.Unlock() |
|||
|
|||
libs.SuccessMsg(w, nil, "system unlock") |
|||
} |
|||
|
|||
// 检查锁屏状态
|
|||
func CheckLockedScreenHandler(w http.ResponseWriter, r *http.Request) { |
|||
if r.Method != http.MethodGet { |
|||
libs.ErrorMsg(w, "invalid request method") |
|||
return |
|||
} |
|||
|
|||
decoderUid := r.Header.Get("sysuser") |
|||
if decoderUid == "" { |
|||
libs.ErrorMsg(w, "invalid uid") |
|||
return |
|||
} |
|||
uidStr, err := libs.DecodeFile("godoos", decoderUid) |
|||
if err != nil { |
|||
libs.ErrorMsg(w, "invalid uid") |
|||
return |
|||
} |
|||
uid, err := strconv.Atoi(uidStr) |
|||
if err != nil { |
|||
libs.ErrorMsg(w, "parse uid fail") |
|||
return |
|||
} |
|||
|
|||
mu.Lock() |
|||
defer mu.Unlock() |
|||
status, ok := userLockedScreen[uint(uid)] |
|||
if !ok { |
|||
libs.ErrorMsg(w, "user not found") |
|||
return |
|||
} |
|||
|
|||
//获取锁屏状态
|
|||
libs.SuccessMsg(w, status, "") |
|||
} |
Loading…
Reference in new issue