修复 「1.2.2 用户管理-用户列表勾选单一用户会全选 」 close #216
This commit is contained in:
@ -1,80 +0,0 @@
|
||||
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) {
|
||||
err = r.DB.Find(&o).Error
|
||||
return
|
||||
}
|
@ -1,80 +0,0 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type AccessSecurityRepository struct {
|
||||
DB *gorm.DB
|
||||
}
|
||||
|
||||
func NewAccessSecurityRepository(db *gorm.DB) *AccessSecurityRepository {
|
||||
accessSecurityRepository = &AccessSecurityRepository{DB: db}
|
||||
return accessSecurityRepository
|
||||
}
|
||||
|
||||
func (r AccessSecurityRepository) FindAll() (o []model.AccessSecurity, err error) {
|
||||
err = r.DB.Order("priority asc").Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r AccessSecurityRepository) Find(pageIndex, pageSize int, ip, rule, order, field string) (o []model.AccessSecurity, total int64, err error) {
|
||||
t := model.AccessSecurity{}
|
||||
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(rule) > 0 {
|
||||
db = db.Where("rule = ?", rule)
|
||||
dbCounter = dbCounter.Where("rule = ?", rule)
|
||||
}
|
||||
|
||||
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 == "rule" {
|
||||
field = "rule"
|
||||
} else {
|
||||
field = "priority"
|
||||
}
|
||||
|
||||
err = db.Order(field + " " + order).Find(&o).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Error
|
||||
if o == nil {
|
||||
o = make([]model.AccessSecurity, 0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r AccessSecurityRepository) Create(o *model.AccessSecurity) error {
|
||||
return r.DB.Create(o).Error
|
||||
}
|
||||
|
||||
func (r AccessSecurityRepository) UpdateById(o *model.AccessSecurity, id string) error {
|
||||
o.ID = id
|
||||
return r.DB.Updates(o).Error
|
||||
}
|
||||
|
||||
func (r AccessSecurityRepository) DeleteById(id string) error {
|
||||
return r.DB.Where("id = ?", id).Delete(model.AccessSecurity{}).Error
|
||||
}
|
||||
|
||||
func (r AccessSecurityRepository) FindById(id string) (o *model.AccessSecurity, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
29
server/repository/access_token.go
Normal file
29
server/repository/access_token.go
Normal file
@ -0,0 +1,29 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"next-terminal/server/model"
|
||||
)
|
||||
|
||||
type accessTokenRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func (repo accessTokenRepository) FindByUserId(ctx context.Context, userId string) (o model.AccessToken, err error) {
|
||||
err = repo.GetDB(ctx).Where("user_id = ?", userId).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (repo accessTokenRepository) DeleteByUserId(ctx context.Context, userId string) error {
|
||||
return repo.GetDB(ctx).Where("user_id = ?", userId).Delete(&model.AccessToken{}).Error
|
||||
}
|
||||
|
||||
func (repo accessTokenRepository) Create(ctx context.Context, o *model.AccessToken) error {
|
||||
return repo.GetDB(ctx).Create(o).Error
|
||||
}
|
||||
|
||||
func (repo accessTokenRepository) FindAll(ctx context.Context) (o []model.AccessToken, err error) {
|
||||
err = repo.GetDB(ctx).Find(&o).Error
|
||||
return
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
@ -11,47 +11,41 @@ import (
|
||||
"next-terminal/server/utils"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type AssetRepository struct {
|
||||
DB *gorm.DB
|
||||
type assetRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func NewAssetRepository(db *gorm.DB) *AssetRepository {
|
||||
assetRepository = &AssetRepository{DB: db}
|
||||
return assetRepository
|
||||
}
|
||||
|
||||
func (r AssetRepository) FindAll() (o []model.Asset, err error) {
|
||||
err = r.DB.Find(&o).Error
|
||||
func (r assetRepository) FindAll(c context.Context) (o []model.Asset, err error) {
|
||||
err = r.GetDB(c).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) FindByIds(assetIds []string) (o []model.Asset, err error) {
|
||||
err = r.DB.Where("id in ?", assetIds).Find(&o).Error
|
||||
func (r assetRepository) FindByIds(c context.Context, assetIds []string) (o []model.Asset, err error) {
|
||||
err = r.GetDB(c).Where("id in ?", assetIds).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) FindByProtocol(protocol string) (o []model.Asset, err error) {
|
||||
err = r.DB.Where("protocol = ?", protocol).Find(&o).Error
|
||||
func (r assetRepository) FindByProtocol(c context.Context, protocol string) (o []model.Asset, err error) {
|
||||
err = r.GetDB(c).Where("protocol = ?", protocol).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) FindByProtocolAndIds(protocol string, assetIds []string) (o []model.Asset, err error) {
|
||||
err = r.DB.Where("protocol = ? and id in ?", protocol, assetIds).Find(&o).Error
|
||||
func (r assetRepository) FindByProtocolAndIds(c context.Context, protocol string, assetIds []string) (o []model.Asset, err error) {
|
||||
err = r.GetDB(c).Where("protocol = ? and id in ?", protocol, assetIds).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
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,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")
|
||||
func (r assetRepository) FindByProtocolAndUser(c context.Context, protocol string, account model.User) (o []model.Asset, err error) {
|
||||
db := r.GetDB(c).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)
|
||||
userGroupIds, err := UserGroupMemberRepository.FindUserGroupIdsByUserId(c, account.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -68,9 +62,9 @@ func (r AssetRepository) FindByProtocolAndUser(protocol string, account model.Us
|
||||
return
|
||||
}
|
||||
|
||||
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,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")
|
||||
func (r assetRepository) Find(c context.Context, 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.GetDB(c).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.GetDB(c).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 {
|
||||
owner := account.ID
|
||||
@ -78,7 +72,7 @@ func (r AssetRepository) Find(pageIndex, pageSize int, name, protocol, tags stri
|
||||
dbCounter = dbCounter.Where("assets.owner = ? or resource_sharers.user_id = ?", owner, owner)
|
||||
|
||||
// 查询用户所在用户组列表
|
||||
userGroupIds, err := userGroupRepository.FindUserGroupIdsByUserId(account.ID)
|
||||
userGroupIds, err := UserGroupMemberRepository.FindUserGroupIdsByUserId(c, account.ID)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
@ -155,7 +149,7 @@ func (r AssetRepository) Find(pageIndex, pageSize int, name, protocol, tags stri
|
||||
} else {
|
||||
for i := 0; i < len(o); i++ {
|
||||
if o[i].Protocol == "ssh" {
|
||||
attributes, err := r.FindAttrById(o[i].ID)
|
||||
attributes, err := r.FindAttrById(c, o[i].ID)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
@ -172,134 +166,50 @@ func (r AssetRepository) Find(pageIndex, pageSize int, name, protocol, tags stri
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) Encrypt(item *model.Asset, password []byte) error {
|
||||
if item.Password != "" && item.Password != "-" {
|
||||
encryptedCBC, err := utils.AesEncryptCBC([]byte(item.Password), password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.Password = base64.StdEncoding.EncodeToString(encryptedCBC)
|
||||
}
|
||||
if item.PrivateKey != "" && item.PrivateKey != "-" {
|
||||
encryptedCBC, err := utils.AesEncryptCBC([]byte(item.PrivateKey), password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.PrivateKey = base64.StdEncoding.EncodeToString(encryptedCBC)
|
||||
}
|
||||
if item.Passphrase != "" && item.Passphrase != "-" {
|
||||
encryptedCBC, err := utils.AesEncryptCBC([]byte(item.Passphrase), password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.Passphrase = base64.StdEncoding.EncodeToString(encryptedCBC)
|
||||
}
|
||||
item.Encrypted = true
|
||||
return nil
|
||||
func (r assetRepository) Create(c context.Context, o *model.Asset) (err error) {
|
||||
return r.GetDB(c).Create(o).Error
|
||||
}
|
||||
|
||||
func (r AssetRepository) Create(o *model.Asset) (err error) {
|
||||
if err := r.Encrypt(o, config.GlobalCfg.EncryptionPassword); err != nil {
|
||||
return err
|
||||
}
|
||||
if err = r.DB.Create(o).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r AssetRepository) FindById(id string) (o model.Asset, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
func (r assetRepository) FindById(c context.Context, id string) (o model.Asset, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) Decrypt(item *model.Asset, password []byte) error {
|
||||
if item.Encrypted {
|
||||
if item.Password != "" && item.Password != "-" {
|
||||
origData, err := base64.StdEncoding.DecodeString(item.Password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.Password = string(decryptedCBC)
|
||||
}
|
||||
if item.PrivateKey != "" && item.PrivateKey != "-" {
|
||||
origData, err := base64.StdEncoding.DecodeString(item.PrivateKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.PrivateKey = string(decryptedCBC)
|
||||
}
|
||||
if item.Passphrase != "" && item.Passphrase != "-" {
|
||||
origData, err := base64.StdEncoding.DecodeString(item.Passphrase)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.Passphrase = string(decryptedCBC)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
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, config.GlobalCfg.EncryptionPassword)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) UpdateById(o *model.Asset, id string) error {
|
||||
func (r assetRepository) UpdateById(c context.Context, o *model.Asset, id string) error {
|
||||
o.ID = id
|
||||
return r.DB.Updates(o).Error
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
||||
func (r AssetRepository) UpdateActiveById(active bool, id string) error {
|
||||
func (r assetRepository) UpdateActiveById(c context.Context, active bool, id string) error {
|
||||
sql := "update assets set active = ? where id = ?"
|
||||
return r.DB.Exec(sql, active, id).Error
|
||||
return r.GetDB(c).Exec(sql, active, id).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) DeleteById(c context.Context, assetId string) (err error) {
|
||||
return r.GetDB(c).Where("id = ?", assetId).Delete(&model.Asset{}).Error
|
||||
}
|
||||
|
||||
func (r AssetRepository) Count() (total int64, err error) {
|
||||
err = r.DB.Find(&model.Asset{}).Count(&total).Error
|
||||
func (r assetRepository) DeleteAttrByAssetId(c context.Context, assetId string) error {
|
||||
return r.GetDB(c).Where("asset_id = ?", assetId).Delete(&model.AssetAttribute{}).Error
|
||||
}
|
||||
|
||||
func (r assetRepository) Count(c context.Context) (total int64, err error) {
|
||||
err = r.GetDB(c).Find(&model.Asset{}).Count(&total).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) CountByProtocol(protocol string) (total int64, err error) {
|
||||
err = r.DB.Find(&model.Asset{}).Where("protocol = ?", protocol).Count(&total).Error
|
||||
func (r assetRepository) CountByProtocol(c context.Context, protocol string) (total int64, err error) {
|
||||
err = r.GetDB(c).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")
|
||||
func (r assetRepository) CountByUserId(c context.Context, userId string) (total int64, err error) {
|
||||
db := r.GetDB(c).Joins("left join resource_sharers on assets.id = resource_sharers.resource_id")
|
||||
|
||||
db = db.Where("assets.owner = ? or resource_sharers.user_id = ?", userId, userId)
|
||||
|
||||
// 查询用户所在用户组列表
|
||||
userGroupIds, err := userGroupRepository.FindUserGroupIdsByUserId(userId)
|
||||
userGroupIds, err := UserGroupMemberRepository.FindUserGroupIdsByUserId(c, userId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
@ -311,13 +221,13 @@ 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")
|
||||
func (r assetRepository) CountByUserIdAndProtocol(c context.Context, userId, protocol string) (total int64, err error) {
|
||||
db := r.GetDB(c).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)
|
||||
userGroupIds, err := UserGroupMemberRepository.FindUserGroupIdsByUserId(c, userId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
@ -329,9 +239,9 @@ func (r AssetRepository) CountByUserIdAndProtocol(userId, protocol string) (tota
|
||||
return
|
||||
}
|
||||
|
||||
func (r AssetRepository) FindTags() (o []string, err error) {
|
||||
func (r assetRepository) FindTags(c context.Context) (o []string, err error) {
|
||||
var assets []model.Asset
|
||||
err = r.DB.Not("tags = '' or tags = '-' ").Find(&assets).Error
|
||||
err = r.GetDB(c).Not("tags = '' or tags = '-' ").Find(&assets).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -350,7 +260,7 @@ func (r AssetRepository) FindTags() (o []string, err error) {
|
||||
return utils.Distinct(o), nil
|
||||
}
|
||||
|
||||
func (r AssetRepository) UpdateAttributes(assetId, protocol string, m echo.Map) error {
|
||||
func (r assetRepository) UpdateAttributes(c context.Context, assetId, protocol string, m echo.Map) error {
|
||||
var data []model.AssetAttribute
|
||||
var parameterNames []string
|
||||
switch protocol {
|
||||
@ -373,13 +283,11 @@ func (r AssetRepository) UpdateAttributes(assetId, protocol string, m echo.Map)
|
||||
}
|
||||
}
|
||||
|
||||
return r.DB.Transaction(func(tx *gorm.DB) error {
|
||||
err := tx.Where("asset_id = ?", assetId).Delete(&model.AssetAttribute{}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.CreateInBatches(&data, len(data)).Error
|
||||
})
|
||||
err := r.GetDB(c).Where("asset_id = ?", assetId).Delete(&model.AssetAttribute{}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return r.GetDB(c).CreateInBatches(&data, len(data)).Error
|
||||
}
|
||||
|
||||
func genAttribute(assetId, name string, m echo.Map) model.AssetAttribute {
|
||||
@ -393,20 +301,20 @@ func genAttribute(assetId, name string, m echo.Map) model.AssetAttribute {
|
||||
return attribute
|
||||
}
|
||||
|
||||
func (r AssetRepository) FindAttrById(assetId string) (o []model.AssetAttribute, err error) {
|
||||
err = r.DB.Where("asset_id = ?", assetId).Find(&o).Error
|
||||
func (r assetRepository) FindAttrById(c context.Context, assetId string) (o []model.AssetAttribute, err error) {
|
||||
err = r.GetDB(c).Where("asset_id = ?", assetId).Find(&o).Error
|
||||
if o == nil {
|
||||
o = make([]model.AssetAttribute, 0)
|
||||
}
|
||||
return o, err
|
||||
}
|
||||
|
||||
func (r AssetRepository) FindAssetAttrMapByAssetId(assetId string) (map[string]string, error) {
|
||||
asset, err := r.FindById(assetId)
|
||||
func (r assetRepository) FindAssetAttrMapByAssetId(c context.Context, assetId string) (map[string]string, error) {
|
||||
asset, err := r.FindById(c, assetId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
attributes, err := r.FindAttrById(assetId)
|
||||
attributes, err := r.FindAttrById(c, assetId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -424,7 +332,7 @@ func (r AssetRepository) FindAssetAttrMapByAssetId(assetId string) (map[string]s
|
||||
case "kubernetes":
|
||||
parameterNames = constant.KubernetesParameterNames
|
||||
}
|
||||
propertiesMap := propertyRepository.FindAllMap()
|
||||
propertiesMap := PropertyRepository.FindAllMap(c)
|
||||
var attributeMap = make(map[string]string)
|
||||
for name := range propertiesMap {
|
||||
if utils.Contains(parameterNames, name) {
|
||||
|
26
server/repository/base.go
Normal file
26
server/repository/base.go
Normal file
@ -0,0 +1,26 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"next-terminal/server/constant"
|
||||
"next-terminal/server/env"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type baseRepository struct {
|
||||
}
|
||||
|
||||
func (b *baseRepository) GetDB(c context.Context) *gorm.DB {
|
||||
db := c.Value(constant.DB)
|
||||
if db == nil {
|
||||
return env.GetDB()
|
||||
}
|
||||
switch val := db.(type) {
|
||||
case gorm.DB:
|
||||
return &val
|
||||
default:
|
||||
return env.GetDB()
|
||||
}
|
||||
}
|
@ -1,24 +1,19 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"next-terminal/server/constant"
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type CommandRepository struct {
|
||||
DB *gorm.DB
|
||||
type commandRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func NewCommandRepository(db *gorm.DB) *CommandRepository {
|
||||
commandRepository = &CommandRepository{DB: db}
|
||||
return commandRepository
|
||||
}
|
||||
|
||||
func (r CommandRepository) Find(pageIndex, pageSize int, name, content, order, field string, account model.User) (o []model.CommandForPage, total int64, 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")
|
||||
dbCounter := r.DB.Table("commands").Select("DISTINCT commands.id").Joins("left join resource_sharers on commands.id = resource_sharers.resource_id").Group("commands.id")
|
||||
func (r commandRepository) Find(c context.Context, pageIndex, pageSize int, name, content, order, field string, account *model.User) (o []model.CommandForPage, total int64, err error) {
|
||||
db := r.GetDB(c).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")
|
||||
dbCounter := r.GetDB(c).Table("commands").Select("DISTINCT commands.id").Joins("left join resource_sharers on commands.id = resource_sharers.resource_id").Group("commands.id")
|
||||
|
||||
if constant.TypeUser == account.Type {
|
||||
owner := account.ID
|
||||
@ -60,29 +55,29 @@ func (r CommandRepository) Find(pageIndex, pageSize int, name, content, order, f
|
||||
return
|
||||
}
|
||||
|
||||
func (r CommandRepository) Create(o *model.Command) (err error) {
|
||||
if err = r.DB.Create(o).Error; err != nil {
|
||||
func (r commandRepository) Create(c context.Context, o *model.Command) (err error) {
|
||||
if err = r.GetDB(c).Create(o).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r CommandRepository) FindById(id string) (o model.Command, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
func (r commandRepository) FindById(c context.Context, id string) (o model.Command, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r CommandRepository) UpdateById(o *model.Command, id string) error {
|
||||
func (r commandRepository) UpdateById(c context.Context, o *model.Command, id string) error {
|
||||
o.ID = id
|
||||
return r.DB.Updates(o).Error
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
||||
func (r CommandRepository) DeleteById(id string) error {
|
||||
return r.DB.Where("id = ?", id).Delete(&model.Command{}).Error
|
||||
func (r commandRepository) DeleteById(c context.Context, id string) error {
|
||||
return r.GetDB(c).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")
|
||||
func (r commandRepository) FindByUser(c context.Context, account *model.User) (o []model.CommandForPage, err error) {
|
||||
db := r.GetDB(c).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
|
||||
@ -95,7 +90,7 @@ func (r CommandRepository) FindByUser(account model.User) (o []model.CommandForP
|
||||
return
|
||||
}
|
||||
|
||||
func (r CommandRepository) FindAll() (o []model.Command, err error) {
|
||||
err = r.DB.Find(&o).Error
|
||||
func (r commandRepository) FindAll(c context.Context) (o []model.Command, err error) {
|
||||
err = r.GetDB(c).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
@ -1,37 +1,25 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"context"
|
||||
|
||||
"next-terminal/server/config"
|
||||
"next-terminal/server/constant"
|
||||
"next-terminal/server/model"
|
||||
"next-terminal/server/utils"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type CredentialRepository struct {
|
||||
DB *gorm.DB
|
||||
type credentialRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func NewCredentialRepository(db *gorm.DB) *CredentialRepository {
|
||||
credentialRepository = &CredentialRepository{DB: db}
|
||||
return credentialRepository
|
||||
}
|
||||
|
||||
func (r CredentialRepository) FindByUser(account model.User) (o []model.CredentialSimpleVo, err error) {
|
||||
db := r.DB.Table("credentials").Select("DISTINCT credentials.id,credentials.name").Joins("left join resource_sharers on credentials.id = resource_sharers.resource_id")
|
||||
if account.Type == constant.TypeUser {
|
||||
db = db.Where("credentials.owner = ? or resource_sharers.user_id = ?", account.ID, account.ID)
|
||||
}
|
||||
func (r credentialRepository) FindByUser(c context.Context) (o []model.CredentialSimpleVo, err error) {
|
||||
db := r.GetDB(c).Table("credentials").Select("DISTINCT credentials.id,credentials.name").Joins("left join resource_sharers on credentials.id = resource_sharers.resource_id")
|
||||
err = db.Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r CredentialRepository) Find(pageIndex, pageSize int, name, order, field string, account model.User) (o []model.CredentialForPage, total int64, err error) {
|
||||
db := r.DB.Table("credentials").Select("credentials.id,credentials.name,credentials.type,credentials.username,credentials.owner,credentials.created,users.nickname as owner_name,COUNT(resource_sharers.user_id) as sharer_count").Joins("left join users on credentials.owner = users.id").Joins("left join resource_sharers on credentials.id = resource_sharers.resource_id").Group("credentials.id")
|
||||
dbCounter := r.DB.Table("credentials").Select("DISTINCT credentials.id").Joins("left join resource_sharers on credentials.id = resource_sharers.resource_id").Group("credentials.id")
|
||||
func (r credentialRepository) Find(c context.Context, pageIndex, pageSize int, name, order, field string, account *model.User) (o []model.CredentialForPage, total int64, err error) {
|
||||
db := r.GetDB(c).Table("credentials").Select("credentials.id,credentials.name,credentials.type,credentials.username,credentials.owner,credentials.created,users.nickname as owner_name,COUNT(resource_sharers.user_id) as sharer_count").Joins("left join users on credentials.owner = users.id").Joins("left join resource_sharers on credentials.id = resource_sharers.resource_id").Group("credentials.id")
|
||||
dbCounter := r.GetDB(c).Table("credentials").Select("DISTINCT credentials.id").Joins("left join resource_sharers on credentials.id = resource_sharers.resource_id").Group("credentials.id")
|
||||
|
||||
if constant.TypeUser == account.Type {
|
||||
owner := account.ID
|
||||
@ -68,127 +56,48 @@ func (r CredentialRepository) Find(pageIndex, pageSize int, name, order, field s
|
||||
return
|
||||
}
|
||||
|
||||
func (r CredentialRepository) Create(o *model.Credential) (err error) {
|
||||
if err := r.Encrypt(o, config.GlobalCfg.EncryptionPassword); err != nil {
|
||||
return err
|
||||
}
|
||||
if err = r.DB.Create(o).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
func (r credentialRepository) Create(c context.Context, o *model.Credential) (err error) {
|
||||
return r.GetDB(c).Create(o).Error
|
||||
}
|
||||
|
||||
func (r CredentialRepository) FindById(id string) (o model.Credential, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
func (r credentialRepository) FindById(c context.Context, id string) (o model.Credential, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r CredentialRepository) Encrypt(item *model.Credential, password []byte) error {
|
||||
if item.Password != "-" {
|
||||
encryptedCBC, err := utils.AesEncryptCBC([]byte(item.Password), password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.Password = base64.StdEncoding.EncodeToString(encryptedCBC)
|
||||
}
|
||||
if item.PrivateKey != "-" {
|
||||
encryptedCBC, err := utils.AesEncryptCBC([]byte(item.PrivateKey), password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.PrivateKey = base64.StdEncoding.EncodeToString(encryptedCBC)
|
||||
}
|
||||
if item.Passphrase != "-" {
|
||||
encryptedCBC, err := utils.AesEncryptCBC([]byte(item.Passphrase), password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.Passphrase = base64.StdEncoding.EncodeToString(encryptedCBC)
|
||||
}
|
||||
item.Encrypted = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r CredentialRepository) Decrypt(item *model.Credential, password []byte) error {
|
||||
if item.Encrypted {
|
||||
if item.Password != "" && item.Password != "-" {
|
||||
origData, err := base64.StdEncoding.DecodeString(item.Password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.Password = string(decryptedCBC)
|
||||
}
|
||||
if item.PrivateKey != "" && item.PrivateKey != "-" {
|
||||
origData, err := base64.StdEncoding.DecodeString(item.PrivateKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.PrivateKey = string(decryptedCBC)
|
||||
}
|
||||
if item.Passphrase != "" && item.Passphrase != "-" {
|
||||
origData, err := base64.StdEncoding.DecodeString(item.Passphrase)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.Passphrase = string(decryptedCBC)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
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, config.GlobalCfg.EncryptionPassword)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r CredentialRepository) UpdateById(o *model.Credential, id string) error {
|
||||
func (r credentialRepository) UpdateById(c context.Context, o *model.Credential, id string) error {
|
||||
o.ID = id
|
||||
return r.DB.Updates(o).Error
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
||||
func (r CredentialRepository) DeleteById(id string) error {
|
||||
return r.DB.Where("id = ?", id).Delete(&model.Credential{}).Error
|
||||
func (r credentialRepository) DeleteById(c context.Context, id string) error {
|
||||
return r.GetDB(c).Where("id = ?", id).Delete(&model.Credential{}).Error
|
||||
}
|
||||
|
||||
func (r CredentialRepository) Count() (total int64, err error) {
|
||||
err = r.DB.Find(&model.Credential{}).Count(&total).Error
|
||||
func (r credentialRepository) Count(c context.Context) (total int64, err error) {
|
||||
err = r.GetDB(c).Find(&model.Credential{}).Count(&total).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r CredentialRepository) CountByUserId(userId string) (total int64, err error) {
|
||||
db := r.DB.Joins("left join resource_sharers on credentials.id = resource_sharers.resource_id")
|
||||
//func (r credentialRepository) CountByUserId(c context.Context, userId string) (total int64, err error) {
|
||||
// db := r.GetDB(c).Joins("left join resource_sharers on credentials.id = resource_sharers.resource_id")
|
||||
//
|
||||
// db = db.Where("credentials.owner = ? or resource_sharers.user_id = ?", userId, userId)
|
||||
//
|
||||
// // 查询用户所在用户组列表
|
||||
// userGroupIds, err := userGroupRepository.FindUserGroupIdsByUserId(c, 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.Credential{}).Count(&total).Error
|
||||
// return
|
||||
//}
|
||||
|
||||
db = db.Where("credentials.owner = ? or resource_sharers.user_id = ?", userId, userId)
|
||||
|
||||
// 查询用户所在用户组列表
|
||||
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.Credential{}).Count(&total).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r CredentialRepository) FindAll() (o []model.Credential, err error) {
|
||||
err = r.DB.Find(&o).Error
|
||||
func (r credentialRepository) FindAll(c context.Context) (o []model.Credential, err error) {
|
||||
err = r.GetDB(c).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
@ -1,22 +0,0 @@
|
||||
package repository
|
||||
|
||||
/**
|
||||
* 定义了相关模型的持久化层,方便相互之间调用
|
||||
*/
|
||||
var (
|
||||
userRepository *UserRepository
|
||||
userGroupRepository *UserGroupRepository
|
||||
resourceSharerRepository *ResourceSharerRepository
|
||||
assetRepository *AssetRepository
|
||||
credentialRepository *CredentialRepository
|
||||
propertyRepository *PropertyRepository
|
||||
commandRepository *CommandRepository
|
||||
sessionRepository *SessionRepository
|
||||
accessSecurityRepository *AccessSecurityRepository
|
||||
accessGatewayRepository *AccessGatewayRepository
|
||||
jobRepository *JobRepository
|
||||
jobLogRepository *JobLogRepository
|
||||
loginLogRepository *LoginLogRepository
|
||||
storageRepository *StorageRepository
|
||||
strategyRepository *StrategyRepository
|
||||
)
|
75
server/repository/gateway.go
Normal file
75
server/repository/gateway.go
Normal file
@ -0,0 +1,75 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"next-terminal/server/model"
|
||||
)
|
||||
|
||||
type gatewayRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func (r gatewayRepository) Find(c context.Context, pageIndex, pageSize int, ip, name, order, field string) (o []model.AccessGatewayForPage, total int64, err error) {
|
||||
t := model.AccessGateway{}
|
||||
db := r.GetDB(c).Table(t.TableName())
|
||||
dbCounter := r.GetDB(c).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 gatewayRepository) Create(c context.Context, o *model.AccessGateway) error {
|
||||
return r.GetDB(c).Create(o).Error
|
||||
}
|
||||
|
||||
func (r gatewayRepository) UpdateById(c context.Context, o *model.AccessGateway, id string) error {
|
||||
o.ID = id
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
||||
func (r gatewayRepository) DeleteById(c context.Context, id string) error {
|
||||
return r.GetDB(c).Where("id = ?", id).Delete(model.AccessGateway{}).Error
|
||||
}
|
||||
|
||||
func (r gatewayRepository) FindById(c context.Context, id string) (o model.AccessGateway, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r gatewayRepository) FindAll(c context.Context) (o []model.AccessGateway, err error) {
|
||||
err = r.GetDB(c).Find(&o).Error
|
||||
return
|
||||
}
|
@ -1,25 +1,20 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"next-terminal/server/model"
|
||||
"next-terminal/server/utils"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type JobRepository struct {
|
||||
DB *gorm.DB
|
||||
type jobRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func NewJobRepository(db *gorm.DB) *JobRepository {
|
||||
jobRepository = &JobRepository{DB: db}
|
||||
return jobRepository
|
||||
}
|
||||
|
||||
func (r JobRepository) Find(pageIndex, pageSize int, name, status, order, field string) (o []model.Job, total int64, err error) {
|
||||
func (r jobRepository) Find(c context.Context, pageIndex, pageSize int, name, status, order, field string) (o []model.Job, total int64, err error) {
|
||||
job := model.Job{}
|
||||
db := r.DB.Table(job.TableName())
|
||||
dbCounter := r.DB.Table(job.TableName())
|
||||
db := r.GetDB(c).Table(job.TableName())
|
||||
dbCounter := r.GetDB(c).Table(job.TableName())
|
||||
|
||||
if len(name) > 0 {
|
||||
db = db.Where("name like ?", "%"+name+"%")
|
||||
@ -57,45 +52,36 @@ func (r JobRepository) Find(pageIndex, pageSize int, name, status, order, field
|
||||
return
|
||||
}
|
||||
|
||||
func (r JobRepository) FindByFunc(function string) (o []model.Job, err error) {
|
||||
db := r.DB
|
||||
func (r jobRepository) FindByFunc(c context.Context, function string) (o []model.Job, err error) {
|
||||
db := r.GetDB(c)
|
||||
err = db.Where("func = ?", function).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r JobRepository) FindAll() (o []model.Job, err error) {
|
||||
db := r.DB
|
||||
func (r jobRepository) FindAll(c context.Context) (o []model.Job, err error) {
|
||||
db := r.GetDB(c)
|
||||
err = db.Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r JobRepository) Create(o *model.Job) (err error) {
|
||||
return r.DB.Create(o).Error
|
||||
func (r jobRepository) Create(c context.Context, o *model.Job) (err error) {
|
||||
return r.GetDB(c).Create(o).Error
|
||||
}
|
||||
|
||||
func (r JobRepository) UpdateById(o *model.Job) (err error) {
|
||||
return r.DB.Updates(o).Error
|
||||
func (r jobRepository) UpdateById(c context.Context, o *model.Job) (err error) {
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
||||
func (r JobRepository) UpdateLastUpdatedById(id string) (err error) {
|
||||
err = r.DB.Updates(model.Job{ID: id, Updated: utils.NowJsonTime()}).Error
|
||||
func (r jobRepository) UpdateLastUpdatedById(c context.Context, id string) (err error) {
|
||||
err = r.GetDB(c).Updates(model.Job{ID: id, Updated: utils.NowJsonTime()}).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r JobRepository) FindById(id string) (o model.Job, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
func (r jobRepository) FindById(c context.Context, id string) (o model.Job, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r JobRepository) DeleteJobById(id string) error {
|
||||
//job, err := r.FindById(id)
|
||||
//if err != nil {
|
||||
// return err
|
||||
//}
|
||||
//if job.Status == constant.JobStatusRunning {
|
||||
// if err := r.ChangeStatusById(id, constant.JobStatusNotRunning); err != nil {
|
||||
// return err
|
||||
// }
|
||||
//}
|
||||
return r.DB.Where("id = ?", id).Delete(model.Job{}).Error
|
||||
func (r jobRepository) DeleteJobById(c context.Context, id string) error {
|
||||
return r.GetDB(c).Where("id = ?", id).Delete(model.Job{}).Error
|
||||
}
|
||||
|
@ -1,45 +1,39 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type JobLogRepository struct {
|
||||
DB *gorm.DB
|
||||
type jobLogRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func NewJobLogRepository(db *gorm.DB) *JobLogRepository {
|
||||
jobLogRepository = &JobLogRepository{DB: db}
|
||||
return jobLogRepository
|
||||
func (r jobLogRepository) Create(c context.Context, o *model.JobLog) error {
|
||||
return r.GetDB(c).Create(o).Error
|
||||
}
|
||||
|
||||
func (r JobLogRepository) Create(o *model.JobLog) error {
|
||||
return r.DB.Create(o).Error
|
||||
}
|
||||
|
||||
func (r JobLogRepository) FindByJobId(jobId string) (o []model.JobLog, err error) {
|
||||
err = r.DB.Where("job_id = ?", jobId).Order("timestamp asc").Find(&o).Error
|
||||
func (r jobLogRepository) FindByJobId(c context.Context, jobId string) (o []model.JobLog, err error) {
|
||||
err = r.GetDB(c).Where("job_id = ?", jobId).Order("timestamp asc").Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r JobLogRepository) FindOutTimeLog(dayLimit int) (o []model.JobLog, err error) {
|
||||
func (r jobLogRepository) FindOutTimeLog(c context.Context, 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
|
||||
err = r.GetDB(c).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) DeleteByJobId(c context.Context, jobId string) error {
|
||||
return r.GetDB(c).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) DeleteByIdIn(c context.Context, ids []string) error {
|
||||
return r.GetDB(c).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
|
||||
func (r jobLogRepository) DeleteById(c context.Context, id string) error {
|
||||
return r.GetDB(c).Where("id = ?", id).Delete(&model.JobLog{}).Error
|
||||
}
|
||||
|
@ -1,26 +1,20 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"next-terminal/server/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type LoginLogRepository struct {
|
||||
DB *gorm.DB
|
||||
type loginLogRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func NewLoginLogRepository(db *gorm.DB) *LoginLogRepository {
|
||||
loginLogRepository = &LoginLogRepository{DB: db}
|
||||
return loginLogRepository
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) Find(pageIndex, pageSize int, username, clientIp, state string) (o []model.LoginLog, total int64, err error) {
|
||||
func (r loginLogRepository) Find(c context.Context, 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.GetDB(c).Table(m.TableName())
|
||||
dbCounter := r.GetDB(c).Table(m.TableName())
|
||||
|
||||
if username != "" {
|
||||
db = db.Where("username like ?", "%"+username+"%")
|
||||
@ -49,44 +43,44 @@ func (r LoginLogRepository) Find(pageIndex, pageSize int, username, clientIp, st
|
||||
return
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) FindAliveLoginLogs() (o []model.LoginLog, err error) {
|
||||
err = r.DB.Where("state = '1' and logout_time is null").Find(&o).Error
|
||||
func (r loginLogRepository) FindAliveLoginLogs(c context.Context) (o []model.LoginLog, err error) {
|
||||
err = r.GetDB(c).Where("state = '1' and logout_time is null").Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) FindAllLoginLogs() (o []model.LoginLog, err error) {
|
||||
err = r.DB.Find(&o).Error
|
||||
func (r loginLogRepository) FindAllLoginLogs(c context.Context) (o []model.LoginLog, err error) {
|
||||
err = r.GetDB(c).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
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
|
||||
func (r loginLogRepository) FindAliveLoginLogsByUsername(c context.Context, username string) (o []model.LoginLog, err error) {
|
||||
err = r.GetDB(c).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) {
|
||||
func (r loginLogRepository) FindOutTimeLog(c context.Context, 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
|
||||
err = r.GetDB(c).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
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) Create(o *model.LoginLog) (err error) {
|
||||
return r.DB.Create(o).Error
|
||||
func (r loginLogRepository) Create(c context.Context, o *model.LoginLog) (err error) {
|
||||
return r.GetDB(c).Create(o).Error
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) DeleteByIdIn(ids []string) (err error) {
|
||||
return r.DB.Where("id in ?", ids).Delete(&model.LoginLog{}).Error
|
||||
func (r loginLogRepository) DeleteByIdIn(c context.Context, ids []string) (err error) {
|
||||
return r.GetDB(c).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) DeleteById(c context.Context, id string) (err error) {
|
||||
return r.GetDB(c).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
|
||||
func (r loginLogRepository) FindById(c context.Context, id string) (o model.LoginLog, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r LoginLogRepository) Update(o *model.LoginLog) error {
|
||||
return r.DB.Updates(o).Error
|
||||
func (r loginLogRepository) Update(c context.Context, o *model.LoginLog) error {
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
@ -1,48 +1,43 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/server/model"
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"next-terminal/server/model"
|
||||
)
|
||||
|
||||
type PropertyRepository struct {
|
||||
DB *gorm.DB
|
||||
type propertyRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func NewPropertyRepository(db *gorm.DB) *PropertyRepository {
|
||||
propertyRepository = &PropertyRepository{DB: db}
|
||||
return propertyRepository
|
||||
}
|
||||
|
||||
func (r PropertyRepository) FindAll() (o []model.Property) {
|
||||
if r.DB.Find(&o).Error != nil {
|
||||
func (r propertyRepository) FindAll(c context.Context) (o []model.Property) {
|
||||
if r.GetDB(c).Find(&o).Error != nil {
|
||||
return nil
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r PropertyRepository) Create(o *model.Property) (err error) {
|
||||
err = r.DB.Create(o).Error
|
||||
func (r propertyRepository) Create(c context.Context, o *model.Property) (err error) {
|
||||
err = r.GetDB(c).Create(o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r PropertyRepository) UpdateByName(o *model.Property, name string) error {
|
||||
func (r propertyRepository) UpdateByName(c context.Context, o *model.Property, name string) error {
|
||||
o.Name = name
|
||||
return r.DB.Updates(o).Error
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
||||
func (r PropertyRepository) DeleteByName(name string) error {
|
||||
return r.DB.Where("name = ?", name).Delete(model.Property{}).Error
|
||||
func (r propertyRepository) DeleteByName(c context.Context, name string) error {
|
||||
return r.GetDB(c).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
|
||||
func (r propertyRepository) FindByName(c context.Context, name string) (o model.Property, err error) {
|
||||
err = r.GetDB(c).Where("name = ?", name).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r PropertyRepository) FindAllMap() map[string]string {
|
||||
properties := r.FindAll()
|
||||
func (r propertyRepository) FindAllMap(c context.Context) map[string]string {
|
||||
properties := r.FindAll(c)
|
||||
propertyMap := make(map[string]string)
|
||||
for i := range properties {
|
||||
propertyMap[properties[i].Name] = properties[i].Value
|
||||
|
@ -1,6 +1,8 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"next-terminal/server/model"
|
||||
"next-terminal/server/utils"
|
||||
|
||||
@ -9,17 +11,12 @@ import (
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type ResourceSharerRepository struct {
|
||||
DB *gorm.DB
|
||||
type resourceSharerRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func NewResourceSharerRepository(db *gorm.DB) *ResourceSharerRepository {
|
||||
resourceSharerRepository = &ResourceSharerRepository{DB: db}
|
||||
return resourceSharerRepository
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) OverwriteUserIdsByResourceId(resourceId, resourceType string, userIds []string) (err error) {
|
||||
db := r.DB.Begin()
|
||||
func (r *resourceSharerRepository) OverwriteUserIdsByResourceId(c context.Context, resourceId, resourceType string, userIds []string) (err error) {
|
||||
db := r.GetDB(c).Begin()
|
||||
|
||||
var owner string
|
||||
// 检查资产是否存在
|
||||
@ -71,8 +68,8 @@ func (r *ResourceSharerRepository) OverwriteUserIdsByResourceId(resourceId, reso
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) DeleteByUserIdAndResourceTypeAndResourceIdIn(userGroupId, userId, resourceType string, resourceIds []string) error {
|
||||
db := r.DB
|
||||
func (r *resourceSharerRepository) DeleteByUserIdAndResourceTypeAndResourceIdIn(c context.Context, userGroupId, userId, resourceType string, resourceIds []string) error {
|
||||
db := r.GetDB(c)
|
||||
if userGroupId != "" {
|
||||
db = db.Where("user_group_id = ?", userGroupId)
|
||||
}
|
||||
@ -92,12 +89,20 @@ func (r *ResourceSharerRepository) DeleteByUserIdAndResourceTypeAndResourceIdIn(
|
||||
return db.Delete(&model.ResourceSharer{}).Error
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) DeleteResourceSharerByResourceId(resourceId string) error {
|
||||
return r.DB.Where("resource_id = ?", resourceId).Delete(&model.ResourceSharer{}).Error
|
||||
func (r *resourceSharerRepository) DeleteByResourceId(c context.Context, resourceId string) error {
|
||||
return r.GetDB(c).Where("resource_id = ?", resourceId).Delete(&model.ResourceSharer{}).Error
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) AddSharerResources(userGroupId, userId, strategyId, resourceType string, resourceIds []string) error {
|
||||
return r.DB.Transaction(func(tx *gorm.DB) (err error) {
|
||||
func (r *resourceSharerRepository) DeleteByUserId(c context.Context, userId string) error {
|
||||
return r.GetDB(c).Where("user_id = ?", userId).Delete(&model.ResourceSharer{}).Error
|
||||
}
|
||||
|
||||
func (r *resourceSharerRepository) DeleteByUserGroupId(c context.Context, userGroupId string) error {
|
||||
return r.GetDB(c).Where("user_group_id = ?", userGroupId).Delete(&model.ResourceSharer{}).Error
|
||||
}
|
||||
|
||||
func (r *resourceSharerRepository) AddSharerResources(userGroupId, userId, strategyId, resourceType string, resourceIds []string) error {
|
||||
return r.GetDB(context.TODO()).Transaction(func(tx *gorm.DB) (err error) {
|
||||
|
||||
for i := range resourceIds {
|
||||
resourceId := resourceIds[i]
|
||||
@ -149,22 +154,22 @@ func (r *ResourceSharerRepository) AddSharerResources(userGroupId, userId, strat
|
||||
})
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) FindAssetIdsByUserId(userId string) (assetIds []string, err error) {
|
||||
func (r *resourceSharerRepository) FindAssetIdsByUserId(c context.Context, userId string) (assetIds []string, err error) {
|
||||
// 查询当前用户创建的资产
|
||||
var ownerAssetIds, sharerAssetIds []string
|
||||
asset := model.Asset{}
|
||||
err = r.DB.Table(asset.TableName()).Select("id").Where("owner = ?", userId).Find(&ownerAssetIds).Error
|
||||
err = r.GetDB(c).Table(asset.TableName()).Select("id").Where("owner = ?", userId).Find(&ownerAssetIds).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 查询其他用户授权给该用户的资产
|
||||
groupIds, err := userGroupRepository.FindUserGroupIdsByUserId(userId)
|
||||
groupIds, err := UserGroupMemberRepository.FindUserGroupIdsByUserId(c, userId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
db := r.DB.Table("resource_sharers").Select("resource_id").Where("user_id = ?", userId)
|
||||
db := r.GetDB(c).Table("resource_sharers").Select("resource_id").Where("user_id = ?", userId)
|
||||
if len(groupIds) > 0 {
|
||||
db = db.Or("user_group_id in ?", groupIds)
|
||||
}
|
||||
@ -187,13 +192,13 @@ func (r *ResourceSharerRepository) FindAssetIdsByUserId(userId string) (assetIds
|
||||
return
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) FindByResourceIdAndUserId(assetId, userId string) (resourceSharers []model.ResourceSharer, err error) {
|
||||
func (r *resourceSharerRepository) FindByResourceIdAndUserId(c context.Context, assetId, userId string) (resourceSharers []model.ResourceSharer, err error) {
|
||||
// 查询其他用户授权给该用户的资产
|
||||
groupIds, err := userGroupRepository.FindUserGroupIdsByUserId(userId)
|
||||
groupIds, err := UserGroupMemberRepository.FindUserGroupIdsByUserId(c, userId)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
db := r.DB.Where("( resource_id = ? and user_id = ? )", assetId, userId)
|
||||
db := r.GetDB(c).Where("( resource_id = ? and user_id = ? )", assetId, userId)
|
||||
if len(groupIds) > 0 {
|
||||
db = db.Or("user_group_id in ?", groupIds)
|
||||
}
|
||||
@ -201,8 +206,8 @@ func (r *ResourceSharerRepository) FindByResourceIdAndUserId(assetId, userId str
|
||||
return
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) Find(resourceId, resourceType, userId, userGroupId string) (resourceSharers []model.ResourceSharer, err error) {
|
||||
db := r.DB
|
||||
func (r *resourceSharerRepository) Find(c context.Context, resourceId, resourceType, userId, userGroupId string) (resourceSharers []model.ResourceSharer, err error) {
|
||||
db := r.GetDB(c)
|
||||
if resourceId != "" {
|
||||
db = db.Where("resource_id = ?")
|
||||
}
|
||||
@ -219,7 +224,7 @@ func (r *ResourceSharerRepository) Find(resourceId, resourceType, userId, userGr
|
||||
return
|
||||
}
|
||||
|
||||
func (r *ResourceSharerRepository) FindAll() (o []model.ResourceSharer, err error) {
|
||||
err = r.DB.Find(&o).Error
|
||||
func (r *resourceSharerRepository) FindAll(c context.Context) (o []model.ResourceSharer, err error) {
|
||||
err = r.GetDB(c).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
75
server/repository/security.go
Normal file
75
server/repository/security.go
Normal file
@ -0,0 +1,75 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"next-terminal/server/model"
|
||||
)
|
||||
|
||||
type securityRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func (r securityRepository) FindAll(c context.Context) (o []model.AccessSecurity, err error) {
|
||||
err = r.GetDB(c).Order("priority asc").Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r securityRepository) Find(c context.Context, pageIndex, pageSize int, ip, rule, order, field string) (o []model.AccessSecurity, total int64, err error) {
|
||||
t := model.AccessSecurity{}
|
||||
db := r.GetDB(c).Table(t.TableName())
|
||||
dbCounter := r.GetDB(c).Table(t.TableName())
|
||||
|
||||
if len(ip) > 0 {
|
||||
db = db.Where("ip like ?", "%"+ip+"%")
|
||||
dbCounter = dbCounter.Where("ip like ?", "%"+ip+"%")
|
||||
}
|
||||
|
||||
if len(rule) > 0 {
|
||||
db = db.Where("rule = ?", rule)
|
||||
dbCounter = dbCounter.Where("rule = ?", rule)
|
||||
}
|
||||
|
||||
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 == "rule" {
|
||||
field = "rule"
|
||||
} else {
|
||||
field = "priority"
|
||||
}
|
||||
|
||||
err = db.Order(field + " " + order).Find(&o).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Error
|
||||
if o == nil {
|
||||
o = make([]model.AccessSecurity, 0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r securityRepository) Create(c context.Context, o *model.AccessSecurity) error {
|
||||
return r.GetDB(c).Create(o).Error
|
||||
}
|
||||
|
||||
func (r securityRepository) UpdateById(c context.Context, o *model.AccessSecurity, id string) error {
|
||||
o.ID = id
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
||||
func (r securityRepository) DeleteById(c context.Context, id string) error {
|
||||
return r.GetDB(c).Where("id = ?", id).Delete(model.AccessSecurity{}).Error
|
||||
}
|
||||
|
||||
func (r securityRepository) FindById(c context.Context, id string) (o *model.AccessSecurity, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"context"
|
||||
"os"
|
||||
"path"
|
||||
"time"
|
||||
@ -9,23 +9,15 @@ import (
|
||||
"next-terminal/server/config"
|
||||
"next-terminal/server/constant"
|
||||
"next-terminal/server/model"
|
||||
"next-terminal/server/utils"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type SessionRepository struct {
|
||||
DB *gorm.DB
|
||||
type sessionRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func NewSessionRepository(db *gorm.DB) *SessionRepository {
|
||||
sessionRepository = &SessionRepository{DB: db}
|
||||
return sessionRepository
|
||||
}
|
||||
func (r sessionRepository) Find(c context.Context, pageIndex, pageSize int, status, userId, clientIp, assetId, protocol, reviewed string) (results []model.SessionForPage, total int64, err error) {
|
||||
|
||||
func (r SessionRepository) Find(pageIndex, pageSize int, status, userId, clientIp, assetId, protocol, reviewed string) (results []model.SessionForPage, total int64, err error) {
|
||||
|
||||
db := r.DB
|
||||
db := r.GetDB(c)
|
||||
var params []interface{}
|
||||
|
||||
params = append(params, status)
|
||||
@ -77,152 +69,102 @@ func (r SessionRepository) Find(pageIndex, pageSize int, status, userId, clientI
|
||||
return
|
||||
}
|
||||
|
||||
func (r SessionRepository) FindByStatus(status string) (o []model.Session, err error) {
|
||||
err = r.DB.Where("status = ?", status).Find(&o).Error
|
||||
func (r sessionRepository) FindByStatus(c context.Context, status string) (o []model.Session, err error) {
|
||||
err = r.GetDB(c).Where("status = ?", status).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r SessionRepository) FindByStatusIn(statuses []string) (o []model.Session, err error) {
|
||||
err = r.DB.Where("status in ?", statuses).Find(&o).Error
|
||||
func (r sessionRepository) FindByStatusIn(c context.Context, statuses []string) (o []model.Session, err error) {
|
||||
err = r.GetDB(c).Where("status in ?", statuses).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r SessionRepository) FindOutTimeSessions(dayLimit int) (o []model.Session, err error) {
|
||||
func (r sessionRepository) FindOutTimeSessions(c context.Context, dayLimit int) (o []model.Session, err error) {
|
||||
limitTime := time.Now().Add(time.Duration(-dayLimit*24) * time.Hour)
|
||||
err = r.DB.Where("status = ? and connected_time < ?", constant.Disconnected, limitTime).Find(&o).Error
|
||||
err = r.GetDB(c).Where("status = ? and connected_time < ?", constant.Disconnected, limitTime).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r SessionRepository) Create(o *model.Session) (err error) {
|
||||
err = r.DB.Create(o).Error
|
||||
func (r sessionRepository) Create(c context.Context, o *model.Session) (err error) {
|
||||
err = r.GetDB(c).Create(o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r SessionRepository) FindById(id string) (o model.Session, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
func (r sessionRepository) FindById(c context.Context, id string) (o model.Session, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r SessionRepository) FindByIdAndDecrypt(id string) (o model.Session, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
if err == nil {
|
||||
err = r.Decrypt(&o)
|
||||
}
|
||||
func (r sessionRepository) FindByConnectionId(c context.Context, connectionId string) (o model.Session, err error) {
|
||||
err = r.GetDB(c).Where("connection_id = ?", connectionId).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r SessionRepository) Decrypt(item *model.Session) error {
|
||||
if item.Password != "" && item.Password != "-" {
|
||||
origData, err := base64.StdEncoding.DecodeString(item.Password)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, config.GlobalCfg.EncryptionPassword)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.Password = string(decryptedCBC)
|
||||
}
|
||||
if item.PrivateKey != "" && item.PrivateKey != "-" {
|
||||
origData, err := base64.StdEncoding.DecodeString(item.PrivateKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, config.GlobalCfg.EncryptionPassword)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.PrivateKey = string(decryptedCBC)
|
||||
}
|
||||
if item.Passphrase != "" && item.Passphrase != "-" {
|
||||
origData, err := base64.StdEncoding.DecodeString(item.Passphrase)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
decryptedCBC, err := utils.AesDecryptCBC(origData, config.GlobalCfg.EncryptionPassword)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item.Passphrase = string(decryptedCBC)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r SessionRepository) FindByConnectionId(connectionId string) (o model.Session, err error) {
|
||||
err = r.DB.Where("connection_id = ?", connectionId).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r SessionRepository) UpdateById(o *model.Session, id string) error {
|
||||
func (r sessionRepository) UpdateById(c context.Context, o *model.Session, id string) error {
|
||||
o.ID = id
|
||||
return r.DB.Updates(o).Error
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
||||
func (r SessionRepository) UpdateWindowSizeById(width, height int, id string) error {
|
||||
func (r sessionRepository) UpdateWindowSizeById(c context.Context, width, height int, id string) error {
|
||||
session := model.Session{}
|
||||
session.Width = width
|
||||
session.Height = height
|
||||
|
||||
return r.UpdateById(&session, id)
|
||||
return r.UpdateById(c, &session, id)
|
||||
}
|
||||
|
||||
func (r SessionRepository) DeleteById(id string) error {
|
||||
return r.DB.Where("id = ?", id).Delete(&model.Session{}).Error
|
||||
func (r sessionRepository) DeleteById(c context.Context, id string) error {
|
||||
return r.GetDB(c).Where("id = ?", id).Delete(&model.Session{}).Error
|
||||
}
|
||||
|
||||
func (r SessionRepository) DeleteByIds(sessionIds []string) error {
|
||||
func (r sessionRepository) DeleteByIds(c context.Context, sessionIds []string) error {
|
||||
recordingPath := config.GlobalCfg.Guacd.Recording
|
||||
for i := range sessionIds {
|
||||
if err := os.RemoveAll(path.Join(recordingPath, sessionIds[i])); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := r.DeleteById(sessionIds[i]); err != nil {
|
||||
if err := r.DeleteById(c, sessionIds[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r SessionRepository) DeleteByStatus(status string) error {
|
||||
return r.DB.Where("status = ?", status).Delete(&model.Session{}).Error
|
||||
func (r sessionRepository) DeleteByStatus(c context.Context, status string) error {
|
||||
return r.GetDB(c).Where("status = ?", status).Delete(&model.Session{}).Error
|
||||
}
|
||||
|
||||
func (r SessionRepository) CountOnlineSession() (total int64, err error) {
|
||||
err = r.DB.Where("status = ?", constant.Connected).Find(&model.Session{}).Count(&total).Error
|
||||
func (r sessionRepository) CountOnlineSession(c context.Context) (total int64, err error) {
|
||||
err = r.GetDB(c).Where("status = ?", constant.Connected).Find(&model.Session{}).Count(&total).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r SessionRepository) EmptyPassword() error {
|
||||
func (r sessionRepository) EmptyPassword(c context.Context) error {
|
||||
sql := "update sessions set password = '-',private_key = '-', passphrase = '-' where 1=1"
|
||||
return r.DB.Exec(sql).Error
|
||||
return r.GetDB(c).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
|
||||
func (r sessionRepository) CountByStatus(c context.Context, status string) (total int64, err error) {
|
||||
err = r.GetDB(c).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
|
||||
}
|
||||
func (r sessionRepository) OverviewAccess(c context.Context) (o []model.SessionForAccess, err error) {
|
||||
db := r.GetDB(c)
|
||||
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
|
||||
}
|
||||
|
||||
func (r SessionRepository) UpdateReadByIds(reviewed bool, ids []string) error {
|
||||
func (r sessionRepository) UpdateReadByIds(c context.Context, reviewed bool, ids []string) error {
|
||||
sql := "update sessions set reviewed = ? where id in ?"
|
||||
return r.DB.Exec(sql, reviewed, ids).Error
|
||||
return r.GetDB(c).Exec(sql, reviewed, ids).Error
|
||||
}
|
||||
|
||||
func (r SessionRepository) FindAllUnReviewed() (o []model.Session, err error) {
|
||||
err = r.DB.Where("reviewed = false or reviewed is null").Find(&o).Error
|
||||
func (r sessionRepository) FindAllUnReviewed(c context.Context) (o []model.Session, err error) {
|
||||
err = r.GetDB(c).Where("reviewed = false or reviewed is null").Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
@ -1,24 +1,19 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/server/model"
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"next-terminal/server/model"
|
||||
)
|
||||
|
||||
type StorageRepository struct {
|
||||
DB *gorm.DB
|
||||
type storageRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
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) {
|
||||
func (r storageRepository) Find(c context.Context, 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())
|
||||
db := r.GetDB(c).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.GetDB(c).Table(m.TableName())
|
||||
|
||||
if len(name) > 0 {
|
||||
db = db.Where("name like ?", "%"+name+"%")
|
||||
@ -49,37 +44,37 @@ func (r StorageRepository) Find(pageIndex, pageSize int, name, order, field stri
|
||||
return
|
||||
}
|
||||
|
||||
func (r StorageRepository) FindShares() (o []model.Storage, err error) {
|
||||
func (r storageRepository) FindShares(c context.Context) (o []model.Storage, err error) {
|
||||
m := model.Storage{}
|
||||
db := r.DB.Table(m.TableName()).Where("is_share = 1")
|
||||
db := r.GetDB(c).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) DeleteById(c context.Context, id string) error {
|
||||
return r.GetDB(c).Where("id = ?", id).Delete(model.Storage{}).Error
|
||||
}
|
||||
|
||||
func (r StorageRepository) Create(m *model.Storage) error {
|
||||
return r.DB.Create(m).Error
|
||||
func (r storageRepository) Create(c context.Context, m *model.Storage) error {
|
||||
return r.GetDB(c).Create(m).Error
|
||||
}
|
||||
|
||||
func (r StorageRepository) UpdateById(o *model.Storage, id string) error {
|
||||
func (r storageRepository) UpdateById(c context.Context, o *model.Storage, id string) error {
|
||||
o.ID = id
|
||||
return r.DB.Updates(o).Error
|
||||
return r.GetDB(c).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
|
||||
func (r storageRepository) FindByOwnerIdAndDefault(c context.Context, owner string, isDefault bool) (m model.Storage, err error) {
|
||||
err = r.GetDB(c).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
|
||||
func (r storageRepository) FindById(c context.Context, id string) (m model.Storage, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&m).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r StorageRepository) FindAll() (o []model.Storage, err error) {
|
||||
err = r.DB.Find(&o).Error
|
||||
func (r storageRepository) FindAll(c context.Context) (o []model.Storage, err error) {
|
||||
err = r.GetDB(c).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
@ -1,29 +1,24 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/server/model"
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"next-terminal/server/model"
|
||||
)
|
||||
|
||||
type StrategyRepository struct {
|
||||
DB *gorm.DB
|
||||
type strategyRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
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
|
||||
func (r strategyRepository) FindAll(c context.Context) (o []model.Strategy, err error) {
|
||||
err = r.GetDB(c).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) {
|
||||
func (r strategyRepository) Find(c context.Context, 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())
|
||||
db := r.GetDB(c).Table(m.TableName())
|
||||
dbCounter := r.GetDB(c).Table(m.TableName())
|
||||
|
||||
if len(name) > 0 {
|
||||
db = db.Where("name like ?", "%"+name+"%")
|
||||
@ -54,20 +49,20 @@ func (r StrategyRepository) Find(pageIndex, pageSize int, name, order, field str
|
||||
return
|
||||
}
|
||||
|
||||
func (r StrategyRepository) DeleteById(id string) error {
|
||||
return r.DB.Where("id = ?", id).Delete(model.Strategy{}).Error
|
||||
func (r strategyRepository) DeleteById(c context.Context, id string) error {
|
||||
return r.GetDB(c).Where("id = ?", id).Delete(model.Strategy{}).Error
|
||||
}
|
||||
|
||||
func (r StrategyRepository) Create(m *model.Strategy) error {
|
||||
return r.DB.Create(m).Error
|
||||
func (r strategyRepository) Create(c context.Context, m *model.Strategy) error {
|
||||
return r.GetDB(c).Create(m).Error
|
||||
}
|
||||
|
||||
func (r StrategyRepository) UpdateById(o *model.Strategy, id string) error {
|
||||
func (r strategyRepository) UpdateById(c context.Context, o *model.Strategy, id string) error {
|
||||
o.ID = id
|
||||
return r.DB.Updates(o).Error
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
||||
func (r StrategyRepository) FindById(id string) (m model.Strategy, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&m).Error
|
||||
func (r strategyRepository) FindById(c context.Context, id string) (m model.Strategy, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&m).Error
|
||||
return
|
||||
}
|
||||
|
@ -1,35 +1,23 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/server/constant"
|
||||
"next-terminal/server/model"
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"next-terminal/server/model"
|
||||
)
|
||||
|
||||
type UserRepository struct {
|
||||
DB *gorm.DB
|
||||
type userRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func NewUserRepository(db *gorm.DB) *UserRepository {
|
||||
userRepository = &UserRepository{DB: db}
|
||||
return userRepository
|
||||
}
|
||||
|
||||
func (r UserRepository) FindAll() (o []model.User, err error) {
|
||||
err = r.DB.Find(&o).Error
|
||||
func (r userRepository) FindAll(c context.Context) (o []model.User, err error) {
|
||||
err = r.GetDB(c).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserRepository) Find(pageIndex, pageSize int, username, nickname, mail, order, field string, account model.User) (o []model.UserForPage, total int64, err error) {
|
||||
db := r.DB.Table("users").Select("users.id,users.username,users.nickname,users.mail,users.online,users.created,users.type,users.status, count(resource_sharers.user_id) as sharer_asset_count, users.totp_secret").Joins("left join resource_sharers on users.id = resource_sharers.user_id and resource_sharers.resource_type = 'asset'").Group("users.id")
|
||||
dbCounter := r.DB.Table("users")
|
||||
|
||||
if constant.TypeUser == account.Type {
|
||||
// 普通用户只能查看到普通用户
|
||||
db = db.Where("users.type = ?", constant.TypeUser)
|
||||
dbCounter = dbCounter.Where("type = ?", constant.TypeUser)
|
||||
}
|
||||
func (r userRepository) Find(c context.Context, pageIndex, pageSize int, username, nickname, mail, order, field string) (o []model.UserForPage, total int64, err error) {
|
||||
db := r.GetDB(c).Table("users").Select("users.id,users.username,users.nickname,users.mail,users.online,users.created,users.type,users.status,users.source, count(resource_sharers.user_id) as sharer_asset_count, users.totp_secret").Joins("left join resource_sharers on users.id = resource_sharers.user_id and resource_sharers.resource_type = 'asset'").Group("users.id")
|
||||
dbCounter := r.GetDB(c).Table("users")
|
||||
|
||||
if len(username) > 0 {
|
||||
db = db.Where("users.username like ?", "%"+username+"%")
|
||||
@ -80,19 +68,19 @@ func (r UserRepository) Find(pageIndex, pageSize int, username, nickname, mail,
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserRepository) FindById(id string) (o model.User, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
func (r userRepository) FindById(c context.Context, id string) (o model.User, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserRepository) FindByUsername(username string) (o model.User, err error) {
|
||||
err = r.DB.Where("username = ?", username).First(&o).Error
|
||||
func (r userRepository) FindByUsername(c context.Context, username string) (o model.User, err error) {
|
||||
err = r.GetDB(c).Where("username = ?", username).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserRepository) ExistByUsername(username string) (exist bool) {
|
||||
func (r userRepository) ExistByUsername(c context.Context, username string) (exist bool) {
|
||||
count := int64(0)
|
||||
err := r.DB.Table("users").Where("username = ?", username).Count(&count).Error
|
||||
err := r.GetDB(c).Table("users").Where("username = ?", username).Count(&count).Error
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
@ -100,51 +88,38 @@ func (r UserRepository) ExistByUsername(username string) (exist bool) {
|
||||
return count > 0
|
||||
}
|
||||
|
||||
func (r UserRepository) FindOnlineUsers() (o []model.User, err error) {
|
||||
err = r.DB.Where("online = ?", true).Find(&o).Error
|
||||
func (r userRepository) FindOnlineUsers(c context.Context) (o []model.User, err error) {
|
||||
err = r.GetDB(c).Where("online = ?", true).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserRepository) Create(o *model.User) error {
|
||||
return r.DB.Create(o).Error
|
||||
func (r userRepository) Create(c context.Context, o *model.User) error {
|
||||
return r.GetDB(c).Create(o).Error
|
||||
}
|
||||
|
||||
func (r UserRepository) Update(o *model.User) error {
|
||||
return r.DB.Updates(o).Error
|
||||
func (r userRepository) Update(c context.Context, o *model.User) error {
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
||||
func (r UserRepository) UpdateOnlineByUsername(username string, online bool) error {
|
||||
func (r userRepository) UpdateOnlineByUsername(c context.Context, username string, online bool) error {
|
||||
sql := "update users set online = ? where username = ?"
|
||||
return r.DB.Exec(sql, online, username).Error
|
||||
return r.GetDB(c).Exec(sql, online, username).Error
|
||||
}
|
||||
|
||||
func (r UserRepository) DeleteById(id string) error {
|
||||
return r.DB.Transaction(func(tx *gorm.DB) (err error) {
|
||||
// 删除用户
|
||||
err = tx.Where("id = ?", id).Delete(&model.User{}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 删除用户组中的用户关系
|
||||
err = tx.Where("user_id = ?", id).Delete(&model.UserGroupMember{}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 删除用户分享到的资产
|
||||
err = tx.Where("user_id = ?", id).Delete(&model.ResourceSharer{}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
func (r userRepository) DeleteById(c context.Context, id string) error {
|
||||
return r.GetDB(c).Where("id = ?", id).Delete(&model.User{}).Error
|
||||
}
|
||||
|
||||
func (r UserRepository) CountOnlineUser() (total int64, err error) {
|
||||
err = r.DB.Where("online = ?", true).Find(&model.User{}).Count(&total).Error
|
||||
func (r userRepository) DeleteBySource(c context.Context, source string) error {
|
||||
return r.GetDB(c).Where("source = ?", source).Delete(&model.User{}).Error
|
||||
}
|
||||
|
||||
func (r userRepository) CountOnlineUser(c context.Context) (total int64, err error) {
|
||||
err = r.GetDB(c).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
|
||||
func (r userRepository) Count(c context.Context) (total int64, err error) {
|
||||
err = r.GetDB(c).Find(&model.User{}).Count(&total).Error
|
||||
return
|
||||
}
|
||||
|
@ -1,29 +1,23 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"next-terminal/server/model"
|
||||
"next-terminal/server/utils"
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"next-terminal/server/model"
|
||||
)
|
||||
|
||||
type UserGroupRepository struct {
|
||||
DB *gorm.DB
|
||||
type userGroupRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func NewUserGroupRepository(db *gorm.DB) *UserGroupRepository {
|
||||
userGroupRepository = &UserGroupRepository{DB: db}
|
||||
return userGroupRepository
|
||||
}
|
||||
|
||||
func (r UserGroupRepository) FindAll() (o []model.UserGroup, err error) {
|
||||
err = r.DB.Find(&o).Error
|
||||
func (r userGroupRepository) FindAll(c context.Context) (o []model.UserGroup, err error) {
|
||||
err = r.GetDB(c).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserGroupRepository) Find(pageIndex, pageSize int, name, order, field string) (o []model.UserGroupForPage, total int64, err error) {
|
||||
db := r.DB.Table("user_groups").Select("user_groups.id, user_groups.name, user_groups.created, count(resource_sharers.user_group_id) as asset_count").Joins("left join resource_sharers on user_groups.id = resource_sharers.user_group_id and resource_sharers.resource_type = 'asset'").Group("user_groups.id")
|
||||
dbCounter := r.DB.Table("user_groups")
|
||||
func (r userGroupRepository) Find(c context.Context, pageIndex, pageSize int, name, order, field string) (o []model.UserGroupForPage, total int64, err error) {
|
||||
db := r.GetDB(c).Table("user_groups").Select("user_groups.id, user_groups.name, user_groups.created, count(resource_sharers.user_group_id) as asset_count").Joins("left join resource_sharers on user_groups.id = resource_sharers.user_group_id and resource_sharers.resource_type = 'asset'").Group("user_groups.id")
|
||||
dbCounter := r.GetDB(c).Table("user_groups")
|
||||
if len(name) > 0 {
|
||||
db = db.Where("user_groups.name like ?", "%"+name+"%")
|
||||
dbCounter = dbCounter.Where("name like ?", "%"+name+"%")
|
||||
@ -53,94 +47,29 @@ func (r UserGroupRepository) Find(pageIndex, pageSize int, name, order, field st
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserGroupRepository) FindById(id string) (o model.UserGroup, err error) {
|
||||
err = r.DB.Where("id = ?", id).First(&o).Error
|
||||
func (r userGroupRepository) FindById(c context.Context, id string) (o model.UserGroup, err error) {
|
||||
err = r.GetDB(c).Where("id = ?", id).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserGroupRepository) FindUserGroupIdsByUserId(userId string) (o []string, err error) {
|
||||
// 先查询用户所在的用户
|
||||
err = r.DB.Table("user_group_members").Select("user_group_id").Where("user_id = ?", userId).Find(&o).Error
|
||||
func (r userGroupRepository) FindByName(c context.Context, name string) (o model.UserGroup, err error) {
|
||||
err = r.GetDB(c).Where("name = ?", name).First(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserGroupRepository) FindMembersById(userGroupId string) (o []string, err error) {
|
||||
err = r.DB.Table("user_group_members").Select("user_id").Where("user_group_id = ?", userGroupId).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r UserGroupRepository) Create(o *model.UserGroup, members []string) (err error) {
|
||||
return r.DB.Transaction(func(tx *gorm.DB) error {
|
||||
err = tx.Create(o).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if members != nil {
|
||||
userGroupId := o.ID
|
||||
err = AddUserGroupMembers(tx, members, userGroupId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return err
|
||||
})
|
||||
}
|
||||
|
||||
func (r UserGroupRepository) Update(o *model.UserGroup, members []string, id string) error {
|
||||
return r.DB.Transaction(func(tx *gorm.DB) error {
|
||||
o.ID = id
|
||||
err := tx.Updates(o).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = tx.Where("user_group_id = ?", id).Delete(&model.UserGroupMember{}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if members != nil {
|
||||
userGroupId := o.ID
|
||||
err = AddUserGroupMembers(tx, members, userGroupId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return err
|
||||
})
|
||||
}
|
||||
|
||||
func (r UserGroupRepository) DeleteById(id string) (err error) {
|
||||
err = r.DB.Where("id = ?", id).Delete(&model.UserGroup{}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return r.DB.Where("user_group_id = ?", id).Delete(&model.UserGroupMember{}).Error
|
||||
}
|
||||
|
||||
func AddUserGroupMembers(tx *gorm.DB, userIds []string, userGroupId string) error {
|
||||
userRepository := NewUserRepository(tx)
|
||||
for i := range userIds {
|
||||
userId := userIds[i]
|
||||
_, err := userRepository.FindById(userId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userGroupMember := model.UserGroupMember{
|
||||
ID: utils.Sign([]string{userGroupId, userId}),
|
||||
UserId: userId,
|
||||
UserGroupId: userGroupId,
|
||||
}
|
||||
err = tx.Create(&userGroupMember).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r UserGroupRepository) FindAllUserGroupMembers() (o []model.UserGroupMember, err error) {
|
||||
err = r.DB.Find(&o).Error
|
||||
func (r userGroupRepository) Create(c context.Context, o *model.UserGroup) (err error) {
|
||||
return r.GetDB(c).Create(o).Error
|
||||
}
|
||||
|
||||
func (r userGroupRepository) Update(c context.Context, o *model.UserGroup) error {
|
||||
return r.GetDB(c).Updates(o).Error
|
||||
}
|
||||
|
||||
func (r userGroupRepository) DeleteById(c context.Context, id string) (err error) {
|
||||
return r.GetDB(c).Where("id = ?", id).Delete(&model.UserGroup{}).Error
|
||||
}
|
||||
|
||||
func (r userGroupRepository) FindAllUserGroupMembers() (c context.Context, o []model.UserGroupMember, err error) {
|
||||
err = r.GetDB(c).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
34
server/repository/user_group_member.go
Normal file
34
server/repository/user_group_member.go
Normal file
@ -0,0 +1,34 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"next-terminal/server/model"
|
||||
)
|
||||
|
||||
type userGroupMemberRepository struct {
|
||||
baseRepository
|
||||
}
|
||||
|
||||
func (r userGroupMemberRepository) FindUserIdsByUserGroupId(c context.Context, userGroupId string) (o []string, err error) {
|
||||
err = r.GetDB(c).Table("user_group_members").Select("user_id").Where("user_group_id = ?", userGroupId).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r userGroupMemberRepository) FindUserGroupIdsByUserId(c context.Context, userId string) (o []string, err error) {
|
||||
// 先查询用户所在的用户
|
||||
err = r.GetDB(c).Table("user_group_members").Select("user_group_id").Where("user_id = ?", userId).Find(&o).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (r userGroupMemberRepository) Create(c context.Context, o *model.UserGroupMember) error {
|
||||
return r.GetDB(c).Create(o).Error
|
||||
}
|
||||
|
||||
func (r userGroupMemberRepository) DeleteByUserId(c context.Context, userId string) error {
|
||||
return r.GetDB(c).Where("user_id = ?", userId).Delete(&model.UserGroupMember{}).Error
|
||||
}
|
||||
|
||||
func (r userGroupMemberRepository) DeleteByUserGroupId(c context.Context, userGroupId string) error {
|
||||
return r.GetDB(c).Where("user_group_id = ?", userGroupId).Delete(&model.UserGroupMember{}).Error
|
||||
}
|
21
server/repository/var.go
Normal file
21
server/repository/var.go
Normal file
@ -0,0 +1,21 @@
|
||||
package repository
|
||||
|
||||
var (
|
||||
PropertyRepository = new(propertyRepository)
|
||||
UserRepository = new(userRepository)
|
||||
UserGroupRepository = new(userGroupRepository)
|
||||
UserGroupMemberRepository = new(userGroupMemberRepository)
|
||||
ResourceSharerRepository = new(resourceSharerRepository)
|
||||
AssetRepository = new(assetRepository)
|
||||
CredentialRepository = new(credentialRepository)
|
||||
CommandRepository = new(commandRepository)
|
||||
SessionRepository = new(sessionRepository)
|
||||
SecurityRepository = new(securityRepository)
|
||||
GatewayRepository = new(gatewayRepository)
|
||||
JobRepository = new(jobRepository)
|
||||
JobLogRepository = new(jobLogRepository)
|
||||
LoginLogRepository = new(loginLogRepository)
|
||||
StorageRepository = new(storageRepository)
|
||||
StrategyRepository = new(strategyRepository)
|
||||
AccessTokenRepository = new(accessTokenRepository)
|
||||
)
|
Reference in New Issue
Block a user