From a533ee0a784b6e236bf9eb52c1eec31522f6fac8 Mon Sep 17 00:00:00 2001 From: wsczx Date: Sun, 16 Oct 2022 02:47:32 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=AE=BE=E7=BD=AE=E8=BF=87=E6=9C=9F=E6=97=B6?= =?UTF-8?q?=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/cron/start.go | 2 ++ server/dbdata/db_orm.go | 14 ++++++++++++++ server/dbdata/tables.go | 1 + server/dbdata/user.go | 7 ++++++- server/go.mod | 3 ++- server/go.sum | 2 ++ server/sessdata/session.go | 16 ++++++++++++++++ web/src/pages/user/List.vue | 15 +++++++++++++-- 8 files changed, 56 insertions(+), 4 deletions(-) diff --git a/server/cron/start.go b/server/cron/start.go index 2692cfe..09a722a 100644 --- a/server/cron/start.go +++ b/server/cron/start.go @@ -3,6 +3,7 @@ package cron import ( "time" + "github.com/bjdgyc/anylink/sessdata" "github.com/go-co-op/gocron" ) @@ -10,5 +11,6 @@ func Start() { s := gocron.NewScheduler(time.Local) s.Cron("0 * * * *").Do(ClearAudit) s.Cron("0 * * * *").Do(ClearStatsInfo) + s.Every("1s").Do(sessdata.CloseUserLimittimeSession) s.StartAsync() } diff --git a/server/dbdata/db_orm.go b/server/dbdata/db_orm.go index 3de1fe5..65bc889 100644 --- a/server/dbdata/db_orm.go +++ b/server/dbdata/db_orm.go @@ -3,6 +3,7 @@ package dbdata import ( "errors" "reflect" + "time" "xorm.io/xorm" ) @@ -61,6 +62,19 @@ func One(fieldName string, value interface{}, data interface{}) error { return nil } +// 用户过期时间到达后,更新用户状态,并返回一个状态为过期的用户切片 +func CheckUserlimittime() []interface{} { + var user map[int64]User + var limitUser []interface{} + u := &User{Status: 2} + xdb.Where("limittime < ?", time.Now()).And("status = ?", 1).Update(u) + xdb.Where("status= ?", 2).Find(u) + for _, v := range user { + limitUser = append(limitUser, v.Username) + } + return limitUser +} + func CountAll(data interface{}) int { n, _ := xdb.Count(data) return int(n) diff --git a/server/dbdata/tables.go b/server/dbdata/tables.go index e0da7e0..04a15df 100644 --- a/server/dbdata/tables.go +++ b/server/dbdata/tables.go @@ -30,6 +30,7 @@ type User struct { Email string `json:"email" xorm:"varchar(255)"` // Password string `json:"password"` PinCode string `json:"pin_code" xorm:"varchar(32)"` + LimitTime time.Time `json:"limittime" xorm:"Datetime limittime"` OtpSecret string `json:"otp_secret" xorm:"varchar(255)"` DisableOtp bool `json:"disable_otp" xorm:"Bool"` // 禁用otp Groups []string `json:"groups" xorm:"Text"` diff --git a/server/dbdata/user.go b/server/dbdata/user.go index 7834013..1ba6f6a 100644 --- a/server/dbdata/user.go +++ b/server/dbdata/user.go @@ -104,7 +104,12 @@ func checkLocalUser(name, pwd, group string) error { v := &User{} err := One("Username", name, v) if err != nil || v.Status != 1 { - return fmt.Errorf("%s %s", name, "用户名错误") + switch v.Status { + case 0: + return fmt.Errorf("%s %s", name, "用户不存在或用户已停用") + case 2: + return fmt.Errorf("%s %s", name, "用户已过期") + } } // 判断用户组信息 if !utils.InArrStr(v.Groups, group) { diff --git a/server/go.mod b/server/go.mod index 9f361f8..7aa6ebc 100644 --- a/server/go.mod +++ b/server/go.mod @@ -4,6 +4,7 @@ go 1.18 require ( github.com/arl/statsviz v0.5.1 + github.com/deckarep/golang-set v1.8.0 github.com/go-co-op/gocron v1.17.0 github.com/go-ldap/ldap v3.0.3+incompatible github.com/go-sql-driver/mysql v1.6.0 @@ -30,6 +31,7 @@ require ( go.uber.org/atomic v1.10.0 golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 + golang.org/x/text v0.3.7 golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac layeh.com/radius v0.0.0-20210819152912-ad72663a72ab xorm.io/xorm v1.2.2 @@ -66,7 +68,6 @@ require ( github.com/tklauser/numcpus v0.2.3 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect - golang.org/x/text v0.3.7 // indirect gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect gopkg.in/ini.v1 v1.62.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/server/go.sum b/server/go.sum index aa2f83a..5371b25 100644 --- a/server/go.sum +++ b/server/go.sum @@ -98,6 +98,8 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= diff --git a/server/sessdata/session.go b/server/sessdata/session.go index 70f3e7e..23d4095 100644 --- a/server/sessdata/session.go +++ b/server/sessdata/session.go @@ -13,6 +13,7 @@ import ( "github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/dbdata" "github.com/bjdgyc/anylink/pkg/utils" + mapset "github.com/deckarep/golang-set" "github.com/ivpusic/grpool" atomic2 "go.uber.org/atomic" ) @@ -113,6 +114,21 @@ func checkSession() { }() } +// 状态为过期的用户踢下线 +func CloseUserLimittimeSession() { + y := dbdata.CheckUserlimittime() + s := mapset.NewSetFromSlice(y) + for k, v := range sessions { + sessMux.Lock() + v.mux.Lock() + if !v.IsActive && s.Contains(v.Username) { + delete(sessions, k) + } + v.mux.Unlock() + sessMux.Unlock() + } +} + func GenToken() string { // 生成32位的 token bToken := make([]byte, 32) diff --git a/web/src/pages/user/List.vue b/web/src/pages/user/List.vue index 45b3805..0e7a73f 100644 --- a/web/src/pages/user/List.vue +++ b/web/src/pages/user/List.vue @@ -87,7 +87,8 @@ width="70"> @@ -182,6 +183,16 @@ + + + + + @@ -208,6 +219,7 @@ 启用 停用 + 过期 @@ -264,7 +276,6 @@ export default { {required: true, message: '请输入用户邮箱', trigger: 'blur'}, {type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change']} ], - password: [ {min: 6, message: '长度大于 6 个字符', trigger: 'blur'} ], From 812eb587bbd6bd69e192619ce6643be68df90340 Mon Sep 17 00:00:00 2001 From: wsczx Date: Sun, 16 Oct 2022 19:55:13 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=97=B6=E9=97=B4=E6=AF=94=E5=89=8D=E7=AB=AF=E5=B0=8F?= =?UTF-8?q?8=E5=B0=8F=E6=97=B6=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96null=E5=80=BC=E5=89=8D=E7=AB=AF=E4=B8=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/dbdata/db_orm.go | 5 ++++- server/dbdata/tables.go | 18 +++++++++--------- server/main.go | 1 + server/sessdata/session.go | 3 +-- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/server/dbdata/db_orm.go b/server/dbdata/db_orm.go index 65bc889..728d820 100644 --- a/server/dbdata/db_orm.go +++ b/server/dbdata/db_orm.go @@ -64,10 +64,13 @@ func One(fieldName string, value interface{}, data interface{}) error { // 用户过期时间到达后,更新用户状态,并返回一个状态为过期的用户切片 func CheckUserlimittime() []interface{} { + //初始化xorm时区 + xdb.DatabaseTZ = time.Local + xdb.TZLocation = time.Local var user map[int64]User var limitUser []interface{} u := &User{Status: 2} - xdb.Where("limittime < ?", time.Now()).And("status = ?", 1).Update(u) + xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(u) xdb.Where("status= ?", 2).Find(u) for _, v := range user { limitUser = append(limitUser, v.Username) diff --git a/server/dbdata/tables.go b/server/dbdata/tables.go index 04a15df..53dff7a 100644 --- a/server/dbdata/tables.go +++ b/server/dbdata/tables.go @@ -29,15 +29,15 @@ type User struct { Nickname string `json:"nickname" xorm:"varchar(255)"` Email string `json:"email" xorm:"varchar(255)"` // Password string `json:"password"` - PinCode string `json:"pin_code" xorm:"varchar(32)"` - LimitTime time.Time `json:"limittime" xorm:"Datetime limittime"` - OtpSecret string `json:"otp_secret" xorm:"varchar(255)"` - DisableOtp bool `json:"disable_otp" xorm:"Bool"` // 禁用otp - Groups []string `json:"groups" xorm:"Text"` - Status int8 `json:"status" xorm:"Int"` // 1正常 - SendEmail bool `json:"send_email" xorm:"Bool"` - CreatedAt time.Time `json:"created_at" xorm:"DateTime created"` - UpdatedAt time.Time `json:"updated_at" xorm:"DateTime updated"` + PinCode string `json:"pin_code" xorm:"varchar(32)"` + LimitTime *time.Time `json:"limittime,omitempty" xorm:"Datetime limittime"` //值为null时,前端不显示 + OtpSecret string `json:"otp_secret" xorm:"varchar(255)"` + DisableOtp bool `json:"disable_otp" xorm:"Bool"` // 禁用otp + Groups []string `json:"groups" xorm:"Text"` + Status int8 `json:"status" xorm:"Int"` // 1正常 + SendEmail bool `json:"send_email" xorm:"Bool"` + CreatedAt time.Time `json:"created_at" xorm:"DateTime created"` + UpdatedAt time.Time `json:"updated_at" xorm:"DateTime updated"` } type IpMap struct { diff --git a/server/main.go b/server/main.go index c52ddcf..a25efc5 100644 --- a/server/main.go +++ b/server/main.go @@ -1,5 +1,6 @@ // AnyLink 是一个企业级远程办公vpn软件,可以支持多人同时在线使用。 +//go:build !windows // +build !windows package main diff --git a/server/sessdata/session.go b/server/sessdata/session.go index 23d4095..8b651a3 100644 --- a/server/sessdata/session.go +++ b/server/sessdata/session.go @@ -116,8 +116,7 @@ func checkSession() { // 状态为过期的用户踢下线 func CloseUserLimittimeSession() { - y := dbdata.CheckUserlimittime() - s := mapset.NewSetFromSlice(y) + s := mapset.NewSetFromSlice(dbdata.CheckUserlimittime()) for k, v := range sessions { sessMux.Lock() v.mux.Lock() From 3dbc369e6b13b43fa451384196ecc24212bbf63a Mon Sep 17 00:00:00 2001 From: wsczx Date: Sun, 16 Oct 2022 23:31:20 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=A1=86=E5=A4=A7=E5=B0=8F=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=AE=9A=E6=97=B6=E5=99=A8=E4=B8=BA=E6=AF=8F=E5=A4=A9?= =?UTF-8?q?=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/cron/start.go | 2 +- web/src/pages/user/List.vue | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/server/cron/start.go b/server/cron/start.go index 09a722a..96159ab 100644 --- a/server/cron/start.go +++ b/server/cron/start.go @@ -11,6 +11,6 @@ func Start() { s := gocron.NewScheduler(time.Local) s.Cron("0 * * * *").Do(ClearAudit) s.Cron("0 * * * *").Do(ClearStatsInfo) - s.Every("1s").Do(sessdata.CloseUserLimittimeSession) + s.Every(1).Day().At("00:00").Do(sessdata.CloseUserLimittimeSession) s.StartAsync() } diff --git a/web/src/pages/user/List.vue b/web/src/pages/user/List.vue index 0e7a73f..4ae0aae 100644 --- a/web/src/pages/user/List.vue +++ b/web/src/pages/user/List.vue @@ -189,6 +189,7 @@ type="date" size="small" align="center" + style="width:130px" placeholder="选择日期"> From b1890a2c8a6a5bf1f4eb0ed591a7e14846a0a426 Mon Sep 17 00:00:00 2001 From: wsczx Date: Mon, 17 Oct 2022 12:17:04 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=BF=87=E6=9C=9F?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=97=A0=E6=B3=95=E8=B8=A2=E4=B8=8B=E7=BA=BF?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BC=98=E5=8C=96=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E8=BF=87=E6=9C=9F=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/admin/api_user.go | 3 ++- server/dbdata/db_orm.go | 6 +++--- server/sessdata/session.go | 10 +++------- server/sessdata/start.go | 1 + 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/server/admin/api_user.go b/server/admin/api_user.go index 516d3ae..f58efe9 100644 --- a/server/admin/api_user.go +++ b/server/admin/api_user.go @@ -107,7 +107,8 @@ func UserSet(w http.ResponseWriter, r *http.Request) { return } } - + //修改用户资料后执行过期用户检测 + sessdata.CloseUserLimittimeSession() RespSucess(w, nil) } diff --git a/server/dbdata/db_orm.go b/server/dbdata/db_orm.go index 728d820..887a5e8 100644 --- a/server/dbdata/db_orm.go +++ b/server/dbdata/db_orm.go @@ -67,11 +67,11 @@ func CheckUserlimittime() []interface{} { //初始化xorm时区 xdb.DatabaseTZ = time.Local xdb.TZLocation = time.Local - var user map[int64]User - var limitUser []interface{} u := &User{Status: 2} xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(u) - xdb.Where("status= ?", 2).Find(u) + user := make(map[int64]User) + limitUser := make([]interface{}, 0) + xdb.Where("status= ?", 2).Find(user) for _, v := range user { limitUser = append(limitUser, v.Username) } diff --git a/server/sessdata/session.go b/server/sessdata/session.go index 8b651a3..cbb6675 100644 --- a/server/sessdata/session.go +++ b/server/sessdata/session.go @@ -117,14 +117,10 @@ func checkSession() { // 状态为过期的用户踢下线 func CloseUserLimittimeSession() { s := mapset.NewSetFromSlice(dbdata.CheckUserlimittime()) - for k, v := range sessions { - sessMux.Lock() - v.mux.Lock() - if !v.IsActive && s.Contains(v.Username) { - delete(sessions, k) + for _, v := range sessions { + if v.IsActive && s.Contains(v.Username) { + CloseSess(v.Token) } - v.mux.Unlock() - sessMux.Unlock() } } diff --git a/server/sessdata/start.go b/server/sessdata/start.go index 1d4243c..7862574 100644 --- a/server/sessdata/start.go +++ b/server/sessdata/start.go @@ -4,4 +4,5 @@ func Start() { initIpPool() checkSession() saveStatsInfo() + CloseUserLimittimeSession() } From d277f1084fe5673ad74826439d32af516504c587 Mon Sep 17 00:00:00 2001 From: wsczx Date: Mon, 17 Oct 2022 14:38:39 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=E6=A3=80=E6=B5=8B=E5=87=BD=E6=95=B0=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/dbdata/db_orm.go | 17 ----------------- server/dbdata/user.go | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/server/dbdata/db_orm.go b/server/dbdata/db_orm.go index 887a5e8..3de1fe5 100644 --- a/server/dbdata/db_orm.go +++ b/server/dbdata/db_orm.go @@ -3,7 +3,6 @@ package dbdata import ( "errors" "reflect" - "time" "xorm.io/xorm" ) @@ -62,22 +61,6 @@ func One(fieldName string, value interface{}, data interface{}) error { return nil } -// 用户过期时间到达后,更新用户状态,并返回一个状态为过期的用户切片 -func CheckUserlimittime() []interface{} { - //初始化xorm时区 - xdb.DatabaseTZ = time.Local - xdb.TZLocation = time.Local - u := &User{Status: 2} - xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(u) - user := make(map[int64]User) - limitUser := make([]interface{}, 0) - xdb.Where("status= ?", 2).Find(user) - for _, v := range user { - limitUser = append(limitUser, v.Username) - } - return limitUser -} - func CountAll(data interface{}) int { n, _ := xdb.Count(data) return int(n) diff --git a/server/dbdata/user.go b/server/dbdata/user.go index 1ba6f6a..007d529 100644 --- a/server/dbdata/user.go +++ b/server/dbdata/user.go @@ -133,6 +133,22 @@ func checkLocalUser(name, pwd, group string) error { return nil } +// 用户过期时间到达后,更新用户状态,并返回一个状态为过期的用户切片 +func CheckUserlimittime() []interface{} { + //初始化xorm时区 + xdb.DatabaseTZ = time.Local + xdb.TZLocation = time.Local + u := &User{Status: 2} + xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(u) + user := make(map[int64]User) + limitUser := make([]interface{}, 0) + xdb.Where("status= ?", 2).Find(user) + for _, v := range user { + limitUser = append(limitUser, v.Username) + } + return limitUser +} + var ( userOtpMux = sync.Mutex{} userOtp = map[string]time.Time{} From 42f60a4d9dc1615bc907fec83f01579dd492e018 Mon Sep 17 00:00:00 2001 From: wsczx Date: Mon, 17 Oct 2022 18:05:06 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=AB=9E=E4=BA=89?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/dbdata/db.go | 5 +++++ server/dbdata/user.go | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/server/dbdata/db.go b/server/dbdata/db.go index 64f1ecc..d65266b 100644 --- a/server/dbdata/db.go +++ b/server/dbdata/db.go @@ -1,6 +1,8 @@ package dbdata import ( + "time" + "github.com/bjdgyc/anylink/base" _ "github.com/go-sql-driver/mysql" _ "github.com/lib/pq" @@ -19,6 +21,9 @@ func GetXdb() *xorm.Engine { func initDb() { var err error xdb, err = xorm.NewEngine(base.Cfg.DbType, base.Cfg.DbSource) + // 初始化xorm时区 + xdb.DatabaseTZ = time.Local + xdb.TZLocation = time.Local if err != nil { base.Fatal(err) } diff --git a/server/dbdata/user.go b/server/dbdata/user.go index 007d529..e239912 100644 --- a/server/dbdata/user.go +++ b/server/dbdata/user.go @@ -135,9 +135,6 @@ func checkLocalUser(name, pwd, group string) error { // 用户过期时间到达后,更新用户状态,并返回一个状态为过期的用户切片 func CheckUserlimittime() []interface{} { - //初始化xorm时区 - xdb.DatabaseTZ = time.Local - xdb.TZLocation = time.Local u := &User{Status: 2} xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(u) user := make(map[int64]User) From ef30451515976a4125381f2868996bae81267d6c Mon Sep 17 00:00:00 2001 From: wsczx Date: Mon, 17 Oct 2022 18:26:12 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=81=9C=E7=94=A8?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E4=B9=9F=E8=87=AA=E5=8A=A8=E8=B8=A2=E4=B8=8B?= =?UTF-8?q?=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/dbdata/user.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/dbdata/user.go b/server/dbdata/user.go index e239912..0ce19f2 100644 --- a/server/dbdata/user.go +++ b/server/dbdata/user.go @@ -139,7 +139,7 @@ func CheckUserlimittime() []interface{} { xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(u) user := make(map[int64]User) limitUser := make([]interface{}, 0) - xdb.Where("status= ?", 2).Find(user) + xdb.Where("status != ?", 1).Find(user) for _, v := range user { limitUser = append(limitUser, v.Username) } From e66a842e77370422c69d579b170a65649b0c5d63 Mon Sep 17 00:00:00 2001 From: wsczx Date: Mon, 17 Oct 2022 22:40:23 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/dbdata/user.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/dbdata/user.go b/server/dbdata/user.go index 0ce19f2..e2c71a2 100644 --- a/server/dbdata/user.go +++ b/server/dbdata/user.go @@ -136,10 +136,14 @@ func checkLocalUser(name, pwd, group string) error { // 用户过期时间到达后,更新用户状态,并返回一个状态为过期的用户切片 func CheckUserlimittime() []interface{} { u := &User{Status: 2} - xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(u) + if _, err := xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(u); err != nil { + fmt.Println(err) + } user := make(map[int64]User) limitUser := make([]interface{}, 0) - xdb.Where("status != ?", 1).Find(user) + if err := xdb.Where("status != ?", 1).Find(user); err != nil { + fmt.Println(err) + } for _, v := range user { limitUser = append(limitUser, v.Username) } From ea7a487c26d055354686612a6cd6da854171d2b1 Mon Sep 17 00:00:00 2001 From: wsczx Date: Tue, 18 Oct 2022 12:06:18 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/dbdata/user.go | 12 +++++------- server/handler/link_home.go | 6 ++++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/server/dbdata/user.go b/server/dbdata/user.go index e2c71a2..e05ab4d 100644 --- a/server/dbdata/user.go +++ b/server/dbdata/user.go @@ -134,20 +134,18 @@ func checkLocalUser(name, pwd, group string) error { } // 用户过期时间到达后,更新用户状态,并返回一个状态为过期的用户切片 -func CheckUserlimittime() []interface{} { - u := &User{Status: 2} - if _, err := xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(u); err != nil { - fmt.Println(err) +func CheckUserlimittime() (limitUser []interface{}) { + if _, err := xdb.Where("limittime <= ?", time.Now()).And("status = ?", 1).Update(&User{Status: 2}); err != nil { + return } user := make(map[int64]User) - limitUser := make([]interface{}, 0) if err := xdb.Where("status != ?", 1).Find(user); err != nil { - fmt.Println(err) + return } for _, v := range user { limitUser = append(limitUser, v.Username) } - return limitUser + return } var ( diff --git a/server/handler/link_home.go b/server/handler/link_home.go index 9669d26..8359f93 100644 --- a/server/handler/link_home.go +++ b/server/handler/link_home.go @@ -21,11 +21,13 @@ func LinkHome(w http.ResponseWriter, r *http.Request) { return } index := &dbdata.SettingOther{} - dbdata.SettingGet(index) + if err := dbdata.SettingGet(index); err != nil { + return + } w.WriteHeader(http.StatusOK) if index.Homeindex == "" { index.Homeindex = "AnyLink 是一个企业级远程办公 SSL VPN 软件,可以支持多人同时在线使用。" - } + } fmt.Fprintln(w, index.Homeindex) } From c6ef0a28b4690e4abd8cb04f50bd407c255d9273 Mon Sep 17 00:00:00 2001 From: wsczx Date: Tue, 18 Oct 2022 16:59:50 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/sessdata/session.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/server/sessdata/session.go b/server/sessdata/session.go index cbb6675..90af092 100644 --- a/server/sessdata/session.go +++ b/server/sessdata/session.go @@ -117,10 +117,18 @@ func checkSession() { // 状态为过期的用户踢下线 func CloseUserLimittimeSession() { s := mapset.NewSetFromSlice(dbdata.CheckUserlimittime()) + limitTimeToken := []string{} + sessMux.RLock() for _, v := range sessions { + v.mux.RLock() if v.IsActive && s.Contains(v.Username) { - CloseSess(v.Token) + limitTimeToken = append(limitTimeToken, v.Token) } + v.mux.RUnlock() + } + sessMux.RUnlock() + for _, v := range limitTimeToken { + CloseSess(v) } }