release v1.2.0
This commit is contained in:
85
server/repository/access_gateway.go
Normal file
85
server/repository/access_gateway.go
Normal file
@ -0,0 +1,85 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type AccessGatewayRepository struct {
|
||||
DB *gorm.DB
|
||||
}
|
||||
|
||||
func NewAccessGatewayRepository(db *gorm.DB) *AccessGatewayRepository {
|
||||
accessGatewayRepository = &AccessGatewayRepository{DB: db}
|
||||
return accessGatewayRepository
|
||||
}
|
||||
|
||||
func (r AccessGatewayRepository) Find(pageIndex, pageSize int, ip, name, order, field string) (o []model.AccessGatewayForPage, total int64, err error) {
|
||||
t := model.AccessGateway{}
|
||||
db := r.DB.Table(t.TableName())
|
||||
dbCounter := r.DB.Table(t.TableName())
|
||||
|
||||
if len(ip) > 0 {
|
||||
db = db.Where("ip like ?", "%"+ip+"%")
|
||||
dbCounter = dbCounter.Where("ip like ?", "%"+ip+"%")
|
||||
}
|
||||
|
||||
if len(name) > 0 {
|
||||
db = db.Where("name like ?", "%"+name+"%")
|
||||
dbCounter = dbCounter.Where("name like ?", "%"+name+"%")
|
||||
}
|
||||
|
||||
err = dbCounter.Count(&total).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
if order == "descend" {
|
||||
order = "desc"
|
||||
} else {
|
||||
order = "asc"
|
||||
}
|
||||
|
||||
if field == "ip" {
|
||||
field = "ip"
|
||||
} else if field == "name" {
|
||||
field = "name"
|
||||
} else {
|
||||
field = "created"
|
||||
}
|
||||
|
||||
err = db.Order(field + " " + order).Find(&o).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Error
|
||||
if o == nil {
|
||||
o = make([]model.AccessGatewayForPage, 0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r AccessGatewayRepository) Create(o *model.AccessGateway) error {
|
||||
return r.DB.Create(o).Error
|
||||
}
|
||||
|
||||
func (r AccessGatewayRepository) UpdateById(o *model.AccessGateway, id string) error {
|
||||
o.ID = id
|
||||
return r.DB.Updates(o).Error
|
||||
}
|
||||
|
||||
func (r AccessGatewayRepository) DeleteById(id string) error {
|
||||
return r.DB.Where("id = ?", id).Delete(model.AccessGateway{}).Error
|
||||
}
|
||||
|
||||
func (r AccessGatewayRepository) FindById(id string) (o model.AccessGateway, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r AccessGatewayRepository) FindAll() (o []model.AccessGateway, err error) {
|
||||
t := model.AccessGateway{}
|
||||
db := r.DB.Table(t.TableName())
|
||||
err = db.Find(&o).Error
|
||||
if o == nil {
|
||||
o = make([]model.AccessGateway, 0)
|
||||
}
|
||||
return
|
||||
}
|
@ -5,8 +5,8 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"next-terminal/pkg/constant"
|
||||
"next-terminal/pkg/global"
|
||||
"next-terminal/server/config"
|
||||
"next-terminal/server/constant"
|
||||
"next-terminal/server/model"
|
||||
"next-terminal/server/utils"
|
||||
|
||||
@ -44,11 +44,21 @@ func (r AssetRepository) FindByProtocolAndIds(protocol string, assetIds []string
|
||||
}
|
||||
|
||||
func (r AssetRepository) FindByProtocolAndUser(protocol string, account model.User) (o []model.Asset, err error) {
|
||||
db := r.DB.Table("assets").Select("assets.id,assets.name,assets.ip,assets.port,assets.protocol,assets.active,assets.owner,assets.created, users.nickname as owner_name,COUNT(resource_sharers.user_id) as sharer_count").Joins("left join users on assets.owner = users.id").Joins("left join resource_sharers on assets.id = resource_sharers.resource_id").Group("assets.id")
|
||||
db := r.DB.Table("assets").Select("assets.id,assets.name,assets.ip,assets.port,assets.protocol,assets.active,assets.owner,assets.created,assets.tags,assets.description, users.nickname as owner_name").Joins("left join users on assets.owner = users.id").Joins("left join resource_sharers on assets.id = resource_sharers.resource_id").Group("assets.id")
|
||||
|
||||
if constant.TypeUser == account.Type {
|
||||
owner := account.ID
|
||||
db = db.Where("assets.owner = ? or resource_sharers.user_id = ?", owner, owner)
|
||||
|
||||
// 查询用户所在用户组列表
|
||||
userGroupIds, err := userGroupRepository.FindUserGroupIdsByUserId(account.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(userGroupIds) > 0 {
|
||||
db = db.Or("resource_sharers.user_group_id in ?", userGroupIds)
|
||||
}
|
||||
}
|
||||
|
||||
if len(protocol) > 0 {
|
||||
@ -59,7 +69,7 @@ func (r AssetRepository) FindByProtocolAndUser(protocol string, account model.Us
|
||||
}
|
||||
|
||||
func (r AssetRepository) Find(pageIndex, pageSize int, name, protocol, tags string, account model.User, owner, sharer, userGroupId, ip, order, field string) (o []model.AssetForPage, total int64, err error) {
|
||||
db := r.DB.Table("assets").Select("assets.id,assets.name,assets.ip,assets.port,assets.protocol,assets.active,assets.owner,assets.created,assets.tags, users.nickname as owner_name,COUNT(resource_sharers.user_id) as sharer_count").Joins("left join users on assets.owner = users.id").Joins("left join resource_sharers on assets.id = resource_sharers.resource_id").Group("assets.id")
|
||||
db := r.DB.Table("assets").Select("assets.id,assets.name,assets.ip,assets.port,assets.protocol,assets.active,assets.owner,assets.created,assets.tags,assets.description, users.nickname as owner_name").Joins("left join users on assets.owner = users.id").Joins("left join resource_sharers on assets.id = resource_sharers.resource_id").Group("assets.id")
|
||||
dbCounter := r.DB.Table("assets").Select("DISTINCT assets.id").Joins("left join resource_sharers on assets.id = resource_sharers.resource_id").Group("assets.id")
|
||||
|
||||
if constant.TypeUser == account.Type {
|
||||
@ -111,7 +121,7 @@ func (r AssetRepository) Find(pageIndex, pageSize int, name, protocol, tags stri
|
||||
if len(tags) > 0 {
|
||||
tagArr := strings.Split(tags, ",")
|
||||
for i := range tagArr {
|
||||
if global.Config.DB == "sqlite" {
|
||||
if config.GlobalCfg.DB == "sqlite" {
|
||||
db = db.Where("(',' || assets.tags || ',') LIKE ?", "%,"+tagArr[i]+",%")
|
||||
dbCounter = dbCounter.Where("(',' || assets.tags || ',') LIKE ?", "%,"+tagArr[i]+",%")
|
||||
} else {
|
||||
@ -189,7 +199,7 @@ func (r AssetRepository) Encrypt(item *model.Asset, password []byte) error {
|
||||
}
|
||||
|
||||
func (r AssetRepository) Create(o *model.Asset) (err error) {
|
||||
if err := r.Encrypt(o, global.Config.EncryptionPassword); err != nil {
|
||||
if err := r.Encrypt(o, config.GlobalCfg.EncryptionPassword); err != nil {
|
||||
return err
|
||||
}
|
||||
if err = r.DB.Create(o).Error; err != nil {
|
||||
@ -245,7 +255,7 @@ func (r AssetRepository) Decrypt(item *model.Asset, password []byte) error {
|
||||
func (r AssetRepository) FindByIdAndDecrypt(id string) (o model.Asset, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
if err == nil {
|
||||
err = r.Decrypt(&o, global.Config.EncryptionPassword)
|
||||
err = r.Decrypt(&o, config.GlobalCfg.EncryptionPassword)
|
||||
}
|
||||
return
|
||||
}
|
||||
@ -260,8 +270,17 @@ func (r AssetRepository) UpdateActiveById(active bool, id string) error {
|
||||
return r.DB.Exec(sql, active, id).Error
|
||||
}
|
||||
|
||||
func (r AssetRepository) DeleteById(id string) error {
|
||||
return r.DB.Where("id = ?", id).Delete(&model.Asset{}).Error
|
||||
func (r AssetRepository) DeleteById(id string) (err error) {
|
||||
return r.DB.Transaction(func(tx *gorm.DB) error {
|
||||
err = tx.Where("id = ?", id).Delete(&model.Asset{}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 删除资产属性
|
||||
err = tx.Where("asset_id = ?", id).Delete(&model.AssetAttribute{}).Error
|
||||
return err
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func (r AssetRepository) Count() (total int64, err error) {
|
||||
@ -269,6 +288,11 @@ func (r AssetRepository) Count() (total int64, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) CountByProtocol(protocol string) (total int64, err error) {
|
||||
err = r.DB.Find(&model.Asset{}).Where("protocol = ?", protocol).Count(&total).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) CountByUserId(userId string) (total int64, err error) {
|
||||
db := r.DB.Joins("left join resource_sharers on assets.id = resource_sharers.resource_id")
|
||||
|
||||
@ -287,9 +311,27 @@ func (r AssetRepository) CountByUserId(userId string) (total int64, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) CountByUserIdAndProtocol(userId, protocol string) (total int64, err error) {
|
||||
db := r.DB.Joins("left join resource_sharers on assets.id = resource_sharers.resource_id")
|
||||
|
||||
db = db.Where("( assets.owner = ? or resource_sharers.user_id = ? ) and assets.protocol = ?", userId, userId, protocol)
|
||||
|
||||
// 查询用户所在用户组列表
|
||||
userGroupIds, err := userGroupRepository.FindUserGroupIdsByUserId(userId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if len(userGroupIds) > 0 {
|
||||
db = db.Or("resource_sharers.user_group_id in ?", userGroupIds)
|
||||
}
|
||||
err = db.Find(&model.Asset{}).Count(&total).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) FindTags() (o []string, err error) {
|
||||
var assets []model.Asset
|
||||
err = r.DB.Not("tags = ?", "").Find(&assets).Error
|
||||
err = r.DB.Not("tags = '' or tags = '-' ").Find(&assets).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -359,7 +401,7 @@ func (r AssetRepository) FindAttrById(assetId string) (o []model.AssetAttribute,
|
||||
return o, err
|
||||
}
|
||||
|
||||
func (r AssetRepository) FindAssetAttrMapByAssetId(assetId string) (map[string]interface{}, error) {
|
||||
func (r AssetRepository) FindAssetAttrMapByAssetId(assetId string) (map[string]string, error) {
|
||||
asset, err := r.FindById(assetId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -383,7 +425,7 @@ func (r AssetRepository) FindAssetAttrMapByAssetId(assetId string) (map[string]i
|
||||
parameterNames = constant.KubernetesParameterNames
|
||||
}
|
||||
propertiesMap := propertyRepository.FindAllMap()
|
||||
var attributeMap = make(map[string]interface{})
|
||||
var attributeMap = make(map[string]string)
|
||||
for name := range propertiesMap {
|
||||
if utils.Contains(parameterNames, name) {
|
||||
attributeMap[name] = propertiesMap[name]
|
||||
|
@ -1,7 +1,7 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/pkg/constant"
|
||||
"next-terminal/server/constant"
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
@ -80,3 +80,17 @@ func (r CommandRepository) UpdateById(o *model.Command, id string) error {
|
||||
func (r CommandRepository) DeleteById(id string) error {
|
||||
return r.DB.Where("id = ?", id).Delete(&model.Command{}).Error
|
||||
}
|
||||
|
||||
func (r CommandRepository) FindByUser(account model.User) (o []model.CommandForPage, err error) {
|
||||
db := r.DB.Table("commands").Select("commands.id,commands.name,commands.content,commands.owner,commands.created, users.nickname as owner_name,COUNT(resource_sharers.user_id) as sharer_count").Joins("left join users on commands.owner = users.id").Joins("left join resource_sharers on commands.id = resource_sharers.resource_id").Group("commands.id")
|
||||
|
||||
if constant.TypeUser == account.Type {
|
||||
owner := account.ID
|
||||
db = db.Where("commands.owner = ? or resource_sharers.user_id = ?", owner, owner)
|
||||
}
|
||||
err = db.Order("commands.name asc").Find(&o).Error
|
||||
if o == nil {
|
||||
o = make([]model.CommandForPage, 0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
@ -3,8 +3,8 @@ package repository
|
||||
import (
|
||||
"encoding/base64"
|
||||
|
||||
"next-terminal/pkg/constant"
|
||||
"next-terminal/pkg/global"
|
||||
"next-terminal/server/config"
|
||||
"next-terminal/server/constant"
|
||||
"next-terminal/server/model"
|
||||
"next-terminal/server/utils"
|
||||
|
||||
@ -69,7 +69,7 @@ func (r CredentialRepository) Find(pageIndex, pageSize int, name, order, field s
|
||||
}
|
||||
|
||||
func (r CredentialRepository) Create(o *model.Credential) (err error) {
|
||||
if err := r.Encrypt(o, global.Config.EncryptionPassword); err != nil {
|
||||
if err := r.Encrypt(o, config.GlobalCfg.EncryptionPassword); err != nil {
|
||||
return err
|
||||
}
|
||||
if err = r.DB.Create(o).Error; err != nil {
|
||||
@ -151,7 +151,7 @@ func (r CredentialRepository) Decrypt(item *model.Credential, password []byte) e
|
||||
func (r CredentialRepository) FindByIdAndDecrypt(id string) (o model.Credential, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
if err == nil {
|
||||
err = r.Decrypt(&o, global.Config.EncryptionPassword)
|
||||
err = r.Decrypt(&o, config.GlobalCfg.EncryptionPassword)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
package repository
|
||||
|
||||
/**
|
||||
* 定义了相关模型的持久化层,方便相互之间调用
|
||||
*/
|
||||
var (
|
||||
userRepository *UserRepository
|
||||
userGroupRepository *UserGroupRepository
|
||||
@ -9,9 +12,11 @@ var (
|
||||
propertyRepository *PropertyRepository
|
||||
commandRepository *CommandRepository
|
||||
sessionRepository *SessionRepository
|
||||
numRepository *NumRepository
|
||||
accessSecurityRepository *AccessSecurityRepository
|
||||
accessGatewayRepository *AccessGatewayRepository
|
||||
jobRepository *JobRepository
|
||||
jobLogRepository *JobLogRepository
|
||||
loginLogRepository *LoginLogRepository
|
||||
storageRepository *StorageRepository
|
||||
strategyRepository *StrategyRepository
|
||||
)
|
||||
|
@ -44,10 +44,10 @@ func (r JobRepository) Find(pageIndex, pageSize int, name, status, order, field
|
||||
|
||||
if field == "name" {
|
||||
field = "name"
|
||||
} else if field == "created" {
|
||||
field = "created"
|
||||
} else {
|
||||
} else if field == "updated" {
|
||||
field = "updated"
|
||||
} else {
|
||||
field = "created"
|
||||
}
|
||||
|
||||
err = db.Order(field + " " + order).Find(&o).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Error
|
||||
@ -63,6 +63,12 @@ func (r JobRepository) FindByFunc(function string) (o []model.Job, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (r JobRepository) FindAll() (o []model.Job, err error) {
|
||||
db := r.DB
|
||||
err = db.Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r JobRepository) Create(o *model.Job) (err error) {
|
||||
return r.DB.Create(o).Error
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
@ -24,6 +26,20 @@ func (r JobLogRepository) FindByJobId(jobId string) (o []model.JobLog, err error
|
||||
return
|
||||
}
|
||||
|
||||
func (r JobLogRepository) FindOutTimeLog(dayLimit int) (o []model.JobLog, err error) {
|
||||
limitTime := time.Now().Add(time.Duration(-dayLimit*24) * time.Hour)
|
||||
err = r.DB.Where("timestamp < ?", limitTime).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r JobLogRepository) DeleteByJobId(jobId string) error {
|
||||
return r.DB.Where("job_id = ?", jobId).Delete(model.JobLog{}).Error
|
||||
}
|
||||
|
||||
func (r JobLogRepository) DeleteByIdIn(ids []string) error {
|
||||
return r.DB.Where("id in ?", ids).Delete(&model.JobLog{}).Error
|
||||
}
|
||||
|
||||
func (r JobLogRepository) DeleteById(id string) error {
|
||||
return r.DB.Where("id = ?", id).Delete(&model.JobLog{}).Error
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
@ -15,19 +17,24 @@ func NewLoginLogRepository(db *gorm.DB) *LoginLogRepository {
|
||||
return loginLogRepository
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) Find(pageIndex, pageSize int, userId, clientIp string) (o []model.LoginLogForPage, total int64, err error) {
|
||||
func (r LoginLogRepository) Find(pageIndex, pageSize int, username, clientIp, state string) (o []model.LoginLog, total int64, err error) {
|
||||
m := model.LoginLog{}
|
||||
db := r.DB.Table(m.TableName())
|
||||
dbCounter := r.DB.Table(m.TableName())
|
||||
|
||||
db := r.DB.Table("login_logs").Select("login_logs.id,login_logs.user_id,login_logs.client_ip,login_logs.client_user_agent,login_logs.login_time, login_logs.logout_time, users.nickname as user_name").Joins("left join users on login_logs.user_id = users.id")
|
||||
dbCounter := r.DB.Table("login_logs").Select("DISTINCT login_logs.id")
|
||||
|
||||
if userId != "" {
|
||||
db = db.Where("login_logs.user_id = ?", userId)
|
||||
dbCounter = dbCounter.Where("login_logs.user_id = ?", userId)
|
||||
if username != "" {
|
||||
db = db.Where("username like ?", "%"+username+"%")
|
||||
dbCounter = dbCounter.Where("username like ?", "%"+username+"%")
|
||||
}
|
||||
|
||||
if clientIp != "" {
|
||||
db = db.Where("login_logs.client_ip like ?", "%"+clientIp+"%")
|
||||
dbCounter = dbCounter.Where("login_logs.client_ip like ?", "%"+clientIp+"%")
|
||||
db = db.Where("client_ip like ?", "%"+clientIp+"%")
|
||||
dbCounter = dbCounter.Where("client_ip like ?", "%"+clientIp+"%")
|
||||
}
|
||||
|
||||
if state != "" {
|
||||
db = db.Where("state = ?", state)
|
||||
dbCounter = dbCounter.Where("state = ?", state)
|
||||
}
|
||||
|
||||
err = dbCounter.Count(&total).Error
|
||||
@ -35,20 +42,26 @@ func (r LoginLogRepository) Find(pageIndex, pageSize int, userId, clientIp strin
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
err = db.Order("login_logs.login_time desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
|
||||
err = db.Order("login_time desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
|
||||
if o == nil {
|
||||
o = make([]model.LoginLogForPage, 0)
|
||||
o = make([]model.LoginLog, 0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) FindAliveLoginLogs() (o []model.LoginLog, err error) {
|
||||
err = r.DB.Where("logout_time is null").Find(&o).Error
|
||||
err = r.DB.Where("state = '1' and logout_time is null").Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) FindAliveLoginLogsByUserId(userId string) (o []model.LoginLog, err error) {
|
||||
err = r.DB.Where("logout_time is null and user_id = ?", userId).Find(&o).Error
|
||||
func (r LoginLogRepository) FindAliveLoginLogsByUsername(username string) (o []model.LoginLog, err error) {
|
||||
err = r.DB.Where("state = '1' and logout_time is null and username = ?", username).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) FindOutTimeLog(dayLimit int) (o []model.LoginLog, err error) {
|
||||
limitTime := time.Now().Add(time.Duration(-dayLimit*24) * time.Hour)
|
||||
err = r.DB.Where("(state = '0' and login_time < ?) or (state = '1' and logout_time < ?) or (state is null and logout_time < ?)", limitTime, limitTime, limitTime).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
@ -60,6 +73,10 @@ func (r LoginLogRepository) DeleteByIdIn(ids []string) (err error) {
|
||||
return r.DB.Where("id in ?", ids).Delete(&model.LoginLog{}).Error
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) DeleteById(id string) (err error) {
|
||||
return r.DB.Where("id = ?", id).Delete(&model.LoginLog{}).Error
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) FindById(id string) (o model.LoginLog, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
|
@ -1,26 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type NumRepository struct {
|
||||
DB *gorm.DB
|
||||
}
|
||||
|
||||
func NewNumRepository(db *gorm.DB) *NumRepository {
|
||||
numRepository = &NumRepository{DB: db}
|
||||
return numRepository
|
||||
}
|
||||
|
||||
func (r NumRepository) FindAll() (o []model.Num, err error) {
|
||||
err = r.DB.Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r NumRepository) Create(o *model.Num) (err error) {
|
||||
err = r.DB.Create(o).Error
|
||||
return
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/pkg/guacd"
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
@ -33,6 +32,10 @@ func (r PropertyRepository) UpdateByName(o *model.Property, name string) error {
|
||||
return r.DB.Updates(o).Error
|
||||
}
|
||||
|
||||
func (r PropertyRepository) DeleteByName(name string) error {
|
||||
return r.DB.Where("name = ?", name).Delete(model.Property{}).Error
|
||||
}
|
||||
|
||||
func (r PropertyRepository) FindByName(name string) (o model.Property, err error) {
|
||||
err = r.DB.Where("name = ?", name).First(&o).Error
|
||||
return
|
||||
@ -46,19 +49,3 @@ func (r PropertyRepository) FindAllMap() map[string]string {
|
||||
}
|
||||
return propertyMap
|
||||
}
|
||||
|
||||
func (r PropertyRepository) GetDrivePath() (string, error) {
|
||||
property, err := r.FindByName(guacd.DrivePath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return property.Value, nil
|
||||
}
|
||||
|
||||
func (r PropertyRepository) GetRecordingPath() (string, error) {
|
||||
property, err := r.FindByName(guacd.RecordingPath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return property.Value, nil
|
||||
}
|
||||
|
@ -18,14 +18,6 @@ func NewResourceSharerRepository(db *gorm.DB) *ResourceSharerRepository {
|
||||
return resourceSharerRepository
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) FindUserIdsByResourceId(resourceId string) (o []string, err error) {
|
||||
err = r.DB.Table("resource_sharers").Select("user_id").Where("resource_id = ?", resourceId).Find(&o).Error
|
||||
if o == nil {
|
||||
o = make([]string, 0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) OverwriteUserIdsByResourceId(resourceId, resourceType string, userIds []string) (err error) {
|
||||
db := r.DB.Begin()
|
||||
|
||||
@ -104,7 +96,7 @@ func (r *ResourceSharerRepository) DeleteResourceSharerByResourceId(resourceId s
|
||||
return r.DB.Where("resource_id = ?", resourceId).Delete(&model.ResourceSharer{}).Error
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) AddSharerResources(userGroupId, userId, resourceType string, resourceIds []string) error {
|
||||
func (r *ResourceSharerRepository) AddSharerResources(userGroupId, userId, strategyId, resourceType string, resourceIds []string) error {
|
||||
return r.DB.Transaction(func(tx *gorm.DB) (err error) {
|
||||
|
||||
for i := range resourceIds {
|
||||
@ -138,11 +130,13 @@ func (r *ResourceSharerRepository) AddSharerResources(userGroupId, userId, resou
|
||||
return echo.NewHTTPError(400, "参数错误")
|
||||
}
|
||||
|
||||
// 保证同一个资产只能分配给一个用户或者组
|
||||
id := utils.Sign([]string{resourceId, resourceType, userId, userGroupId})
|
||||
resource := &model.ResourceSharer{
|
||||
ID: id,
|
||||
ResourceId: resourceId,
|
||||
ResourceType: resourceType,
|
||||
StrategyId: strategyId,
|
||||
UserId: userId,
|
||||
UserGroupId: userGroupId,
|
||||
}
|
||||
@ -192,3 +186,35 @@ func (r *ResourceSharerRepository) FindAssetIdsByUserId(userId string) (assetIds
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) FindByResourceIdAndUserId(assetId, userId string) (resourceSharers []model.ResourceSharer, err error) {
|
||||
// 查询其他用户授权给该用户的资产
|
||||
groupIds, err := userGroupRepository.FindUserGroupIdsByUserId(userId)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
db := r.DB.Where("( resource_id = ? and user_id = ? )", assetId, userId)
|
||||
if len(groupIds) > 0 {
|
||||
db = db.Or("user_group_id in ?", groupIds)
|
||||
}
|
||||
err = db.Find(&resourceSharers).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) Find(resourceId, resourceType, userId, userGroupId string) (resourceSharers []model.ResourceSharer, err error) {
|
||||
db := r.DB
|
||||
if resourceId != "" {
|
||||
db = db.Where("resource_id = ?")
|
||||
}
|
||||
if resourceType != "" {
|
||||
db = db.Where("resource_type = ?")
|
||||
}
|
||||
if userId != "" {
|
||||
db = db.Where("user_id = ?")
|
||||
}
|
||||
if userGroupId != "" {
|
||||
db = db.Where("user_group_id = ?")
|
||||
}
|
||||
err = db.Find(&resourceSharers).Error
|
||||
return
|
||||
}
|
||||
|
@ -6,8 +6,8 @@ import (
|
||||
"path"
|
||||
"time"
|
||||
|
||||
"next-terminal/pkg/constant"
|
||||
"next-terminal/pkg/global"
|
||||
"next-terminal/server/config"
|
||||
"next-terminal/server/constant"
|
||||
"next-terminal/server/model"
|
||||
"next-terminal/server/utils"
|
||||
|
||||
@ -110,7 +110,7 @@ func (r SessionRepository) Decrypt(item *model.Session) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, global.Config.EncryptionPassword)
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, config.GlobalCfg.EncryptionPassword)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -121,7 +121,7 @@ func (r SessionRepository) Decrypt(item *model.Session) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, global.Config.EncryptionPassword)
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, config.GlobalCfg.EncryptionPassword)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -132,7 +132,7 @@ func (r SessionRepository) Decrypt(item *model.Session) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, global.Config.EncryptionPassword)
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, config.GlobalCfg.EncryptionPassword)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -164,12 +164,9 @@ func (r SessionRepository) DeleteById(id string) error {
|
||||
}
|
||||
|
||||
func (r SessionRepository) DeleteByIds(sessionIds []string) error {
|
||||
drivePath, err := propertyRepository.GetRecordingPath()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
recordingPath := config.GlobalCfg.Guacd.Recording
|
||||
for i := range sessionIds {
|
||||
if err := os.RemoveAll(path.Join(drivePath, sessionIds[i])); err != nil {
|
||||
if err := os.RemoveAll(path.Join(recordingPath, sessionIds[i])); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := r.DeleteById(sessionIds[i]); err != nil {
|
||||
@ -188,35 +185,27 @@ func (r SessionRepository) CountOnlineSession() (total int64, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
type D struct {
|
||||
Day string `json:"day"`
|
||||
Count int `json:"count"`
|
||||
Protocol string `json:"protocol"`
|
||||
}
|
||||
|
||||
func (r SessionRepository) CountSessionByDay(day int) (results []D, err error) {
|
||||
|
||||
today := time.Now().Format("20060102")
|
||||
sql := "select t1.`day`, count(t2.id) as count\nfrom (\n SELECT @date := DATE_ADD(@date, INTERVAL - 1 DAY) day\n FROM (SELECT @date := DATE_ADD('" + today + "', INTERVAL + 1 DAY) FROM nums) as t0\n LIMIT ?\n )\n as t1\n left join\n (\n select DATE(s.connected_time) as day, s.id\n from sessions as s\n WHERE protocol = ? and DATE(connected_time) <= '" + today + "'\n AND DATE(connected_time) > DATE_SUB('" + today + "', INTERVAL ? DAY)\n ) as t2 on t1.day = t2.day\ngroup by t1.day"
|
||||
|
||||
protocols := []string{"rdp", "ssh", "vnc", "telnet"}
|
||||
|
||||
for i := range protocols {
|
||||
var result []D
|
||||
err = r.DB.Raw(sql, day, protocols[i], day).Scan(&result).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for j := range result {
|
||||
result[j].Protocol = protocols[i]
|
||||
}
|
||||
results = append(results, result...)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (r SessionRepository) EmptyPassword() error {
|
||||
sql := "update sessions set password = '-',private_key = '-', passphrase = '-' where 1=1"
|
||||
return r.DB.Exec(sql).Error
|
||||
}
|
||||
|
||||
func (r SessionRepository) CountByStatus(status string) (total int64, err error) {
|
||||
err = r.DB.Find(&model.Session{}).Where("status = ?", status).Count(&total).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r SessionRepository) OverviewAccess(account model.User) (o []model.SessionForAccess, err error) {
|
||||
db := r.DB
|
||||
if constant.TypeUser == account.Type {
|
||||
sql := "SELECT s.asset_id, s.ip, s.port, s.protocol, s.username, count(s.asset_id) AS access_count FROM sessions AS s where s.creator = ? GROUP BY s.asset_id, s.ip, s.port, s.protocol, s.username ORDER BY access_count DESC limit 10"
|
||||
err = db.Raw(sql, []string{account.ID}).Scan(&o).Error
|
||||
} else {
|
||||
sql := "SELECT s.asset_id, s.ip, s.port, s.protocol, s.username, count(s.asset_id) AS access_count FROM sessions AS s GROUP BY s.asset_id, s.ip, s.port, s.protocol, s.username ORDER BY access_count DESC limit 10"
|
||||
err = db.Raw(sql).Scan(&o).Error
|
||||
}
|
||||
if o == nil {
|
||||
o = make([]model.SessionForAccess, 0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
87
server/repository/storage.go
Normal file
87
server/repository/storage.go
Normal file
@ -0,0 +1,87 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type StorageRepository struct {
|
||||
DB *gorm.DB
|
||||
}
|
||||
|
||||
func NewStorageRepository(db *gorm.DB) *StorageRepository {
|
||||
storageRepository = &StorageRepository{DB: db}
|
||||
return storageRepository
|
||||
}
|
||||
|
||||
func (r StorageRepository) Find(pageIndex, pageSize int, name, order, field string) (o []model.StorageForPage, total int64, err error) {
|
||||
m := model.Storage{}
|
||||
db := r.DB.Table(m.TableName()).Select("storages.id,storages.name,storages.is_share,storages.limit_size,storages.is_default,storages.owner,storages.created, users.nickname as owner_name").Joins("left join users on storages.owner = users.id")
|
||||
dbCounter := r.DB.Table(m.TableName())
|
||||
|
||||
if len(name) > 0 {
|
||||
db = db.Where("name like ?", "%"+name+"%")
|
||||
dbCounter = dbCounter.Where("name like ?", "%"+name+"%")
|
||||
}
|
||||
|
||||
err = dbCounter.Count(&total).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
if order == "ascend" {
|
||||
order = "asc"
|
||||
} else {
|
||||
order = "desc"
|
||||
}
|
||||
|
||||
if field == "name" {
|
||||
field = "storages.name"
|
||||
} else {
|
||||
field = "storages.created"
|
||||
}
|
||||
|
||||
err = db.Order(field + " " + order).Find(&o).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Error
|
||||
if o == nil {
|
||||
o = make([]model.StorageForPage, 0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r StorageRepository) FindShares() (o []model.Storage, err error) {
|
||||
m := model.Storage{}
|
||||
db := r.DB.Table(m.TableName()).Where("is_share = 1")
|
||||
err = db.Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r StorageRepository) DeleteById(id string) error {
|
||||
return r.DB.Where("id = ?", id).Delete(model.Storage{}).Error
|
||||
}
|
||||
|
||||
func (r StorageRepository) Create(m *model.Storage) error {
|
||||
return r.DB.Create(m).Error
|
||||
}
|
||||
|
||||
func (r StorageRepository) UpdateById(o *model.Storage, id string) error {
|
||||
o.ID = id
|
||||
return r.DB.Updates(o).Error
|
||||
}
|
||||
|
||||
func (r StorageRepository) FindByOwnerIdAndDefault(owner string, isDefault bool) (m model.Storage, err error) {
|
||||
err = r.DB.Where("owner = ? and is_default = ?", owner, isDefault).First(&m).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r StorageRepository) FindById(id string) (m model.Storage, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&m).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r StorageRepository) FindAll() (o []model.Storage) {
|
||||
if r.DB.Find(&o).Error != nil {
|
||||
return nil
|
||||
}
|
||||
return
|
||||
}
|
73
server/repository/strategy.go
Normal file
73
server/repository/strategy.go
Normal file
@ -0,0 +1,73 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type StrategyRepository struct {
|
||||
DB *gorm.DB
|
||||
}
|
||||
|
||||
func NewStrategyRepository(db *gorm.DB) *StrategyRepository {
|
||||
strategyRepository = &StrategyRepository{DB: db}
|
||||
return strategyRepository
|
||||
}
|
||||
|
||||
func (r StrategyRepository) FindAll() (o []model.Strategy, err error) {
|
||||
err = r.DB.Order("name desc").Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r StrategyRepository) Find(pageIndex, pageSize int, name, order, field string) (o []model.Strategy, total int64, err error) {
|
||||
m := model.Strategy{}
|
||||
db := r.DB.Table(m.TableName())
|
||||
dbCounter := r.DB.Table(m.TableName())
|
||||
|
||||
if len(name) > 0 {
|
||||
db = db.Where("name like ?", "%"+name+"%")
|
||||
dbCounter = dbCounter.Where("name like ?", "%"+name+"%")
|
||||
}
|
||||
|
||||
err = dbCounter.Count(&total).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
if order == "ascend" {
|
||||
order = "asc"
|
||||
} else {
|
||||
order = "desc"
|
||||
}
|
||||
|
||||
if field == "name" {
|
||||
field = "name"
|
||||
} else {
|
||||
field = "created"
|
||||
}
|
||||
|
||||
err = db.Order(field + " " + order).Find(&o).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Error
|
||||
if o == nil {
|
||||
o = make([]model.Strategy, 0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r StrategyRepository) DeleteById(id string) error {
|
||||
return r.DB.Where("id = ?", id).Delete(model.Strategy{}).Error
|
||||
}
|
||||
|
||||
func (r StrategyRepository) Create(m *model.Strategy) error {
|
||||
return r.DB.Create(m).Error
|
||||
}
|
||||
|
||||
func (r StrategyRepository) UpdateById(o *model.Strategy, id string) error {
|
||||
o.ID = id
|
||||
return r.DB.Updates(o).Error
|
||||
}
|
||||
|
||||
func (r StrategyRepository) FindById(id string) (m model.Strategy, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&m).Error
|
||||
return
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/pkg/constant"
|
||||
"next-terminal/server/constant"
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
@ -105,9 +105,9 @@ func (r UserRepository) Update(o *model.User) error {
|
||||
return r.DB.Updates(o).Error
|
||||
}
|
||||
|
||||
func (r UserRepository) UpdateOnline(id string, online bool) error {
|
||||
sql := "update users set online = ? where id = ?"
|
||||
return r.DB.Exec(sql, online, id).Error
|
||||
func (r UserRepository) UpdateOnlineByUsername(username string, online bool) error {
|
||||
sql := "update users set online = ? where username = ?"
|
||||
return r.DB.Exec(sql, online, username).Error
|
||||
}
|
||||
|
||||
func (r UserRepository) DeleteById(id string) error {
|
||||
@ -135,3 +135,8 @@ func (r UserRepository) CountOnlineUser() (total int64, err error) {
|
||||
err = r.DB.Where("online = ?", true).Find(&model.User{}).Count(&total).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserRepository) Count() (total int64, err error) {
|
||||
err = r.DB.Find(&model.User{}).Count(&total).Error
|
||||
return
|
||||
}
|
||||
|
Reference in New Issue
Block a user