del: 移除旧代码假系统数据库备份
This commit is contained in:
@@ -11,8 +11,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"be.ems/lib/log"
|
"be.ems/lib/log"
|
||||||
"be.ems/lib/oauth"
|
|
||||||
"be.ems/src/modules/system/model"
|
|
||||||
|
|
||||||
_ "github.com/go-sql-driver/mysql"
|
_ "github.com/go-sql-driver/mysql"
|
||||||
"xorm.io/xorm"
|
"xorm.io/xorm"
|
||||||
@@ -29,7 +27,7 @@ type Menu struct {
|
|||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
Icon string `json:"icon"`
|
Icon string `json:"icon"`
|
||||||
Href string `json:"href"`
|
Href string `json:"href"`
|
||||||
ParentId int `json:"parent_id`
|
ParentId int `json:"parent_id"`
|
||||||
Remark int `json:"remark"`
|
Remark int `json:"remark"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,7 +147,7 @@ func ConstructInsertSQL(tableName string, insertData interface{}) (string, []str
|
|||||||
for c, v := range r.(map[string]interface{}) {
|
for c, v := range r.(map[string]interface{}) {
|
||||||
log.Tracef("c: %v v: %v", c, v)
|
log.Tracef("c: %v v: %v", c, v)
|
||||||
if cl == "" {
|
if cl == "" {
|
||||||
cl = fmt.Sprintf("%s", c)
|
cl = fmt.Sprint(c)
|
||||||
} else {
|
} else {
|
||||||
cl = fmt.Sprintf("%s, %s", cl, c)
|
cl = fmt.Sprintf("%s, %s", cl, c)
|
||||||
}
|
}
|
||||||
@@ -510,33 +508,6 @@ const (
|
|||||||
MeasureTaskStatusDeleted = "Deleted"
|
MeasureTaskStatusDeleted = "Deleted"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MTask struct {
|
|
||||||
Id int `json:"id" xorm:"pk 'id' autoincr"`
|
|
||||||
|
|
||||||
NeSet struct {
|
|
||||||
NEs []string `json:"nes"`
|
|
||||||
} `json:"neSet" xorm:"ne_set"`
|
|
||||||
KpiSet struct {
|
|
||||||
Code string `json:"Code"`
|
|
||||||
KPIs []string `json:"KPIs`
|
|
||||||
} `json:"kpiSet" xorm:"kpi_set"`
|
|
||||||
StartTime string `json:"startTime" xorm:"start_time"`
|
|
||||||
EndTime string `json:"endTime" xorm:"end_time"`
|
|
||||||
Periods []struct {
|
|
||||||
Start string `json:"start"`
|
|
||||||
End string `json:"end"`
|
|
||||||
} `json:"Periods" xorm:"periods`
|
|
||||||
Schedule struct {
|
|
||||||
Type string `json:"type"`
|
|
||||||
Days []int `json:"days"`
|
|
||||||
} `json:"schedule" xorm:"schedule"`
|
|
||||||
GranulOption string `json:"granulOption" xorm:"granul_option"`
|
|
||||||
Status string `json:"status" xorm:"status"`
|
|
||||||
CreateTime string `json:"createTime" xorm:"create_time"`
|
|
||||||
UpdateTime string `json:"updateTime" xorm:"update_time"`
|
|
||||||
DeleteTime string `json:"deleteTime xorm:"delete_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type ScheduleJ struct {
|
type ScheduleJ struct {
|
||||||
Type string `json:"Type"`
|
Type string `json:"Type"`
|
||||||
Days []int `json:"Days"`
|
Days []int `json:"Days"`
|
||||||
@@ -665,40 +636,6 @@ func XormUpdateTableByWhere(whereCondition string, tableName string, tbInfo inte
|
|||||||
return affected, nil
|
return affected, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type User struct {
|
|
||||||
Id int `json:"id" xorm:"pk 'id' autoincr"`
|
|
||||||
AccountId string `json:"accountId"`
|
|
||||||
Name string `json:"name" xorm:"name"`
|
|
||||||
Sn string `json:"sn"`
|
|
||||||
Gender string `json:"gender"`
|
|
||||||
Description string `json:"description"`
|
|
||||||
TelephoneNumber string `json:"telephoneNumber" xorm:"telephone_number"`
|
|
||||||
Mobile string `json:"mobile"`
|
|
||||||
Email string `json:"email" xorm:"email"`
|
|
||||||
StartTime string `json:"startTime" xorm:"start_time"`
|
|
||||||
EndTime string `json:"endTime" xorm:"end_time"`
|
|
||||||
IdCardNumber string `json:"idCardNumber"`
|
|
||||||
EmployeeNumber string `json:"employeeNumber"`
|
|
||||||
Organize string `json:"organize"`
|
|
||||||
EmployeeType string `json:"employeeType"`
|
|
||||||
SupporterCorpName string `json:"supporterCorpName"`
|
|
||||||
RealName string `json:"realName" xorm:"real_name"`
|
|
||||||
Password string `json:"password" xorm:"password"`
|
|
||||||
PasswordSha512 string `json:"passwordSha512"`
|
|
||||||
ChangePasswordFlag int `json:"changePasswordFlag"`
|
|
||||||
PasswordExpiration string `json:"passwordExpiration"`
|
|
||||||
Status string `json:"status"`
|
|
||||||
UserExpiration string `json:"userExpiration"`
|
|
||||||
GroupName string `json:"groupId" xorm:"group_name"`
|
|
||||||
Profile string `json:"profile" xorm:"profile"`
|
|
||||||
Phone string `json:"phone" xorm:"phone"`
|
|
||||||
CreateTime string `json:"createTime" xorm:"create_time"`
|
|
||||||
UpdateTime string `json:"updateTime" xorm:"update_time"`
|
|
||||||
|
|
||||||
// 角色对象组
|
|
||||||
Roles []model.SysRole `json:"roles" xorm:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// 记录密码登录错误次数
|
// 记录密码登录错误次数
|
||||||
func pwdErrCountAdd(accountId, profileStr string, reset bool) int {
|
func pwdErrCountAdd(accountId, profileStr string, reset bool) int {
|
||||||
if profileStr == "" {
|
if profileStr == "" {
|
||||||
@@ -803,117 +740,6 @@ func pwdErrCountAdd(accountId, profileStr string, reset bool) int {
|
|||||||
return count
|
return count
|
||||||
}
|
}
|
||||||
|
|
||||||
func XormCheckLoginUser(name, password, cryptArgo string) (bool, *User, error) {
|
|
||||||
log.Info("XormCheckLoginUser processing... ")
|
|
||||||
|
|
||||||
user := new(User)
|
|
||||||
// has, err := xEngine.Table("user").Where("name='%s' and password=PASSWORD('%s')", name, password).Get(user)
|
|
||||||
switch cryptArgo {
|
|
||||||
case "mysql":
|
|
||||||
has, err := xEngine.SQL("select * from user where account_id=? and password=PASSWORD(?)", name, password).Exist()
|
|
||||||
if err != nil || has == false {
|
|
||||||
log.Error("Failed to check user from database:", err)
|
|
||||||
|
|
||||||
return false, nil, err
|
|
||||||
}
|
|
||||||
case "md5":
|
|
||||||
has, err := xEngine.
|
|
||||||
SQL("select * from user where account_id=? and password=MD5(?)", name, password).Exist()
|
|
||||||
if err != nil || has == false {
|
|
||||||
log.Error("Failed to check user from database:", err)
|
|
||||||
return false, nil, err
|
|
||||||
}
|
|
||||||
case "bcrypt":
|
|
||||||
has, err := xEngine.Table("user").Where("account_id=?", name).Get(user)
|
|
||||||
if err != nil || !has {
|
|
||||||
log.Error("Failed to get user from database:", err)
|
|
||||||
return false, nil, err
|
|
||||||
}
|
|
||||||
if oauth.BcryptCompare(user.Password, password) != nil {
|
|
||||||
err := errors.New("Incorrect user name or password")
|
|
||||||
log.Error(err)
|
|
||||||
// 记录错误
|
|
||||||
errCoutn := pwdErrCountAdd(user.AccountId, user.Profile, false)
|
|
||||||
if errCoutn > 3 {
|
|
||||||
// 登录失败次数过多,请30分钟后重试
|
|
||||||
return false, nil, errors.New("Login failed too many times, please retry after 30 minutes")
|
|
||||||
}
|
|
||||||
return false, nil, err
|
|
||||||
}
|
|
||||||
// 重置错误次数
|
|
||||||
pwdErrCountAdd(user.AccountId, user.Profile, true)
|
|
||||||
default:
|
|
||||||
errMsg := "Incorrect crypt algoritmo"
|
|
||||||
log.Error("crypt:%s", errMsg)
|
|
||||||
return false, nil, errors.New(errMsg)
|
|
||||||
}
|
|
||||||
|
|
||||||
// enum('Active','Closed','Locked','Pending')
|
|
||||||
errMsg := ""
|
|
||||||
switch user.Status {
|
|
||||||
case "Closed":
|
|
||||||
errMsg = "Account disabled" // 账户已禁用
|
|
||||||
case "Locked":
|
|
||||||
errMsg = "Account locked" // 账户已锁定
|
|
||||||
case "Pending":
|
|
||||||
// errMsg = "账户已挂起"
|
|
||||||
_, err := xEngine.Exec("UPDATE user SET status = 'Active' WHERE account_id = ?", user.AccountId)
|
|
||||||
if err != nil {
|
|
||||||
return false, nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if errMsg != "" {
|
|
||||||
log.Error("user Status:%s", errMsg)
|
|
||||||
return false, nil, errors.New(errMsg)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 密码到期时间
|
|
||||||
if user.PasswordExpiration != "" {
|
|
||||||
arr := strings.Split(user.PasswordExpiration, " ")
|
|
||||||
if len(arr) > 0 {
|
|
||||||
t, err := time.Parse("2006-01-02", arr[0])
|
|
||||||
if err != nil {
|
|
||||||
return false, nil, err
|
|
||||||
}
|
|
||||||
if t.Before(time.Now()) {
|
|
||||||
errMsg := "Password expiration time" // 密码到期时间
|
|
||||||
// 读取配置信息
|
|
||||||
result, err := XormGetConfig("Security", "pwdStrong")
|
|
||||||
if err != nil {
|
|
||||||
return false, nil, err
|
|
||||||
}
|
|
||||||
data := make(map[string]any)
|
|
||||||
err = json.Unmarshal([]byte(result["value_json"].(string)), &data)
|
|
||||||
if err != nil {
|
|
||||||
log.Error("json Unmarshal:%s", errMsg)
|
|
||||||
return false, nil, err
|
|
||||||
}
|
|
||||||
errMsg = data["outTimeMsg"].(string)
|
|
||||||
log.Error("PasswordExpiration:%s", errMsg)
|
|
||||||
return false, nil, errors.New(errMsg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 用户到期时间
|
|
||||||
if user.UserExpiration != "" {
|
|
||||||
arr := strings.Split(user.UserExpiration, " ")
|
|
||||||
if len(arr) > 0 {
|
|
||||||
t, err := time.Parse("2006-01-02", arr[0])
|
|
||||||
if err != nil {
|
|
||||||
return false, nil, err
|
|
||||||
}
|
|
||||||
if t.Before(time.Now()) {
|
|
||||||
errMsg := "User account expiration" // 用户账户到期
|
|
||||||
log.Error("UserExpiration:%s", errMsg)
|
|
||||||
return false, nil, errors.New(errMsg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true, user, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func XormIsExistUser(accid string) (bool, error) {
|
func XormIsExistUser(accid string) (bool, error) {
|
||||||
log.Info("XormIsExistUser processing... ")
|
log.Info("XormIsExistUser processing... ")
|
||||||
|
|
||||||
@@ -1000,22 +826,22 @@ func XormInsertSession(name, host, token string, expires uint32, sessionFlag str
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return affected, err
|
return affected, err
|
||||||
}
|
}
|
||||||
if exist == true {
|
if exist {
|
||||||
affected, err = xSession.Table("session").Where("account_id = ? and host = ?", name, host).Update(session)
|
affected, _ = xSession.Table("session").Where("account_id = ? and host = ?", name, host).Update(session)
|
||||||
} else {
|
} else {
|
||||||
affected, err = xSession.InsertOne(session)
|
affected, _ = xSession.InsertOne(session)
|
||||||
}
|
}
|
||||||
} else { // single session for a user
|
} else { // single session for a user
|
||||||
exist, err := xEngine.Table("session").Where("status = 'online' and account_id = ?", name).Exist()
|
exist, err := xEngine.Table("session").Where("status = 'online' and account_id = ?", name).Exist()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return affected, err
|
return affected, err
|
||||||
}
|
}
|
||||||
if exist == true {
|
if exist {
|
||||||
// todo...
|
// todo...
|
||||||
err := errors.New("user is logged in")
|
err := errors.New("user is logged in")
|
||||||
return -1, err
|
return -1, err
|
||||||
} else {
|
} else {
|
||||||
affected, err = xSession.InsertOne(session)
|
affected, _ = xSession.InsertOne(session)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xSession.Commit()
|
xSession.Commit()
|
||||||
|
|||||||
@@ -287,12 +287,6 @@ func init() {
|
|||||||
Register("POST", dbrest.UriDbStop, dbrest.DbStop, nil)
|
Register("POST", dbrest.UriDbStop, dbrest.DbStop, nil)
|
||||||
Register("POST", dbrest.CustomUriDbStop, dbrest.DbStop, nil)
|
Register("POST", dbrest.CustomUriDbStop, dbrest.DbStop, nil)
|
||||||
|
|
||||||
// 系统备份
|
|
||||||
Register("POST", dbrest.UriDbBackup, dbrest.DbBackup, nil)
|
|
||||||
Register("POST", dbrest.CustomUriDbBackup, dbrest.DbBackup, nil)
|
|
||||||
Register("POST", dbrest.UriConfBackup, dbrest.ConfBackup, nil)
|
|
||||||
Register("POST", dbrest.CustomUriConfBackup, dbrest.ConfBackup, nil)
|
|
||||||
|
|
||||||
// 日志表备份
|
// 日志表备份
|
||||||
Register("POST", lm.ExtBackupDataUri, lm.ExtDatabaseBackupData, nil)
|
Register("POST", lm.ExtBackupDataUri, lm.ExtDatabaseBackupData, nil)
|
||||||
Register("POST", lm.CustomExtBackupDataUri, lm.ExtDatabaseBackupData, nil)
|
Register("POST", lm.CustomExtBackupDataUri, lm.ExtDatabaseBackupData, nil)
|
||||||
|
|||||||
@@ -329,7 +329,7 @@ func uploadSizeLimit(buf *bytes.Buffer, part *multipart.Part, maxLimit int64, li
|
|||||||
}
|
}
|
||||||
maxLimit -= n
|
maxLimit -= n
|
||||||
if maxLimit < 0 {
|
if maxLimit < 0 {
|
||||||
return fmt.Errorf(limitError)
|
return fmt.Errorf("%s", limitError)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"be.ems/lib/config"
|
||||||
"be.ems/lib/dborm"
|
"be.ems/lib/dborm"
|
||||||
"be.ems/lib/global"
|
"be.ems/lib/global"
|
||||||
"be.ems/lib/log"
|
"be.ems/lib/log"
|
||||||
"be.ems/lib/oauth"
|
"be.ems/lib/oauth"
|
||||||
"be.ems/restagent/config"
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -560,23 +560,10 @@ func CheckExtValidRequest(w http.ResponseWriter, r *http.Request) (string, error
|
|||||||
return token, nil
|
return token, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func ResponseStatusOK200Login(w http.ResponseWriter, token string, user *dborm.User) {
|
func ResponseStatusOK200Login(w http.ResponseWriter, token string) {
|
||||||
var oAuthResponse SucceedOAuthResponse
|
var oAuthResponse SucceedOAuthResponse
|
||||||
oAuthResponse.AccessToken = token
|
oAuthResponse.AccessToken = token
|
||||||
oAuthResponse.Expires = strconv.Itoa((int)(config.GetExpiresFromConfig()))
|
oAuthResponse.Expires = strconv.Itoa((int)(config.GetExpiresFromConfig()))
|
||||||
oAuthResponse.ChangePasswordFlag = user.ChangePasswordFlag
|
|
||||||
oAuthResponse.GroupName = user.GroupName
|
|
||||||
ResponseWithJson(w, http.StatusOK, oAuthResponse)
|
|
||||||
}
|
|
||||||
|
|
||||||
func ResponseStatusOK200LoginWhitRP(w http.ResponseWriter, token string, user *dborm.User, roles, perms []string) {
|
|
||||||
var oAuthResponse SucceedOAuthResponse
|
|
||||||
oAuthResponse.AccessToken = token
|
|
||||||
oAuthResponse.Expires = strconv.Itoa((int)(config.GetExpiresFromConfig()))
|
|
||||||
oAuthResponse.ChangePasswordFlag = user.ChangePasswordFlag
|
|
||||||
oAuthResponse.GroupName = user.GroupName
|
|
||||||
oAuthResponse.Roles = roles
|
|
||||||
oAuthResponse.Perms = perms
|
|
||||||
ResponseWithJson(w, http.StatusOK, oAuthResponse)
|
ResponseWithJson(w, http.StatusOK, oAuthResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user