mirror of https://github.com/bjdgyc/anylink.git
新增本地用户设置过期时间
This commit is contained in:
parent
7b83154245
commit
a533ee0a78
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"`
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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=
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -87,7 +87,8 @@
|
|||
width="70">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.status === 1" type="success">可用</el-tag>
|
||||
<el-tag v-else type="danger">停用</el-tag>
|
||||
<el-tag v-if="scope.row.status === 0" type="danger">停用</el-tag>
|
||||
<el-tag v-if="scope.row.status === 2" >过期</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
@ -182,6 +183,16 @@
|
|||
<el-input v-model="ruleForm.pin_code" placeholder="不填由系统自动生成"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="过期时间" prop="limittime">
|
||||
<el-date-picker
|
||||
v-model="ruleForm.limittime"
|
||||
type="date"
|
||||
size="small"
|
||||
align="center"
|
||||
placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="禁用OTP" prop="disable_otp">
|
||||
<el-switch
|
||||
v-model="ruleForm.disable_otp">
|
||||
|
@ -208,6 +219,7 @@
|
|||
<el-radio-group v-model="ruleForm.status">
|
||||
<el-radio :label="1" border>启用</el-radio>
|
||||
<el-radio :label="0" border>停用</el-radio>
|
||||
<el-radio :label="2" border>过期</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
|
@ -264,7 +276,6 @@ export default {
|
|||
{required: true, message: '请输入用户邮箱', trigger: 'blur'},
|
||||
{type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change']}
|
||||
],
|
||||
|
||||
password: [
|
||||
{min: 6, message: '长度大于 6 个字符', trigger: 'blur'}
|
||||
],
|
||||
|
|
Loading…
Reference in New Issue