Files
terminal/server/api/stub_apis2.go
T
admin 1f7c491048 feat: 完善日志审计功能
- 实现文件系统日志(FilesystemLog)记录文件管理器操作
- 实现操作日志(OperationLog)记录用户操作行为
- 实现数据库SQL日志(DatabaseSQLLog)模型和API
- 实现SSH会话命令记录(SessionCommand)含命令输出和风险等级
- 添加IP提取服务支持X-Real-IP和X-Forwarded-For
- 添加日志自动清理功能
- 修复ProFormSwitch required验证问题
- 修复设置页面默认值问题
- 修复文件上传错误检测逻辑
- 修复资产树key前缀问题
- 添加VNC/RDP设置默认值
- 修复文件管理标题翻译
2026-04-19 06:57:42 +08:00

689 lines
18 KiB
Go

package api
import (
"context"
"strconv"
"next-terminal/server/common/maps"
"next-terminal/server/model"
"next-terminal/server/repository"
"next-terminal/server/utils"
"github.com/labstack/echo/v4"
)
type AuthorisedAssetApi struct{}
func (api AuthorisedAssetApi) PagingEndpoint(c echo.Context) error {
pageIndex, _ := strconv.Atoi(c.QueryParam("pageIndex"))
pageSize, _ := strconv.Atoi(c.QueryParam("pageSize"))
userId := c.QueryParam("userId")
departmentId := c.QueryParam("departmentId")
assetGroupId := c.QueryParam("assetGroupId")
assetId := c.QueryParam("assetId")
items, total, err := repository.AuthorisedAssetRepository.FindWithDetails(context.TODO(), pageIndex, pageSize, userId, departmentId, assetGroupId, assetId)
if err != nil {
return err
}
if items == nil {
items = []map[string]interface{}{}
}
return Success(c, maps.Map{
"total": total,
"items": items,
})
}
func (api AuthorisedAssetApi) AuthorisedAssetsEndpoint(c echo.Context) error {
var req struct {
UserIds []string `json:"userIds"`
DepartmentIds []string `json:"departmentIds"`
AssetIds []string `json:"assetIds"`
AssetGroupIds []string `json:"assetGroupIds"`
CommandFilterId string `json:"commandFilterId"`
StrategyId string `json:"strategyId"`
ExpiredAt int64 `json:"expiredAt"`
}
if err := c.Bind(&req); err != nil {
return err
}
var items []model.AuthorisedAsset
for _, userId := range req.UserIds {
for _, assetId := range req.AssetIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
UserId: userId,
AssetId: assetId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
for _, assetGroupId := range req.AssetGroupIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
UserId: userId,
AssetGroupId: assetGroupId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
}
for _, departmentId := range req.DepartmentIds {
for _, assetId := range req.AssetIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
DepartmentId: departmentId,
AssetId: assetId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
for _, assetGroupId := range req.AssetGroupIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
DepartmentId: departmentId,
AssetGroupId: assetGroupId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
}
if len(items) > 0 {
if err := repository.AuthorisedAssetRepository.CreateInBatches(context.TODO(), items); err != nil {
return err
}
}
return Success(c, nil)
}
func (api AuthorisedAssetApi) AuthorisedUsersEndpoint(c echo.Context) error {
var req struct {
AssetIds []string `json:"assetIds"`
AssetGroupIds []string `json:"assetGroupIds"`
UserIds []string `json:"userIds"`
CommandFilterId string `json:"commandFilterId"`
StrategyId string `json:"strategyId"`
ExpiredAt int64 `json:"expiredAt"`
}
if err := c.Bind(&req); err != nil {
return err
}
var items []model.AuthorisedAsset
for _, userId := range req.UserIds {
for _, assetId := range req.AssetIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
UserId: userId,
AssetId: assetId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
for _, assetGroupId := range req.AssetGroupIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
UserId: userId,
AssetGroupId: assetGroupId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
}
if len(items) > 0 {
if err := repository.AuthorisedAssetRepository.CreateInBatches(context.TODO(), items); err != nil {
return err
}
}
return Success(c, nil)
}
func (api AuthorisedAssetApi) AuthorisedDepartmentsEndpoint(c echo.Context) error {
var req struct {
AssetIds []string `json:"assetIds"`
AssetGroupIds []string `json:"assetGroupIds"`
DepartmentIds []string `json:"departmentIds"`
CommandFilterId string `json:"commandFilterId"`
StrategyId string `json:"strategyId"`
ExpiredAt int64 `json:"expiredAt"`
}
if err := c.Bind(&req); err != nil {
return err
}
var items []model.AuthorisedAsset
for _, departmentId := range req.DepartmentIds {
for _, assetId := range req.AssetIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
DepartmentId: departmentId,
AssetId: assetId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
for _, assetGroupId := range req.AssetGroupIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
DepartmentId: departmentId,
AssetGroupId: assetGroupId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
}
if len(items) > 0 {
if err := repository.AuthorisedAssetRepository.CreateInBatches(context.TODO(), items); err != nil {
return err
}
}
return Success(c, nil)
}
func (api AuthorisedAssetApi) SelectedEndpoint(c echo.Context) error {
expect := c.QueryParam("expect")
userId := c.QueryParam("userId")
departmentId := c.QueryParam("departmentId")
assetId := c.QueryParam("assetId")
result, err := repository.AuthorisedAssetRepository.Selected(context.TODO(), expect, userId, departmentId, assetId)
if err != nil {
return err
}
return Success(c, result)
}
func (api AuthorisedAssetApi) DeleteEndpoint(c echo.Context) error {
id := c.Param("id")
if err := repository.AuthorisedAssetRepository.DeleteById(context.TODO(), id); err != nil {
return err
}
return Success(c, nil)
}
func (api AuthorisedAssetApi) GetEndpoint(c echo.Context) error {
id := c.Param("id")
item, err := repository.AuthorisedAssetRepository.FindById(context.TODO(), id)
if err != nil {
return err
}
return Success(c, item)
}
func (api AuthorisedAssetApi) UpdateEndpoint(c echo.Context) error {
id := c.Param("id")
var item model.AuthorisedAsset
if err := c.Bind(&item); err != nil {
return err
}
item.ID = id
if err := repository.AuthorisedAssetRepository.UpdateById(context.TODO(), &item); err != nil {
return err
}
return Success(c, item)
}
func (api AuthorisedAssetApi) CreateEndpoint(c echo.Context) error {
var req struct {
UserIds []string `json:"userIds"`
DepartmentIds []string `json:"departmentIds"`
AssetIds []string `json:"assetIds"`
AssetGroupIds []string `json:"assetGroupIds"`
CommandFilterId string `json:"commandFilterId"`
StrategyId string `json:"strategyId"`
ExpiredAt int64 `json:"expiredAt"`
}
if err := c.Bind(&req); err != nil {
return err
}
var items []model.AuthorisedAsset
for _, userId := range req.UserIds {
for _, assetId := range req.AssetIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
UserId: userId,
AssetId: assetId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
for _, assetGroupId := range req.AssetGroupIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
UserId: userId,
AssetGroupId: assetGroupId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
}
for _, departmentId := range req.DepartmentIds {
for _, assetId := range req.AssetIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
DepartmentId: departmentId,
AssetId: assetId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
for _, assetGroupId := range req.AssetGroupIds {
items = append(items, model.AuthorisedAsset{
ID: utils.UUID(),
DepartmentId: departmentId,
AssetGroupId: assetGroupId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
}
if len(items) > 0 {
if err := repository.AuthorisedAssetRepository.CreateInBatches(context.TODO(), items); err != nil {
return err
}
}
return Success(c, nil)
}
type AuthorisedDatabaseAssetApi struct{}
func (api AuthorisedDatabaseAssetApi) PagingEndpoint(c echo.Context) error {
pageIndex, _ := strconv.Atoi(c.QueryParam("pageIndex"))
pageSize, _ := strconv.Atoi(c.QueryParam("pageSize"))
userId := c.QueryParam("userId")
departmentId := c.QueryParam("departmentId")
databaseAssetId := c.QueryParam("assetId")
items, total, err := repository.AuthorisedDatabaseAssetRepository.FindWithDetails(context.TODO(), pageIndex, pageSize, userId, departmentId, databaseAssetId)
if err != nil {
return err
}
if items == nil {
items = []map[string]interface{}{}
}
return Success(c, maps.Map{
"total": total,
"items": items,
})
}
func (api AuthorisedDatabaseAssetApi) SelectedEndpoint(c echo.Context) error {
expect := c.QueryParam("expect")
userId := c.QueryParam("userId")
departmentId := c.QueryParam("departmentId")
databaseAssetId := c.QueryParam("assetId")
result, err := repository.AuthorisedDatabaseAssetRepository.Selected(context.TODO(), expect, userId, departmentId, databaseAssetId)
if err != nil {
return err
}
return Success(c, result)
}
func (api AuthorisedDatabaseAssetApi) DeleteEndpoint(c echo.Context) error {
id := c.Param("id")
if err := repository.AuthorisedDatabaseAssetRepository.DeleteById(context.TODO(), id); err != nil {
return err
}
return Success(c, nil)
}
func (api AuthorisedDatabaseAssetApi) GetEndpoint(c echo.Context) error {
id := c.Param("id")
item, err := repository.AuthorisedDatabaseAssetRepository.FindById(context.TODO(), id)
if err != nil {
return err
}
return Success(c, item)
}
func (api AuthorisedDatabaseAssetApi) UpdateEndpoint(c echo.Context) error {
id := c.Param("id")
var item model.AuthorisedDatabaseAsset
if err := c.Bind(&item); err != nil {
return err
}
item.ID = id
if err := repository.AuthorisedDatabaseAssetRepository.UpdateById(context.TODO(), &item); err != nil {
return err
}
return Success(c, item)
}
func (api AuthorisedDatabaseAssetApi) CreateEndpoint(c echo.Context) error {
var req struct {
UserIds []string `json:"userIds"`
DepartmentIds []string `json:"departmentIds"`
DatabaseAssetIds []string `json:"assetIds"`
CommandFilterId string `json:"commandFilterId"`
StrategyId string `json:"strategyId"`
ExpiredAt int64 `json:"expiredAt"`
}
if err := c.Bind(&req); err != nil {
return err
}
var items []model.AuthorisedDatabaseAsset
for _, userId := range req.UserIds {
for _, databaseAssetId := range req.DatabaseAssetIds {
items = append(items, model.AuthorisedDatabaseAsset{
ID: utils.UUID(),
UserId: userId,
DatabaseAssetId: databaseAssetId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
}
for _, departmentId := range req.DepartmentIds {
for _, databaseAssetId := range req.DatabaseAssetIds {
items = append(items, model.AuthorisedDatabaseAsset{
ID: utils.UUID(),
DepartmentId: departmentId,
DatabaseAssetId: databaseAssetId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
}
if len(items) > 0 {
if err := repository.AuthorisedDatabaseAssetRepository.CreateInBatches(context.TODO(), items); err != nil {
return err
}
}
return Success(c, nil)
}
type AuthorisedWebsiteApi struct{}
func (api AuthorisedWebsiteApi) PagingEndpoint(c echo.Context) error {
pageIndex, _ := strconv.Atoi(c.QueryParam("pageIndex"))
pageSize, _ := strconv.Atoi(c.QueryParam("pageSize"))
userId := c.QueryParam("userId")
departmentId := c.QueryParam("departmentId")
websiteId := c.QueryParam("websiteId")
items, total, err := repository.AuthorisedWebsiteRepository.FindWithDetails(context.TODO(), pageIndex, pageSize, userId, departmentId, websiteId)
if err != nil {
return err
}
if items == nil {
items = []map[string]interface{}{}
}
return Success(c, maps.Map{
"total": total,
"items": items,
})
}
func (api AuthorisedWebsiteApi) DeleteEndpoint(c echo.Context) error {
id := c.Param("id")
if err := repository.AuthorisedWebsiteRepository.DeleteById(context.TODO(), id); err != nil {
return err
}
return Success(c, nil)
}
func (api AuthorisedWebsiteApi) CreateEndpoint(c echo.Context) error {
var req struct {
UserIds []string `json:"userIds"`
DepartmentIds []string `json:"departmentIds"`
WebsiteIds []string `json:"websiteIds"`
CommandFilterId string `json:"commandFilterId"`
StrategyId string `json:"strategyId"`
ExpiredAt int64 `json:"expiredAt"`
}
if err := c.Bind(&req); err != nil {
return err
}
var items []model.AuthorisedWebsite
for _, userId := range req.UserIds {
for _, websiteId := range req.WebsiteIds {
items = append(items, model.AuthorisedWebsite{
ID: utils.UUID(),
UserId: userId,
WebsiteId: websiteId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
}
for _, departmentId := range req.DepartmentIds {
for _, websiteId := range req.WebsiteIds {
items = append(items, model.AuthorisedWebsite{
ID: utils.UUID(),
DepartmentId: departmentId,
WebsiteId: websiteId,
CommandFilterId: req.CommandFilterId,
StrategyId: req.StrategyId,
ExpiredAt: req.ExpiredAt,
})
}
}
if len(items) > 0 {
if err := repository.AuthorisedWebsiteRepository.CreateInBatches(context.TODO(), items); err != nil {
return err
}
}
return Success(c, nil)
}
type DbWorkOrderApi struct{}
func (api DbWorkOrderApi) PagingEndpoint(c echo.Context) error {
return Success(c, maps.Map{
"total": 0,
"items": []interface{}{},
})
}
func (api DbWorkOrderApi) GetEndpoint(c echo.Context) error {
return Success(c, nil)
}
func (api DbWorkOrderApi) CreateEndpoint(c echo.Context) error {
return Success(c, nil)
}
func (api DbWorkOrderApi) ApproveEndpoint(c echo.Context) error {
return Success(c, nil)
}
func (api DbWorkOrderApi) RejectEndpoint(c echo.Context) error {
return Success(c, nil)
}
func (api DbWorkOrderApi) DeleteEndpoint(c echo.Context) error {
return Success(c, nil)
}
type DatabaseSQLLogApi struct{}
func (api DatabaseSQLLogApi) PagingEndpoint(c echo.Context) error {
pageIndex, _ := strconv.Atoi(c.QueryParam("pageIndex"))
pageSize, _ := strconv.Atoi(c.QueryParam("pageSize"))
assetId := c.QueryParam("assetId")
userId := c.QueryParam("userId")
status := c.QueryParam("status")
source := c.QueryParam("source")
order := c.QueryParam("order")
field := c.QueryParam("field")
items, total, err := repository.DatabaseSQLLogRepository.FindByPage(context.TODO(), pageIndex, pageSize, assetId, userId, status, source, order, field)
if err != nil {
return err
}
result := make([]maps.Map, 0)
for _, item := range items {
var assetName, userName string
if item.AssetId != "" {
asset, _ := repository.DatabaseAssetRepository.FindById(context.TODO(), item.AssetId)
assetName = asset.Name
}
if item.UserId != "" {
user, _ := repository.UserRepository.FindById(context.TODO(), item.UserId)
userName = user.Username
}
result = append(result, maps.Map{
"id": item.ID,
"assetId": item.AssetId,
"assetName": assetName,
"database": item.Database,
"userId": item.UserId,
"userName": userName,
"clientIp": item.ClientIP,
"sql": item.SQL,
"durationMs": item.DurationMs,
"rowsAffected": item.RowsAffected,
"status": item.Status,
"errorMessage": item.ErrorMessage,
"source": item.Source,
"createdAt": item.Created,
})
}
return Success(c, maps.Map{
"total": total,
"items": result,
})
}
func (api DatabaseSQLLogApi) ClearEndpoint(c echo.Context) error {
if err := repository.DatabaseSQLLogRepository.DeleteAll(context.TODO()); err != nil {
return err
}
return Success(c, nil)
}
type DnsProviderApi struct{}
func (api DnsProviderApi) GetConfigEndpoint(c echo.Context) error {
return Success(c, maps.Map{
"ok": false,
"email": "",
"type": "",
})
}
func (api DnsProviderApi) SetConfigEndpoint(c echo.Context) error {
return Success(c, nil)
}
func (api DnsProviderApi) DeleteConfigEndpoint(c echo.Context) error {
return Success(c, nil)
}
type LicenseApi struct{}
func (api LicenseApi) GetMachineIdEndpoint(c echo.Context) error {
return Success(c, maps.Map{
"machineId": "",
})
}
func (api LicenseApi) GetLicenseEndpoint(c echo.Context) error {
return Success(c, maps.Map{
"type": "free",
"machineId": "",
"asset": 0,
"concurrent": 0,
"user": 0,
"expired": 0,
})
}
func (api LicenseApi) GetSimpleLicenseEndpoint(c echo.Context) error {
return Success(c, maps.Map{
"type": "free",
"expired": 0,
"oem": false,
})
}
func (api LicenseApi) SetLicenseEndpoint(c echo.Context) error {
return Success(c, nil)
}
func (api LicenseApi) RequestLicenseEndpoint(c echo.Context) error {
return Success(c, nil)
}
type OidcApi struct{}
func (api OidcApi) AuthorizeEndpoint(c echo.Context) error {
return Success(c, maps.Map{
"authorizeUrl": "",
"state": "",
})
}
func (api OidcApi) LoginEndpoint(c echo.Context) error {
return Success(c, maps.Map{
"token": "",
"needTotp": false,
})
}
type WechatWorkApi struct{}
func (api WechatWorkApi) AuthorizeEndpoint(c echo.Context) error {
return Success(c, maps.Map{
"authorizeUrl": "",
})
}
func (api WechatWorkApi) LoginEndpoint(c echo.Context) error {
return Success(c, maps.Map{
"token": "",
"needTotp": false,
})
}
type WebsiteTempAllowApi struct{}
func (api WebsiteTempAllowApi) ListEndpoint(c echo.Context) error {
return Success(c, []interface{}{})
}
func (api WebsiteTempAllowApi) DeleteEndpoint(c echo.Context) error {
return Success(c, nil)
}