提交 v1.3.0 beta

This commit is contained in:
dushixiang
2022-10-23 20:05:13 +08:00
parent 4ff4d37442
commit 112435199a
329 changed files with 18340 additions and 58458 deletions

View File

@ -6,6 +6,8 @@ import (
"next-terminal/server/model"
)
var AccessTokenRepository = new(accessTokenRepository)
type accessTokenRepository struct {
baseRepository
}

View File

@ -3,16 +3,19 @@ package repository
import (
"context"
"fmt"
"next-terminal/server/common/nt"
"strconv"
"strings"
"next-terminal/server/config"
"next-terminal/server/constant"
"next-terminal/server/model"
"next-terminal/server/utils"
"github.com/labstack/echo/v4"
)
var AssetRepository = new(assetRepository)
type assetRepository struct {
baseRepository
}
@ -28,7 +31,11 @@ func (r assetRepository) FindByIds(c context.Context, assetIds []string) (o []mo
}
func (r assetRepository) FindByProtocol(c context.Context, protocol string) (o []model.Asset, err error) {
err = r.GetDB(c).Where("protocol = ?", protocol).Find(&o).Error
db := r.GetDB(c)
if protocol != "" {
db = db.Where("protocol = ?", protocol)
}
err = db.Order("name asc").Find(&o).Error
return
}
@ -37,65 +44,9 @@ func (r assetRepository) FindByProtocolAndIds(c context.Context, protocol string
return
}
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 := UserGroupMemberRepository.FindUserGroupIdsByUserId(c, account.ID)
if err != nil {
return nil, err
}
if len(userGroupIds) > 0 {
db = db.Or("resource_sharers.user_group_id in ?", userGroupIds)
}
}
if len(protocol) > 0 {
db = db.Where("assets.protocol = ?", protocol)
}
err = db.Find(&o).Error
return
}
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
db = db.Where("assets.owner = ? or resource_sharers.user_id = ?", owner, owner)
dbCounter = dbCounter.Where("assets.owner = ? or resource_sharers.user_id = ?", owner, owner)
// 查询用户所在用户组列表
userGroupIds, err := UserGroupMemberRepository.FindUserGroupIdsByUserId(c, account.ID)
if err != nil {
return nil, 0, err
}
if len(userGroupIds) > 0 {
db = db.Or("resource_sharers.user_group_id in ?", userGroupIds)
dbCounter = dbCounter.Or("resource_sharers.user_group_id in ?", userGroupIds)
}
} else {
if len(owner) > 0 {
db = db.Where("assets.owner = ?", owner)
dbCounter = dbCounter.Where("assets.owner = ?", owner)
}
if len(sharer) > 0 {
db = db.Where("resource_sharers.user_id = ?", sharer)
dbCounter = dbCounter.Where("resource_sharers.user_id = ?", sharer)
}
if len(userGroupId) > 0 {
db = db.Where("resource_sharers.user_group_id = ?", userGroupId)
dbCounter = dbCounter.Where("resource_sharers.user_group_id = ?", userGroupId)
}
}
func (r assetRepository) Find(c context.Context, pageIndex, pageSize int, name, protocol, tags, ip, active, 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.active_message,assets.owner,assets.created,assets.tags,assets.description, users.nickname as owner_name").Joins("left join users on assets.owner = users.id")
dbCounter := r.GetDB(c).Table("assets")
if len(name) > 0 {
db = db.Where("assets.name like ?", "%"+name+"%")
@ -125,6 +76,14 @@ func (r assetRepository) Find(c context.Context, pageIndex, pageSize int, name,
}
}
if active != "" {
_active, err := strconv.ParseBool(active)
if err == nil {
db = db.Where("assets.active = ?", _active)
dbCounter = dbCounter.Where("assets.active = ?", _active)
}
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
@ -146,22 +105,6 @@ func (r assetRepository) Find(c context.Context, pageIndex, pageSize int, name,
if o == nil {
o = make([]model.AssetForPage, 0)
} else {
for i := 0; i < len(o); i++ {
if o[i].Protocol == "ssh" {
attributes, err := r.FindAttrById(c, o[i].ID)
if err != nil {
continue
}
for j := range attributes {
if attributes[j].Name == constant.SshMode {
o[i].SshMode = attributes[j].Value
break
}
}
}
}
}
return
}
@ -180,9 +123,9 @@ func (r assetRepository) UpdateById(c context.Context, o *model.Asset, id string
return r.GetDB(c).Updates(o).Error
}
func (r assetRepository) UpdateActiveById(c context.Context, active bool, id string) error {
sql := "update assets set active = ? where id = ?"
return r.GetDB(c).Exec(sql, active, id).Error
func (r assetRepository) UpdateActiveById(c context.Context, active bool, message, id string) error {
sql := "update assets set active = ?, active_message = ? where id = ?"
return r.GetDB(c).Exec(sql, active, message, id).Error
}
func (r assetRepository) DeleteById(c context.Context, assetId string) (err error) {
@ -198,47 +141,16 @@ func (r assetRepository) Count(c context.Context) (total int64, err error) {
return
}
func (r assetRepository) CountByActive(c context.Context, active bool) (total int64, err error) {
err = r.GetDB(c).Find(&model.Asset{}).Where("active = ?", active).Count(&total).Error
return
}
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(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 := UserGroupMemberRepository.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.Asset{}).Count(&total).Error
return
}
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 := UserGroupMemberRepository.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.Asset{}).Count(&total).Error
return
}
func (r assetRepository) FindTags(c context.Context) (o []string, err error) {
var assets []model.Asset
err = r.GetDB(c).Not("tags = '' or tags = '-' ").Find(&assets).Error
@ -265,15 +177,15 @@ func (r assetRepository) UpdateAttributes(c context.Context, assetId, protocol s
var parameterNames []string
switch protocol {
case "ssh":
parameterNames = constant.SSHParameterNames
parameterNames = nt.SSHParameterNames
case "rdp":
parameterNames = constant.RDPParameterNames
parameterNames = nt.RDPParameterNames
case "vnc":
parameterNames = constant.VNCParameterNames
parameterNames = nt.VNCParameterNames
case "telnet":
parameterNames = constant.TelnetParameterNames
parameterNames = nt.TelnetParameterNames
case "kubernetes":
parameterNames = constant.KubernetesParameterNames
parameterNames = nt.KubernetesParameterNames
}
for i := range parameterNames {
@ -322,15 +234,15 @@ func (r assetRepository) FindAssetAttrMapByAssetId(c context.Context, assetId st
var parameterNames []string
switch asset.Protocol {
case "ssh":
parameterNames = constant.SSHParameterNames
parameterNames = nt.SSHParameterNames
case "rdp":
parameterNames = constant.RDPParameterNames
parameterNames = nt.RDPParameterNames
case "vnc":
parameterNames = constant.VNCParameterNames
parameterNames = nt.VNCParameterNames
case "telnet":
parameterNames = constant.TelnetParameterNames
parameterNames = nt.TelnetParameterNames
case "kubernetes":
parameterNames = constant.KubernetesParameterNames
parameterNames = nt.KubernetesParameterNames
}
propertiesMap := PropertyRepository.FindAllMap(c)
var attributeMap = make(map[string]string)
@ -350,3 +262,91 @@ func (r assetRepository) UpdateAttrs(c context.Context, name, value, newValue st
sql := "update asset_attributes set value = ? where name = ? and value = ?"
return r.GetDB(c).Exec(sql, newValue, name, value).Error
}
func (r assetRepository) ExistById(c context.Context, id string) (bool, error) {
m := model.Asset{}
var count uint64
err := r.GetDB(c).Table(m.TableName()).Select("count(*)").
Where("id = ?", id).
Find(&count).
Error
if err != nil {
return false, err
}
return count > 0, nil
}
func (r assetRepository) FindMyAssets(c context.Context, pageIndex, pageSize int, name, protocol, tags string, assetIds []string, order, field string) (o []model.AssetForPage, total int64, err error) {
db := r.GetDB(c).Table("assets").Select("assets.id,assets.name,assets.protocol,assets.active,assets.active_message,assets.tags,assets.description").
Where("id in ?", assetIds)
dbCounter := r.GetDB(c).Table("assets").Where("id in ?", assetIds)
if len(name) > 0 {
db = db.Where("assets.name like ?", "%"+name+"%")
dbCounter = dbCounter.Where("assets.name like ?", "%"+name+"%")
}
if len(protocol) > 0 {
db = db.Where("assets.protocol = ?", protocol)
dbCounter = dbCounter.Where("assets.protocol = ?", protocol)
}
if len(tags) > 0 {
tagArr := strings.Split(tags, ",")
for i := range tagArr {
if config.GlobalCfg.DB == "sqlite" {
db = db.Where("(',' || assets.tags || ',') LIKE ?", "%,"+tagArr[i]+",%")
dbCounter = dbCounter.Where("(',' || assets.tags || ',') LIKE ?", "%,"+tagArr[i]+",%")
} else {
db = db.Where("find_in_set(?, assets.tags)", tagArr[i])
dbCounter = dbCounter.Where("find_in_set(?, assets.tags)", tagArr[i])
}
}
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
if order == "ascend" {
order = "asc"
} else {
order = "desc"
}
if field == "name" {
field = "name"
} else {
field = "created"
}
err = db.Order("assets." + field + " " + order).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
if o == nil {
o = make([]model.AssetForPage, 0)
}
return
}
func (r assetRepository) FindMyAssetTags(c context.Context, assetIds []string) (o []string, err error) {
var assets []model.Asset
err = r.GetDB(c).Not("tags = '' or tags = '-' ").Where("id in ?", assetIds).Find(&assets).Error
if err != nil {
return nil, err
}
o = make([]string, 0)
for i := range assets {
if len(assets[i].Tags) == 0 {
continue
}
split := strings.Split(assets[i].Tags, ",")
o = append(o, split...)
}
return utils.Distinct(o), nil
}

View File

@ -0,0 +1,167 @@
package repository
import (
"context"
"next-terminal/server/dto"
"next-terminal/server/model"
)
var AuthorisedRepository = new(authorisedRepository)
type authorisedRepository struct {
baseRepository
}
func (r authorisedRepository) Create(c context.Context, m *model.Authorised) error {
return r.GetDB(c).Create(m).Error
}
func (r authorisedRepository) CreateInBatches(c context.Context, m []model.Authorised) error {
return r.GetDB(c).CreateInBatches(m, 100).Error
}
func (r authorisedRepository) DeleteByUserId(c context.Context, userId string) error {
return r.GetDB(c).Where("user_id = ?", userId).Delete(model.Authorised{}).Error
}
func (r authorisedRepository) DeleteByUserGroupId(c context.Context, userGroupId string) error {
return r.GetDB(c).Where("user_group_id = ?", userGroupId).Delete(model.Authorised{}).Error
}
func (r authorisedRepository) DeleteByAssetId(c context.Context, assetId string) error {
return r.GetDB(c).Where("asset_id = ?", assetId).Delete(model.Authorised{}).Error
}
func (r authorisedRepository) FindByUserId(c context.Context, userId string) (items []model.Authorised, err error) {
err = r.GetDB(c).Where("user_id = ?", userId).Find(&items).Error
return
}
func (r authorisedRepository) FindById(c context.Context, id string) (item model.Authorised, err error) {
err = r.GetDB(c).Where("id = ?", id).Find(&item).Error
return
}
func (r authorisedRepository) FindByUserGroupId(c context.Context, userGroupId string) (items []model.Authorised, err error) {
err = r.GetDB(c).Where("user_group_id = ?", userGroupId).Find(&items).Error
return
}
func (r authorisedRepository) FindByUserGroupIdIn(c context.Context, userGroupIds []string) (items []model.Authorised, err error) {
err = r.GetDB(c).Where("user_group_id in ?", userGroupIds).Find(&items).Error
return
}
func (r authorisedRepository) FindAll(c context.Context, userId, userGroupId, assetId string) (items []model.Authorised, err error) {
db := r.GetDB(c)
if userId != "" {
db = db.Where("user_id = ?", userId)
}
if userGroupId != "" {
db = db.Where("user_group_id = ?", userGroupId)
}
if assetId != "" {
db = db.Where("asset_id = ?", assetId)
}
err = db.Find(&items).Error
return
}
func (r authorisedRepository) FindAssetPage(c context.Context, pageIndex, pageSize int, assetName, userId, userGroupId string) (o []dto.AssetPageForAuthorised, total int64, err error) {
db := r.GetDB(c).Table("assets").
Select("authorised.id, authorised.created, assets.id as asset_id, assets.name as asset_name, strategies.id as strategy_id, strategies.name as strategy_name ").
Joins("left join authorised on authorised.asset_id = assets.id").
Joins("left join strategies on strategies.id = authorised.strategy_id").
Group("assets.id")
dbCounter := r.GetDB(c).Table("assets").Joins("left join authorised on assets.id = authorised.asset_id").Group("assets.id")
if assetName != "" {
db = db.Where("assets.name like ?", "%"+assetName+"%")
dbCounter = dbCounter.Where("assets.name like ?", "%"+assetName+"%")
}
if userId != "" {
db = db.Where("authorised.user_id = ?", userId)
dbCounter = dbCounter.Where("authorised.user_id = ?", userId)
}
if userGroupId != "" {
db = db.Where("authorised.user_group_id = ?", userGroupId)
dbCounter = dbCounter.Where("authorised.user_group_id = ?", userGroupId)
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
err = db.Order("authorised.created desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
if o == nil {
o = make([]dto.AssetPageForAuthorised, 0)
}
return
}
func (r authorisedRepository) DeleteById(c context.Context, id string) error {
return r.GetDB(c).Where("id = ?", id).Delete(model.Authorised{}).Error
}
func (r authorisedRepository) FindUserPage(c context.Context, pageIndex, pageSize int, userName, assetId string) (o []dto.UserPageForAuthorised, total int64, err error) {
db := r.GetDB(c).Table("users").
Select("authorised.id, authorised.created, users.id as user_id, users.nickname as user_name, strategies.id as strategy_id, strategies.name as strategy_name ").
Joins("left join authorised on authorised.user_id = users.id").
Joins("left join strategies on strategies.id = authorised.strategy_id").
Group("users.id")
dbCounter := r.GetDB(c).Table("assets").Joins("left join authorised on assets.id = authorised.asset_id").Group("assets.id")
if userName != "" {
db = db.Where("users.nickname like ?", "%"+userName+"%")
dbCounter = dbCounter.Where("users.nickname like ?", "%"+userName+"%")
}
if assetId != "" {
db = db.Where("authorised.asset_id = ?", assetId)
dbCounter = dbCounter.Where("authorised.asset_id = ?", assetId)
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
err = db.Order("authorised.created desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
if o == nil {
o = make([]dto.UserPageForAuthorised, 0)
}
return
}
func (r authorisedRepository) FindUserGroupPage(c context.Context, pageIndex, pageSize int, userName, assetId string) (o []dto.UserGroupPageForAuthorised, total int64, err error) {
db := r.GetDB(c).Table("user_groups").
Select("authorised.id, authorised.created, user_groups.id as user_group_id, user_groups.name as user_group_name, strategies.id as strategy_id, strategies.name as strategy_name ").
Joins("left join authorised on authorised.user_group_id = user_groups.id").
Joins("left join strategies on strategies.id = authorised.strategy_id").
Group("user_groups.id")
dbCounter := r.GetDB(c).Table("assets").Joins("left join authorised on assets.id = authorised.asset_id").Group("assets.id")
if userName != "" {
db = db.Where("user_groups.name like ?", "%"+userName+"%")
dbCounter = dbCounter.Where("user_groups.name like ?", "%"+userName+"%")
}
if assetId != "" {
db = db.Where("authorised.asset_id = ?", assetId)
dbCounter = dbCounter.Where("authorised.asset_id = ?", assetId)
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
err = db.Order("authorised.created desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
if o == nil {
o = make([]dto.UserGroupPageForAuthorised, 0)
}
return
}

View File

@ -2,8 +2,8 @@ package repository
import (
"context"
"next-terminal/server/common/nt"
"next-terminal/server/constant"
"next-terminal/server/env"
"gorm.io/gorm"
@ -13,7 +13,7 @@ type baseRepository struct {
}
func (b *baseRepository) GetDB(c context.Context) *gorm.DB {
db, ok := c.Value(constant.DB).(*gorm.DB)
db, ok := c.Value(nt.DB).(*gorm.DB)
if !ok {
return env.GetDB()
}

View File

@ -3,24 +3,57 @@ package repository
import (
"context"
"next-terminal/server/constant"
"next-terminal/server/model"
)
var CommandRepository = new(commandRepository)
type commandRepository struct {
baseRepository
}
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")
func (r commandRepository) Find(c context.Context, pageIndex, pageSize int, name, content, order, field string) (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").Joins("left join users on commands.owner = users.id").Group("commands.id")
dbCounter := r.GetDB(c).Table("commands")
if constant.TypeUser == account.Type {
owner := account.ID
db = db.Where("commands.owner = ? or resource_sharers.user_id = ?", owner, owner)
dbCounter = dbCounter.Where("commands.owner = ? or resource_sharers.user_id = ?", owner, owner)
if len(name) > 0 {
db = db.Where("commands.name like ?", "%"+name+"%")
dbCounter = dbCounter.Where("commands.name like ?", "%"+name+"%")
}
if len(content) > 0 {
db = db.Where("commands.content like ?", "%"+content+"%")
dbCounter = dbCounter.Where("commands.content like ?", "%"+content+"%")
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
if order == "ascend" {
order = "asc"
} else {
order = "desc"
}
if field == "name" {
field = "name"
} else {
field = "created"
}
err = db.Order("commands." + field + " " + order).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&o).Error
if o == nil {
o = make([]model.CommandForPage, 0)
}
return
}
func (r commandRepository) WorkerFind(c context.Context, pageIndex, pageSize int, name, content, order, field, userId string) (o []model.CommandForPage, total int64, err error) {
db := r.GetDB(c).Table("commands").Select("commands.id,commands.name,commands.content,commands.owner,commands.created").Where("commands.owner = ?", userId)
dbCounter := r.GetDB(c).Table("commands").Where("commands.owner = ?", userId)
if len(name) > 0 {
db = db.Where("commands.name like ?", "%"+name+"%")
dbCounter = dbCounter.Where("commands.name like ?", "%"+name+"%")
@ -76,21 +109,12 @@ 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(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
db = db.Where("commands.owner = ? or resource_sharers.user_id = ?", owner, owner)
}
err = db.Order("commands.name asc").Find(&o).Error
if o == nil {
o = make([]model.CommandForPage, 0)
}
return
}
func (r commandRepository) FindAll(c context.Context) (o []model.Command, err error) {
err = r.GetDB(c).Find(&o).Error
return
}
func (r commandRepository) FindByUserId(c context.Context, userId string) (o []model.Command, err error) {
err = r.GetDB(c).Where("owner = ?", userId).First(&o).Error
return
}

View File

@ -3,29 +3,24 @@ package repository
import (
"context"
"next-terminal/server/constant"
"next-terminal/server/model"
)
var CredentialRepository = new(credentialRepository)
type credentialRepository struct {
baseRepository
}
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")
func (r credentialRepository) FindByAll(c context.Context) (o []model.CredentialSimpleVo, err error) {
db := r.GetDB(c).Table("credentials")
err = db.Find(&o).Error
return
}
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
db = db.Where("credentials.owner = ? or resource_sharers.user_id = ?", owner, owner)
dbCounter = dbCounter.Where("credentials.owner = ? or resource_sharers.user_id = ?", owner, owner)
}
func (r credentialRepository) Find(c context.Context, pageIndex, pageSize int, name, order, field string) (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").Joins("left join users on credentials.owner = users.id")
dbCounter := r.GetDB(c).Table("credentials")
if len(name) > 0 {
db = db.Where("credentials.name like ?", "%"+name+"%")
@ -79,24 +74,6 @@ func (r credentialRepository) Count(c context.Context) (total int64, err error)
return
}
//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
//}
func (r credentialRepository) FindAll(c context.Context) (o []model.Credential, err error) {
err = r.GetDB(c).Find(&o).Error
return

View File

@ -6,6 +6,8 @@ import (
"next-terminal/server/model"
)
var GatewayRepository = new(gatewayRepository)
type gatewayRepository struct {
baseRepository
}

View File

@ -3,10 +3,12 @@ package repository
import (
"context"
"next-terminal/server/common"
"next-terminal/server/model"
"next-terminal/server/utils"
)
var JobRepository = new(jobRepository)
type jobRepository struct {
baseRepository
}
@ -73,7 +75,7 @@ func (r jobRepository) UpdateById(c context.Context, o *model.Job) (err 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
err = r.GetDB(c).Updates(model.Job{ID: id, Updated: common.NowJsonTime()}).Error
return
}

View File

@ -7,6 +7,8 @@ import (
"next-terminal/server/model"
)
var JobLogRepository = new(jobLogRepository)
type jobLogRepository struct {
baseRepository
}
@ -15,8 +17,16 @@ func (r jobLogRepository) Create(c context.Context, o *model.JobLog) error {
return r.GetDB(c).Create(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
func (r jobLogRepository) FindByJobId(c context.Context, jobId string, pageIndex, pageSize int) (o []model.JobLog, total int64, err error) {
err = r.GetDB(c).Table("job_logs").Where("job_id = ?", jobId).Count(&total).Error
if err != nil {
return nil, 0, err
}
err = r.GetDB(c).Where("job_id = ?", jobId).Order("timestamp desc").Find(&o).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Error
if o == nil {
o = make([]model.JobLog, 0)
}
return
}

View File

@ -4,9 +4,12 @@ import (
"context"
"time"
"next-terminal/server/dto"
"next-terminal/server/model"
)
var LoginLogRepository = new(loginLogRepository)
type loginLogRepository struct {
baseRepository
}
@ -84,3 +87,18 @@ func (r loginLogRepository) FindById(c context.Context, id string) (o model.Logi
func (r loginLogRepository) Update(c context.Context, o *model.LoginLog) error {
return r.GetDB(c).Updates(o).Error
}
func (r loginLogRepository) CountByState(c context.Context, state string) (total int64, err error) {
err = r.GetDB(c).Where("state = ?", state).Find(&model.LoginLog{}).Count(&total).Error
return
}
func (r loginLogRepository) CountWithGroupByLoginTime(c context.Context, loginTime time.Time) (counter []dto.DateCounter, err error) {
err = r.GetDB(c).Table("login_logs").Select("date(login_time) as date, count(id) as value").Where("login_time > ?", loginTime).Group("date(login_time)").Scan(&counter).Error
return
}
func (r loginLogRepository) CountWithGroupByLoginTimeAndUsername(c context.Context, loginTime time.Time) (counter []dto.DateCounter, err error) {
err = r.GetDB(c).Table("login_logs").Select("date(login_time) as date, count(distinct(username)) as value").Where("login_time > ?", loginTime).Group("date(login_time), username").Scan(&counter).Error
return
}

View File

@ -0,0 +1,79 @@
package repository
import (
"context"
"next-terminal/server/model"
)
var LoginPolicyRepository = new(loginPolicyRepository)
type loginPolicyRepository struct {
baseRepository
}
func (r loginPolicyRepository) Find(c context.Context, pageIndex, pageSize int, name, userId, order, field string) (o []model.LoginPolicy, total int64, err error) {
m := model.LoginPolicy{}
db := r.GetDB(c).Table(m.TableName()).Joins("left join login_policies_ref as ref on login_policies.id = ref.login_policy_id").Group("login_policies.id")
dbCounter := r.GetDB(c).Table(m.TableName()).Joins("left join login_policies_ref as ref on login_policies.id = ref.login_policy_id").Group("login_policies.id")
if len(name) > 0 {
db = db.Where("login_policies.name like ?", "%"+name+"%")
dbCounter = dbCounter.Where("login_policies.name like ?", "%"+name+"%")
}
if len(userId) > 0 {
db = db.Where("ref.user_id = ?", userId)
dbCounter = dbCounter.Where("ref.user_id = ?", userId)
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
if order == "" {
order = "asc"
} else if order == "ascend" {
order = "asc"
} else {
order = "desc"
}
if field == "name" {
field = "login_policies.name"
} else {
field = "login_policies.priority"
}
err = db.Order(field + " " + order).Find(&o).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Error
if o == nil {
o = make([]model.LoginPolicy, 0)
}
return
}
func (r loginPolicyRepository) FindByUserId(c context.Context, userId string) (items []model.LoginPolicy, err error) {
m := model.LoginPolicy{}
db := r.GetDB(c).Table(m.TableName()).Joins("left join login_policies_ref as ref on login_policies.id = ref.login_policy_id")
err = db.Where("ref.user_id = ?", userId).Order("login_policies.priority desc").Find(&items).Error
return
}
func (r loginPolicyRepository) DeleteById(c context.Context, id string) error {
return r.GetDB(c).Where("id = ?", id).Delete(model.LoginPolicy{}).Error
}
func (r loginPolicyRepository) Create(c context.Context, m *model.LoginPolicy) error {
return r.GetDB(c).Create(m).Error
}
func (r loginPolicyRepository) UpdateById(c context.Context, o *model.LoginPolicy, id string) error {
o.ID = id
return r.GetDB(c).Updates(o).Error
}
func (r loginPolicyRepository) FindById(c context.Context, id string) (m model.LoginPolicy, err error) {
err = r.GetDB(c).Where("id = ?", id).First(&m).Error
return
}

View File

@ -0,0 +1,67 @@
package repository
import (
"context"
"next-terminal/server/model"
)
var (
LoginPolicyUserRefRepository = new(loginPolicyUserRefRepository)
TimePeriodRepository = new(timePeriodRepository)
)
type loginPolicyUserRefRepository struct {
baseRepository
}
func (r loginPolicyUserRefRepository) Create(c context.Context, m *model.LoginPolicyUserRef) error {
return r.GetDB(c).Create(m).Error
}
func (r loginPolicyUserRefRepository) CreateInBatches(c context.Context, m []model.LoginPolicyUserRef) error {
return r.GetDB(c).CreateInBatches(m, 100).Error
}
func (r loginPolicyUserRefRepository) DeleteByUserId(c context.Context, userId string) error {
return r.GetDB(c).Where("user_id = ?", userId).Delete(model.LoginPolicyUserRef{}).Error
}
func (r loginPolicyUserRefRepository) FindByUserId(c context.Context, userId string) (items []model.LoginPolicyUserRef, err error) {
err = r.GetDB(c).Where("user_id = ?", userId).Find(&items).Error
return
}
func (r loginPolicyUserRefRepository) FindByLoginPolicyId(c context.Context, loginPolicyId string) (items []model.LoginPolicyUserRef, err error) {
err = r.GetDB(c).Where("login_policy_id = ?", loginPolicyId).Find(&items).Error
return
}
func (r loginPolicyUserRefRepository) DeleteByLoginPolicyId(c context.Context, loginPolicyId string) error {
return r.GetDB(c).Where("login_policy_id = ?", loginPolicyId).Delete(model.LoginPolicyUserRef{}).Error
}
func (r loginPolicyUserRefRepository) DeleteByLoginPolicyIdAndUserId(c context.Context, loginPolicyId, userId string) error {
return r.GetDB(c).Where("login_policy_id = ? and user_id = ?", loginPolicyId, userId).Delete(model.LoginPolicyUserRef{}).Error
}
func (r loginPolicyUserRefRepository) DeleteId(c context.Context, id string) error {
return r.GetDB(c).Where("id = ?", id).Delete(model.LoginPolicyUserRef{}).Error
}
type timePeriodRepository struct {
baseRepository
}
func (r timePeriodRepository) CreateInBatches(c context.Context, m []model.TimePeriod) error {
return r.GetDB(c).CreateInBatches(m, 7).Error
}
func (r timePeriodRepository) DeleteByLoginPolicyId(c context.Context, loginPolicyId string) error {
return r.GetDB(c).Where("login_policy_id = ?", loginPolicyId).Delete(model.TimePeriod{}).Error
}
func (r timePeriodRepository) FindByLoginPolicyId(c context.Context, loginPolicyId string) (items []model.TimePeriod, err error) {
err = r.GetDB(c).Where("login_policy_id = ?", loginPolicyId).Find(&items).Error
return
}

View File

@ -6,6 +6,8 @@ import (
"next-terminal/server/model"
)
var PropertyRepository = new(propertyRepository)
type propertyRepository struct {
baseRepository
}

View File

@ -1,184 +0,0 @@
package repository
import (
"context"
"next-terminal/server/model"
"next-terminal/server/utils"
"github.com/labstack/echo/v4"
"gorm.io/gorm"
)
type resourceSharerRepository struct {
baseRepository
}
func (r *resourceSharerRepository) OverwriteUserIdsByResourceId(c context.Context, resourceId, resourceType string, userIds []string) (err error) {
db := r.GetDB(c).Begin()
var owner string
// 检查资产是否存在
switch resourceType {
case "asset":
resource := model.Asset{}
err = db.Where("id = ?", resourceId).First(&resource).Error
owner = resource.Owner
case "command":
resource := model.Command{}
err = db.Where("id = ?", resourceId).First(&resource).Error
owner = resource.Owner
case "credential":
resource := model.Credential{}
err = db.Where("id = ?", resourceId).First(&resource).Error
owner = resource.Owner
}
if err == gorm.ErrRecordNotFound {
return echo.NewHTTPError(404, "资源「"+resourceId+"」不存在")
}
for i := range userIds {
if owner == userIds[i] {
return echo.NewHTTPError(400, "参数错误")
}
}
db.Where("resource_id = ?", resourceId).Delete(&model.ResourceSharer{})
for i := range userIds {
userId := userIds[i]
if len(userId) == 0 {
continue
}
id := utils.Sign([]string{resourceId, resourceType, userId})
resource := &model.ResourceSharer{
ID: id,
ResourceId: resourceId,
ResourceType: resourceType,
UserId: userId,
}
err = db.Create(resource).Error
if err != nil {
return err
}
}
db.Commit()
return nil
}
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)
}
if userId != "" {
db = db.Where("user_id = ?", userId)
}
if resourceType != "" {
db = db.Where("resource_type = ?", resourceType)
}
if len(resourceIds) > 0 {
db = db.Where("resource_id in ?", resourceIds)
}
return db.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) 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) AddSharerResource(c context.Context, m *model.ResourceSharer) error {
return r.GetDB(c).Create(m).Error
}
func (r *resourceSharerRepository) FindAssetIdsByUserId(c context.Context, userId string) (assetIds []string, err error) {
// 查询当前用户创建的资产
var ownerAssetIds, sharerAssetIds []string
asset := model.Asset{}
err = r.GetDB(c).Table(asset.TableName()).Select("id").Where("owner = ?", userId).Find(&ownerAssetIds).Error
if err != nil {
return nil, err
}
// 查询其他用户授权给该用户的资产
groupIds, err := UserGroupMemberRepository.FindUserGroupIdsByUserId(c, userId)
if err != nil {
return nil, err
}
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)
}
err = db.Find(&sharerAssetIds).Error
if err != nil {
return nil, err
}
// 合并查询到的资产ID
assetIds = make([]string, 0)
if ownerAssetIds != nil {
assetIds = append(assetIds, ownerAssetIds...)
}
if sharerAssetIds != nil {
assetIds = append(assetIds, sharerAssetIds...)
}
return
}
func (r *resourceSharerRepository) FindByResourceIdAndUserId(c context.Context, assetId, userId string) (resourceSharers []model.ResourceSharer, err error) {
// 查询其他用户授权给该用户的资产
groupIds, err := UserGroupMemberRepository.FindUserGroupIdsByUserId(c, userId)
if err != nil {
return
}
db := r.GetDB(c).Where("( resource_id = ? and user_id = ? )", assetId, userId)
if len(groupIds) > 0 {
db = db.Or("user_group_id in ?", groupIds)
}
err = db.Find(&resourceSharers).Error
return
}
func (r *resourceSharerRepository) Find(c context.Context, resourceId, resourceType, userId, userGroupId string) (resourceSharers []model.ResourceSharer, err error) {
db := r.GetDB(c)
if resourceId != "" {
db = db.Where("resource_id = ?", resourceId)
}
if resourceType != "" {
db = db.Where("resource_type = ?", resourceType)
}
if userId != "" {
db = db.Where("user_id = ?", userId)
}
if userGroupId != "" {
db = db.Where("user_group_id = ?", userGroupId)
}
err = db.Find(&resourceSharers).Error
return
}
func (r *resourceSharerRepository) FindAll(c context.Context) (o []model.ResourceSharer, err error) {
err = r.GetDB(c).Find(&o).Error
return
}
func (r *resourceSharerRepository) DeleteById(ctx context.Context, id string) error {
return r.GetDB(ctx).Where("id = ?", id).Delete(&model.ResourceSharer{}).Error
}

88
server/repository/role.go Normal file
View File

@ -0,0 +1,88 @@
package repository
import (
"context"
"next-terminal/server/model"
)
var RoleRepository = new(roleRepository)
type roleRepository struct {
baseRepository
}
func (r roleRepository) ExistsById(c context.Context, id string) (exist bool, err error) {
m := model.Role{}
var count uint64
err = r.GetDB(c).Table(m.TableName()).Select("count(*)").
Where("id = ?", id).
Find(&count).
Error
if err != nil {
return false, err
}
return count > 0, nil
}
func (r roleRepository) FindAll(c context.Context) (o []model.Role, err error) {
err = r.GetDB(c).Order("name desc").Find(&o).Error
return
}
func (r roleRepository) Find(c context.Context, pageIndex, pageSize int, name, _type, order, field string) (o []model.Role, total int64, err error) {
m := model.Role{}
db := r.GetDB(c).Table(m.TableName())
dbCounter := r.GetDB(c).Table(m.TableName())
if len(name) > 0 {
db = db.Where("name like ?", "%"+name+"%")
dbCounter = dbCounter.Where("name like ?", "%"+name+"%")
}
if _type != "" {
db = db.Where("type = ?", _type)
dbCounter = dbCounter.Where("type = ?", _type)
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
if order == "ascend" {
order = "asc"
} else {
order = "desc"
}
if field == "name" {
field = "name"
} else {
field = "created"
}
err = db.Order(field + " " + order).Find(&o).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Error
if o == nil {
o = make([]model.Role, 0)
}
return
}
func (r roleRepository) DeleteById(c context.Context, id string) error {
return r.GetDB(c).Where("id = ?", id).Delete(model.Role{}).Error
}
func (r roleRepository) Create(c context.Context, m *model.Role) error {
return r.GetDB(c).Create(m).Error
}
func (r roleRepository) UpdateById(c context.Context, o *model.Role, id string) error {
o.ID = id
return r.GetDB(c).Updates(o).Error
}
func (r roleRepository) FindById(c context.Context, id string) (m model.Role, err error) {
err = r.GetDB(c).Where("id = ?", id).First(&m).Error
return
}

View File

@ -0,0 +1,29 @@
package repository
import (
"context"
"next-terminal/server/model"
)
var RoleMenuRefRepository = &roleMenuRefRepository{}
type roleMenuRefRepository struct {
baseRepository
}
func (r roleMenuRefRepository) CreateInBatches(ctx context.Context, items []*model.RoleMenuRef) error {
return r.GetDB(ctx).CreateInBatches(items, 100).Error
}
func (r roleMenuRefRepository) FindByRoleId(ctx context.Context, roleId string) (items []model.RoleMenuRef, err error) {
err = r.GetDB(ctx).Where("role_id = ?", roleId).Find(&items).Error
return
}
func (r roleMenuRefRepository) DeleteByRoleId(ctx context.Context, roleId string) error {
return r.GetDB(ctx).Where("role_id = ?", roleId).Delete(&model.RoleMenuRef{}).Error
}
func (r roleMenuRefRepository) DeleteByIdIn(ctx context.Context, array []string) error {
return r.GetDB(ctx).Where("id in ?", array).Delete(&model.RoleMenuRef{}).Error
}

View File

@ -6,6 +6,8 @@ import (
"next-terminal/server/model"
)
var SecurityRepository = new(securityRepository)
type securityRepository struct {
baseRepository
}

View File

@ -2,15 +2,15 @@ package repository
import (
"context"
"os"
"path"
"next-terminal/server/common/nt"
"time"
"next-terminal/server/config"
"next-terminal/server/constant"
"next-terminal/server/dto"
"next-terminal/server/model"
)
var SessionRepository = new(sessionRepository)
type sessionRepository struct {
baseRepository
}
@ -22,7 +22,10 @@ func (r sessionRepository) Find(c context.Context, pageIndex, pageSize int, stat
params = append(params, status)
itemSql := "SELECT s.id,s.mode, s.protocol,s.recording, s.connection_id, s.asset_id, s.creator, s.client_ip, s.width, s.height, s.ip, s.port, s.username, s.status, s.connected_time, s.disconnected_time,s.code,s.reviewed, s.message, a.name AS asset_name, u.nickname AS creator_name FROM sessions s LEFT JOIN assets a ON s.asset_id = a.id LEFT JOIN users u ON s.creator = u.id WHERE s.STATUS = ? "
itemSql := "SELECT s.id,s.mode, s.protocol,s.recording, s.connection_id, s.asset_id, s.creator, s.client_ip, s.width, s.height, s.ip, s.port, s.username, s.status, s.connected_time, s.disconnected_time,s.code,s.reviewed, s.message,s.command_count, a.name AS asset_name, u.nickname AS creator_name FROM sessions s " +
"LEFT JOIN assets a ON s.asset_id = a.id " +
"LEFT JOIN users u ON s.creator = u.id " +
"WHERE s.STATUS = ? "
countSql := "select count(*) from sessions as s where s.status = ? "
if len(userId) > 0 {
@ -81,7 +84,7 @@ func (r sessionRepository) FindByStatusIn(c context.Context, statuses []string)
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.GetDB(c).Where("status = ? and connected_time < ?", constant.Disconnected, limitTime).Find(&o).Error
err = r.GetDB(c).Where("status = ? and connected_time < ?", nt.Disconnected, limitTime).Find(&o).Error
return
}
@ -117,25 +120,17 @@ 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(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(c, sessionIds[i]); err != nil {
return err
}
}
return nil
}
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(c context.Context) (total int64, err error) {
err = r.GetDB(c).Where("status = ?", constant.Connected).Find(&model.Session{}).Count(&total).Error
err = r.GetDB(c).Where("status = ?", nt.Connected).Find(&model.Session{}).Count(&total).Error
return
}
func (r sessionRepository) CountOfflineSession(c context.Context) (total int64, err error) {
err = r.GetDB(c).Where("status = ?", nt.Disconnected).Find(&model.Session{}).Count(&total).Error
return
}
@ -149,16 +144,6 @@ func (r sessionRepository) CountByStatus(c context.Context, status string) (tota
return
}
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(c context.Context, reviewed bool, ids []string) error {
sql := "update sessions set reviewed = ? where id in ?"
return r.GetDB(c).Exec(sql, reviewed, ids).Error
@ -173,3 +158,8 @@ func (r sessionRepository) UpdateMode(c context.Context) error {
sql := "update sessions set mode = 'native' where mode = 'naive'"
return r.GetDB(c).Exec(sql).Error
}
func (r sessionRepository) CountWithGroupByLoginTime(c context.Context, t time.Time) (counter []dto.DateCounter, err error) {
err = r.GetDB(c).Table("sessions").Select("date(connected_time) as date, count(id) as value").Where("connected_time > ?", t).Group("date(connected_time)").Scan(&counter).Error
return
}

View File

@ -6,6 +6,8 @@ import (
"next-terminal/server/model"
)
var StorageRepository = new(storageRepository)
type storageRepository struct {
baseRepository
}

View File

@ -0,0 +1,78 @@
package repository
import (
"context"
"next-terminal/server/dto"
"next-terminal/server/model"
)
var StorageLogRepository = new(storageLogRepository)
type storageLogRepository struct {
baseRepository
}
func (r storageLogRepository) DeleteById(c context.Context, id string) error {
return r.GetDB(c).Where("id = ?", id).Delete(model.StorageLog{}).Error
}
func (r storageLogRepository) DeleteAll(c context.Context) error {
return r.GetDB(c).Where("1 = 1").Delete(model.StorageLog{}).Error
}
func (r storageLogRepository) Create(c context.Context, m *model.StorageLog) error {
return r.GetDB(c).Create(m).Error
}
func (r storageLogRepository) FindById(c context.Context, id string) (m model.StorageLog, err error) {
err = r.GetDB(c).Where("id = ?", id).First(&m).Error
return
}
func (r storageLogRepository) Find(c context.Context, pageIndex, pageSize int, assetId, userId, action, order, field string) (o []dto.StorageLogForPage, total int64, err error) {
db := r.GetDB(c).Table("storage_logs").Select("storage_logs.*, assets.name as asset_name, users.nickname as user_name").
Joins("left join assets on storage_logs.asset_id = assets.id").
Joins("left join users on storage_logs.user_id = users.id")
dbCounter := r.GetDB(c).Table("storage_logs").
Joins("left join assets on storage_logs.asset_id = assets.id").
Joins("left join users on storage_logs.user_id = users.id")
if len(assetId) > 0 {
db = db.Where("storage_logs.asset_id = ?", assetId)
dbCounter = dbCounter.Where("storage_logs.asset_id = ?", assetId)
}
if len(userId) > 0 {
db = db.Where("storage_logs.user_id = ?", userId)
dbCounter = dbCounter.Where("storage_logs.user_id = ?", userId)
}
if len(action) > 0 {
db = db.Where("storage_logs.action = ?", action)
dbCounter = dbCounter.Where("storage_logs.action = ?", action)
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
if order == "" {
order = "desc"
} else if order == "ascend" {
order = "asc"
} else {
order = "desc"
}
if field == "" {
field = "storage_logs.created"
}
err = db.Order(field + " " + order).Find(&o).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Error
if o == nil {
o = make([]dto.StorageLogForPage, 0)
}
return
}

View File

@ -6,12 +6,14 @@ import (
"next-terminal/server/model"
)
var StrategyRepository = new(strategyRepository)
type strategyRepository struct {
baseRepository
}
func (r strategyRepository) FindAll(c context.Context) (o []model.Strategy, err error) {
err = r.GetDB(c).Order("name desc").Find(&o).Error
err = r.GetDB(c).Order("name asc").Find(&o).Error
return
}

View File

@ -0,0 +1,70 @@
package repository
import (
"context"
"next-terminal/server/model"
)
var TenantRepository = new(tenantRepository)
type tenantRepository struct {
baseRepository
}
func (r tenantRepository) FindAll(c context.Context) (o []model.Tenant, err error) {
err = r.GetDB(c).Order("name desc").Find(&o).Error
return
}
func (r tenantRepository) Find(c context.Context, pageIndex, pageSize int, name, order, field string) (o []model.Tenant, total int64, err error) {
m := model.Tenant{}
db := r.GetDB(c).Table(m.TableName())
dbCounter := r.GetDB(c).Table(m.TableName())
if len(name) > 0 {
db = db.Where("name like ?", "%"+name+"%")
dbCounter = dbCounter.Where("name like ?", "%"+name+"%")
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
}
if order == "ascend" {
order = "asc"
} else {
order = "desc"
}
if field == "name" {
field = "name"
} else {
field = "created"
}
err = db.Order(field + " " + order).Find(&o).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Error
if o == nil {
o = make([]model.Tenant, 0)
}
return
}
func (r tenantRepository) DeleteById(c context.Context, id string) error {
return r.GetDB(c).Where("id = ?", id).Delete(model.Tenant{}).Error
}
func (r tenantRepository) Create(c context.Context, m *model.Tenant) error {
return r.GetDB(c).Create(m).Error
}
func (r tenantRepository) UpdateById(c context.Context, o *model.Tenant, id string) error {
o.ID = id
return r.GetDB(c).Updates(o).Error
}
func (r tenantRepository) FindById(c context.Context, id string) (m model.Tenant, err error) {
err = r.GetDB(c).Where("id = ?", id).First(&m).Error
return
}

View File

@ -2,10 +2,13 @@ package repository
import (
"context"
"strconv"
"next-terminal/server/model"
)
var UserRepository = new(userRepository)
type userRepository struct {
baseRepository
}
@ -15,10 +18,18 @@ func (r userRepository) FindAll(c context.Context) (o []model.User, err error) {
return
}
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")
func (r userRepository) Find(c context.Context, pageIndex, pageSize int, username, nickname, mail, online, loginPolicyId, 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, users.totp_secret")
dbCounter := r.GetDB(c).Table("users")
if loginPolicyId != "" {
db = db.Joins("left join login_policies_ref as ref on users.id = ref.user_id")
dbCounter = dbCounter.Joins("left join login_policies_ref as ref on users.id = ref.user_id")
db = db.Where("ref.login_policy_id = ?", loginPolicyId)
dbCounter = db.Where("ref.login_policy_id = ?", loginPolicyId)
}
if len(username) > 0 {
db = db.Where("users.username like ?", "%"+username+"%")
dbCounter = dbCounter.Where("username like ?", "%"+username+"%")
@ -34,6 +45,15 @@ func (r userRepository) Find(c context.Context, pageIndex, pageSize int, usernam
dbCounter = dbCounter.Where("mail like ?", "%"+mail+"%")
}
if online != "" {
_online, err := strconv.ParseBool(online)
if err != nil {
return nil, 0, err
}
db = db.Where("users.online = ?", _online)
dbCounter = dbCounter.Where("users.online = ?", _online)
}
err = dbCounter.Count(&total).Error
if err != nil {
return nil, 0, err
@ -91,6 +111,19 @@ func (r userRepository) ExistByUsername(c context.Context, username string) (exi
return count > 0, nil
}
func (r userRepository) ExistById(c context.Context, id string) (exist bool, err error) {
user := model.User{}
var count uint64
err = r.GetDB(c).Table(user.TableName()).Select("count(*)").
Where("id = ?", id).
Find(&count).
Error
if err != nil {
return false, err
}
return count > 0, nil
}
func (r userRepository) FindOnlineUsers(c context.Context) (o []model.User, err error) {
err = r.GetDB(c).Where("online = ?", true).Find(&o).Error
return

View File

@ -6,6 +6,8 @@ import (
"next-terminal/server/model"
)
var UserGroupRepository = new(userGroupRepository)
type userGroupRepository struct {
baseRepository
}
@ -16,7 +18,7 @@ func (r userGroupRepository) FindAll(c context.Context) (o []model.UserGroup, er
}
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")
db := r.GetDB(c).Table("user_groups")
dbCounter := r.GetDB(c).Table("user_groups")
if len(name) > 0 {
db = db.Where("user_groups.name like ?", "%"+name+"%")

View File

@ -3,15 +3,23 @@ package repository
import (
"context"
"next-terminal/server/dto"
"next-terminal/server/model"
)
var UserGroupMemberRepository = new(userGroupMemberRepository)
type userGroupMemberRepository struct {
baseRepository
}
func (r userGroupMemberRepository) FindByUserGroupId(c context.Context, userGroupId string) (o []dto.UserGroupMember, err error) {
err = r.GetDB(c).Table("user_group_members").Select("users.id as id, users.nickname as name").Joins("left join users on users.id = user_group_members.user_id").Group("users.id").Where("user_group_id = ?", userGroupId).Find(&o).Error
return
}
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
err = r.GetDB(c).Table("user_group_members").Select("users.id").Where("user_group_id = ?", userGroupId).Find(&o).Error
return
}

View File

@ -0,0 +1,30 @@
package repository
import (
"context"
"next-terminal/server/model"
)
var UserRoleRefRepository = new(userRoleRefRepository)
type userRoleRefRepository struct {
baseRepository
}
func (r userRoleRefRepository) Create(c context.Context, m *model.UserRoleRef) error {
return r.GetDB(c).Create(m).Error
}
func (r userRoleRefRepository) DeleteByUserId(c context.Context, userId string) error {
return r.GetDB(c).Where("user_id = ?", userId).Delete(model.UserRoleRef{}).Error
}
func (r userRoleRefRepository) FindByUserId(c context.Context, userId string) (items []model.UserRoleRef, err error) {
err = r.GetDB(c).Where("user_id = ?", userId).Find(&items).Error
return
}
func (r userRoleRefRepository) DeleteByRoleId(c context.Context, roleId string) error {
return r.GetDB(c).Where("role_id = ?", roleId).Delete(model.UserRoleRef{}).Error
}

View File

@ -1,21 +0,0 @@
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)
)