Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fcce10c695 | ||
|
|
30eb14702f | ||
|
|
3679fcc874 | ||
|
|
d085b4e3c2 | ||
|
|
dc8fcdf214 | ||
|
|
8bab23b65b | ||
|
|
f64022e411 | ||
|
|
2d37302cf9 |
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -39,7 +39,7 @@ env:
|
|||||||
DOCKERHUB_IMAGE_NAMESPACE: ${{ github.event.inputs.DOCKERHUB_IMAGE_NAMESPACE || github.actor }}
|
DOCKERHUB_IMAGE_NAMESPACE: ${{ github.event.inputs.DOCKERHUB_IMAGE_NAMESPACE || github.actor }}
|
||||||
GHCR_IMAGE_NAMESPACE: ${{ github.event.inputs.GHCR_IMAGE_NAMESPACE || github.actor }}
|
GHCR_IMAGE_NAMESPACE: ${{ github.event.inputs.GHCR_IMAGE_NAMESPACE || github.actor }}
|
||||||
SKIP_DOCKER_HUB: ${{ github.event.inputs.SKIP_DOCKER_HUB || 'false' }}
|
SKIP_DOCKER_HUB: ${{ github.event.inputs.SKIP_DOCKER_HUB || 'false' }}
|
||||||
SKIP_GHCR: ${{ github.event.inputs.SKIP_GHCR }}
|
SKIP_GHCR: ${{ github.event.inputs.SKIP_GHCR || 'false' }}
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
@@ -177,6 +177,9 @@ logger:
|
|||||||
path: "./runtime/log.txt"
|
path: "./runtime/log.txt"
|
||||||
level: "warn" #trace,debug,info,warn,error,fatal
|
level: "warn" #trace,debug,info,warn,error,fatal
|
||||||
report-caller: true
|
report-caller: true
|
||||||
|
proxy:
|
||||||
|
enable: false
|
||||||
|
host: ""
|
||||||
```
|
```
|
||||||
|
|
||||||
### 环境变量
|
### 环境变量
|
||||||
@@ -204,6 +207,10 @@ logger:
|
|||||||
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk的relay服务器地址 | 192.168.1.66:21117 |
|
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk的relay服务器地址 | 192.168.1.66:21117 |
|
||||||
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk的api服务器地址 | http://192.168.1.66:21114 |
|
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk的api服务器地址 | http://192.168.1.66:21114 |
|
||||||
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk的key | 123456789 |
|
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk的key | 123456789 |
|
||||||
|
| ----PROXY配置----- | --------------- | ---------- |
|
||||||
|
| RUSTDESK_API_PROXY_ENABLE | 是否启用代理:`false`, `true` | `false` |
|
||||||
|
| RUSTDESK_API_PROXY_HOST | 代理地址 | `http://127.0.0.1:1080` |
|
||||||
|
|
||||||
|
|
||||||
### 运行
|
### 运行
|
||||||
|
|
||||||
|
|||||||
@@ -210,6 +210,9 @@ The prefix for variable names is `RUSTDESK_API`. If environment variables exist,
|
|||||||
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk relay server address | 192.168.1.66:21117 |
|
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk relay server address | 192.168.1.66:21117 |
|
||||||
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk API server address | http://192.168.1.66:21114 |
|
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk API server address | http://192.168.1.66:21114 |
|
||||||
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk key | 123456789 |
|
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk key | 123456789 |
|
||||||
|
| ---- PROXY ----- | --------------- | ---------- |
|
||||||
|
| RUSTDESK_API_PROXY_ENABLE | proxy_enable :`false`, `true` | `false` |
|
||||||
|
| RUSTDESK_API_PROXY_HOST | proxy_host | `http://127.0.0.1:1080` |
|
||||||
|
|
||||||
### Installation Steps
|
### Installation Steps
|
||||||
|
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ func getTranslatorForLang(lang string) ut.Translator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
func DatabaseAutoUpdate() {
|
func DatabaseAutoUpdate() {
|
||||||
version := 220
|
version := 235
|
||||||
|
|
||||||
db := global.DB
|
db := global.DB
|
||||||
|
|
||||||
@@ -262,6 +262,8 @@ func Migrate(version uint) {
|
|||||||
&model.Oauth{},
|
&model.Oauth{},
|
||||||
&model.LoginLog{},
|
&model.LoginLog{},
|
||||||
&model.ShareRecord{},
|
&model.ShareRecord{},
|
||||||
|
&model.AuditConn{},
|
||||||
|
&model.AuditFile{},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("migrate err :=>", err)
|
fmt.Println("migrate err :=>", err)
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ logger:
|
|||||||
path: "./runtime/log.txt"
|
path: "./runtime/log.txt"
|
||||||
level: "warn" #trace,debug,info,warn,error,fatal
|
level: "warn" #trace,debug,info,warn,error,fatal
|
||||||
report-caller: true
|
report-caller: true
|
||||||
|
proxy:
|
||||||
|
enable: false
|
||||||
|
host: ""
|
||||||
redis:
|
redis:
|
||||||
addr: "127.0.0.1:6379"
|
addr: "127.0.0.1:6379"
|
||||||
password: ""
|
password: ""
|
||||||
@@ -44,4 +47,4 @@ oss:
|
|||||||
max-byte: 10240
|
max-byte: 10240
|
||||||
jwt:
|
jwt:
|
||||||
private-key: "./conf/jwt_pri.pem"
|
private-key: "./conf/jwt_pri.pem"
|
||||||
expire-duration: 360000
|
expire-duration: 360000
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ type Config struct {
|
|||||||
Oss Oss
|
Oss Oss
|
||||||
Jwt Jwt
|
Jwt Jwt
|
||||||
Rustdesk Rustdesk
|
Rustdesk Rustdesk
|
||||||
|
Proxy Proxy
|
||||||
}
|
}
|
||||||
|
|
||||||
// Init 初始化配置
|
// Init 初始化配置
|
||||||
|
|||||||
6
config/proxy.go
Normal file
6
config/proxy.go
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
type Proxy struct {
|
||||||
|
Enable bool `mapstructure:"enable"`
|
||||||
|
Host string `mapstructure:"host"`
|
||||||
|
}
|
||||||
@@ -380,6 +380,123 @@ const docTemplateadmin = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/admin/audit_conn/delete": {
|
||||||
|
"post": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"token": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "文件日志删除",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"文件日志"
|
||||||
|
],
|
||||||
|
"summary": "文件日志删除",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "文件日志信息",
|
||||||
|
"name": "body",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/model.AuditFile"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/admin/audit_conn/list": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"token": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "文件日志列表",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"文件日志"
|
||||||
|
],
|
||||||
|
"summary": "文件日志列表",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "页码",
|
||||||
|
"name": "page",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "页大小",
|
||||||
|
"name": "page_size",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "目标设备",
|
||||||
|
"name": "peer_id",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "来源设备",
|
||||||
|
"name": "from_peer",
|
||||||
|
"in": "query"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"allOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"data": {
|
||||||
|
"$ref": "#/definitions/model.AuditFileList"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/admin/file/oss_token": {
|
"/admin/file/oss_token": {
|
||||||
"get": {
|
"get": {
|
||||||
"security": [
|
"security": [
|
||||||
@@ -2449,6 +2566,9 @@ const docTemplateadmin = `{
|
|||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -2744,6 +2864,134 @@ const docTemplateadmin = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"model.AuditConn": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"action": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"close_time": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"conn_id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"created_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"from_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"from_peer": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ip": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"peer_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"session_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"updated_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"uuid": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"model.AuditConnList": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"list": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/model.AuditConn"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"page_size": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"model.AuditFile": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"created_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"from_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"from_peer": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"info": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ip": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"is_file": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"num": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"peer_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"updated_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"uuid": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"model.AuditFileList": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"list": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/model.AuditFile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"page_size": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"model.Group": {
|
"model.Group": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|||||||
@@ -373,6 +373,123 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/admin/audit_conn/delete": {
|
||||||
|
"post": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"token": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "文件日志删除",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"文件日志"
|
||||||
|
],
|
||||||
|
"summary": "文件日志删除",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "文件日志信息",
|
||||||
|
"name": "body",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/model.AuditFile"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/admin/audit_conn/list": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"token": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "文件日志列表",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"文件日志"
|
||||||
|
],
|
||||||
|
"summary": "文件日志列表",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "页码",
|
||||||
|
"name": "page",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "页大小",
|
||||||
|
"name": "page_size",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "目标设备",
|
||||||
|
"name": "peer_id",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "来源设备",
|
||||||
|
"name": "from_peer",
|
||||||
|
"in": "query"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"allOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"data": {
|
||||||
|
"$ref": "#/definitions/model.AuditFileList"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/admin/file/oss_token": {
|
"/admin/file/oss_token": {
|
||||||
"get": {
|
"get": {
|
||||||
"security": [
|
"security": [
|
||||||
@@ -2442,6 +2559,9 @@
|
|||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -2737,6 +2857,134 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"model.AuditConn": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"action": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"close_time": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"conn_id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"created_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"from_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"from_peer": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ip": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"peer_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"session_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"updated_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"uuid": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"model.AuditConnList": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"list": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/model.AuditConn"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"page_size": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"model.AuditFile": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"created_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"from_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"from_peer": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"info": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ip": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"is_file": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"num": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"peer_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"updated_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"uuid": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"model.AuditFileList": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"list": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/model.AuditFile"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"page_size": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"total": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"model.Group": {
|
"model.Group": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ definitions:
|
|||||||
type: integer
|
type: integer
|
||||||
name:
|
name:
|
||||||
type: string
|
type: string
|
||||||
|
type:
|
||||||
|
type: integer
|
||||||
required:
|
required:
|
||||||
- name
|
- name
|
||||||
type: object
|
type: object
|
||||||
@@ -273,6 +275,90 @@ definitions:
|
|||||||
total:
|
total:
|
||||||
type: integer
|
type: integer
|
||||||
type: object
|
type: object
|
||||||
|
model.AuditConn:
|
||||||
|
properties:
|
||||||
|
action:
|
||||||
|
type: string
|
||||||
|
close_time:
|
||||||
|
type: integer
|
||||||
|
conn_id:
|
||||||
|
type: integer
|
||||||
|
created_at:
|
||||||
|
type: string
|
||||||
|
from_name:
|
||||||
|
type: string
|
||||||
|
from_peer:
|
||||||
|
type: string
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
ip:
|
||||||
|
type: string
|
||||||
|
peer_id:
|
||||||
|
type: string
|
||||||
|
session_id:
|
||||||
|
type: string
|
||||||
|
type:
|
||||||
|
type: integer
|
||||||
|
updated_at:
|
||||||
|
type: string
|
||||||
|
uuid:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
model.AuditConnList:
|
||||||
|
properties:
|
||||||
|
list:
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/model.AuditConn'
|
||||||
|
type: array
|
||||||
|
page:
|
||||||
|
type: integer
|
||||||
|
page_size:
|
||||||
|
type: integer
|
||||||
|
total:
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
|
model.AuditFile:
|
||||||
|
properties:
|
||||||
|
created_at:
|
||||||
|
type: string
|
||||||
|
from_name:
|
||||||
|
type: string
|
||||||
|
from_peer:
|
||||||
|
type: string
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
info:
|
||||||
|
type: string
|
||||||
|
ip:
|
||||||
|
type: string
|
||||||
|
is_file:
|
||||||
|
type: boolean
|
||||||
|
num:
|
||||||
|
type: integer
|
||||||
|
path:
|
||||||
|
type: string
|
||||||
|
peer_id:
|
||||||
|
type: string
|
||||||
|
type:
|
||||||
|
type: integer
|
||||||
|
updated_at:
|
||||||
|
type: string
|
||||||
|
uuid:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
model.AuditFileList:
|
||||||
|
properties:
|
||||||
|
list:
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/model.AuditFile'
|
||||||
|
type: array
|
||||||
|
page:
|
||||||
|
type: integer
|
||||||
|
page_size:
|
||||||
|
type: integer
|
||||||
|
total:
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
model.Group:
|
model.Group:
|
||||||
properties:
|
properties:
|
||||||
created_at:
|
created_at:
|
||||||
@@ -719,6 +805,77 @@ paths:
|
|||||||
summary: APP服务配置
|
summary: APP服务配置
|
||||||
tags:
|
tags:
|
||||||
- ADMIN
|
- ADMIN
|
||||||
|
/admin/audit_conn/delete:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 文件日志删除
|
||||||
|
parameters:
|
||||||
|
- description: 文件日志信息
|
||||||
|
in: body
|
||||||
|
name: body
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/model.AuditFile'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/response.Response'
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/response.Response'
|
||||||
|
security:
|
||||||
|
- token: []
|
||||||
|
summary: 文件日志删除
|
||||||
|
tags:
|
||||||
|
- 文件日志
|
||||||
|
/admin/audit_conn/list:
|
||||||
|
get:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 文件日志列表
|
||||||
|
parameters:
|
||||||
|
- description: 页码
|
||||||
|
in: query
|
||||||
|
name: page
|
||||||
|
type: integer
|
||||||
|
- description: 页大小
|
||||||
|
in: query
|
||||||
|
name: page_size
|
||||||
|
type: integer
|
||||||
|
- description: 目标设备
|
||||||
|
in: query
|
||||||
|
name: peer_id
|
||||||
|
type: integer
|
||||||
|
- description: 来源设备
|
||||||
|
in: query
|
||||||
|
name: from_peer
|
||||||
|
type: integer
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
allOf:
|
||||||
|
- $ref: '#/definitions/response.Response'
|
||||||
|
- properties:
|
||||||
|
data:
|
||||||
|
$ref: '#/definitions/model.AuditFileList'
|
||||||
|
type: object
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/response.Response'
|
||||||
|
security:
|
||||||
|
- token: []
|
||||||
|
summary: 文件日志列表
|
||||||
|
tags:
|
||||||
|
- 文件日志
|
||||||
/admin/file/oss_token:
|
/admin/file/oss_token:
|
||||||
get:
|
get:
|
||||||
consumes:
|
consumes:
|
||||||
|
|||||||
@@ -121,40 +121,6 @@ const docTemplateapi = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/ab/add": {
|
|
||||||
"post": {
|
|
||||||
"security": [
|
|
||||||
{
|
|
||||||
"BearerAuth": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "标签",
|
|
||||||
"consumes": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"地址[Personal]"
|
|
||||||
],
|
|
||||||
"summary": "标签添加",
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "OK",
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"500": {
|
|
||||||
"description": "Internal Server Error",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/response.ErrorResponse"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/ab/peer/add/{guid}": {
|
"/ab/peer/add/{guid}": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
@@ -176,8 +142,8 @@ const docTemplateapi = `{
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "id",
|
"description": "guid",
|
||||||
"name": "id",
|
"name": "guid",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true
|
"required": true
|
||||||
}
|
}
|
||||||
@@ -217,8 +183,8 @@ const docTemplateapi = `{
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "id",
|
"description": "guid",
|
||||||
"name": "id",
|
"name": "guid",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true
|
"required": true
|
||||||
}
|
}
|
||||||
@@ -260,8 +226,8 @@ const docTemplateapi = `{
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "id",
|
"description": "guid",
|
||||||
"name": "id",
|
"name": "guid",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true
|
"required": true
|
||||||
}
|
}
|
||||||
@@ -302,12 +268,22 @@ const docTemplateapi = `{
|
|||||||
"summary": "地址列表",
|
"summary": "地址列表",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "string valid",
|
"type": "integer",
|
||||||
"name": "string",
|
"description": "页码",
|
||||||
"in": "body",
|
"name": "current",
|
||||||
"schema": {
|
"in": "query"
|
||||||
"type": "string"
|
},
|
||||||
}
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "每页数量",
|
||||||
|
"name": "pageSize",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "guid",
|
||||||
|
"name": "ab",
|
||||||
|
"in": "query"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
@@ -434,12 +410,16 @@ const docTemplateapi = `{
|
|||||||
"summary": "共享地址簿",
|
"summary": "共享地址簿",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "string valid",
|
"type": "integer",
|
||||||
"name": "string",
|
"description": "页码",
|
||||||
"in": "body",
|
"name": "current",
|
||||||
"schema": {
|
"in": "query"
|
||||||
"type": "string"
|
},
|
||||||
}
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "每页数量",
|
||||||
|
"name": "pageSize",
|
||||||
|
"in": "query"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
@@ -458,6 +438,49 @@ const docTemplateapi = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/ab/tag/add/{guid}": {
|
||||||
|
"post": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"BearerAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "标签",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"地址[Personal]"
|
||||||
|
],
|
||||||
|
"summary": "标签添加",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "guid",
|
||||||
|
"name": "guid",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.ErrorResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/ab/tag/rename/{guid}": {
|
"/ab/tag/rename/{guid}": {
|
||||||
"put": {
|
"put": {
|
||||||
"security": [
|
"security": [
|
||||||
@@ -476,6 +499,15 @@ const docTemplateapi = `{
|
|||||||
"地址[Personal]"
|
"地址[Personal]"
|
||||||
],
|
],
|
||||||
"summary": "标签重命名",
|
"summary": "标签重命名",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "guid",
|
||||||
|
"name": "guid",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "OK",
|
"description": "OK",
|
||||||
@@ -510,6 +542,15 @@ const docTemplateapi = `{
|
|||||||
"地址[Personal]"
|
"地址[Personal]"
|
||||||
],
|
],
|
||||||
"summary": "标签修改颜色",
|
"summary": "标签修改颜色",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "guid",
|
||||||
|
"name": "guid",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "OK",
|
"description": "OK",
|
||||||
@@ -544,6 +585,15 @@ const docTemplateapi = `{
|
|||||||
"地址[Personal]"
|
"地址[Personal]"
|
||||||
],
|
],
|
||||||
"summary": "标签删除",
|
"summary": "标签删除",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "guid",
|
||||||
|
"name": "guid",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "OK",
|
"description": "OK",
|
||||||
@@ -581,8 +631,8 @@ const docTemplateapi = `{
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "id",
|
"description": "guid",
|
||||||
"name": "id",
|
"name": "guid",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true
|
"required": true
|
||||||
}
|
}
|
||||||
@@ -637,6 +687,86 @@ const docTemplateapi = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/audit/conn": {
|
||||||
|
"post": {
|
||||||
|
"description": "审计连接",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"审计"
|
||||||
|
],
|
||||||
|
"summary": "审计连接",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "审计连接",
|
||||||
|
"name": "body",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/api.AuditConnForm"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/audit/file": {
|
||||||
|
"post": {
|
||||||
|
"description": "审计文件",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"审计"
|
||||||
|
],
|
||||||
|
"summary": "审计文件",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "审计文件",
|
||||||
|
"name": "body",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/api.AuditFileForm"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/heartbeat": {
|
"/heartbeat": {
|
||||||
"post": {
|
"post": {
|
||||||
"description": "心跳",
|
"description": "心跳",
|
||||||
@@ -1137,6 +1267,64 @@ const docTemplateapi = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"api.AuditConnForm": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"action": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conn_id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ip": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"peer": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"session_id": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"uuid": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"api.AuditFileForm": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"info": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"is_file": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"peer_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"uuid": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"api.DeviceInfoInLogin": {
|
"api.DeviceInfoInLogin": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|||||||
@@ -114,40 +114,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/ab/add": {
|
|
||||||
"post": {
|
|
||||||
"security": [
|
|
||||||
{
|
|
||||||
"BearerAuth": []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "标签",
|
|
||||||
"consumes": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"produces": [
|
|
||||||
"application/json"
|
|
||||||
],
|
|
||||||
"tags": [
|
|
||||||
"地址[Personal]"
|
|
||||||
],
|
|
||||||
"summary": "标签添加",
|
|
||||||
"responses": {
|
|
||||||
"200": {
|
|
||||||
"description": "OK",
|
|
||||||
"schema": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"500": {
|
|
||||||
"description": "Internal Server Error",
|
|
||||||
"schema": {
|
|
||||||
"$ref": "#/definitions/response.ErrorResponse"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"/ab/peer/add/{guid}": {
|
"/ab/peer/add/{guid}": {
|
||||||
"post": {
|
"post": {
|
||||||
"security": [
|
"security": [
|
||||||
@@ -169,8 +135,8 @@
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "id",
|
"description": "guid",
|
||||||
"name": "id",
|
"name": "guid",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true
|
"required": true
|
||||||
}
|
}
|
||||||
@@ -210,8 +176,8 @@
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "id",
|
"description": "guid",
|
||||||
"name": "id",
|
"name": "guid",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true
|
"required": true
|
||||||
}
|
}
|
||||||
@@ -253,8 +219,8 @@
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "id",
|
"description": "guid",
|
||||||
"name": "id",
|
"name": "guid",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true
|
"required": true
|
||||||
}
|
}
|
||||||
@@ -295,12 +261,22 @@
|
|||||||
"summary": "地址列表",
|
"summary": "地址列表",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "string valid",
|
"type": "integer",
|
||||||
"name": "string",
|
"description": "页码",
|
||||||
"in": "body",
|
"name": "current",
|
||||||
"schema": {
|
"in": "query"
|
||||||
"type": "string"
|
},
|
||||||
}
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "每页数量",
|
||||||
|
"name": "pageSize",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "guid",
|
||||||
|
"name": "ab",
|
||||||
|
"in": "query"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
@@ -427,12 +403,16 @@
|
|||||||
"summary": "共享地址簿",
|
"summary": "共享地址簿",
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"description": "string valid",
|
"type": "integer",
|
||||||
"name": "string",
|
"description": "页码",
|
||||||
"in": "body",
|
"name": "current",
|
||||||
"schema": {
|
"in": "query"
|
||||||
"type": "string"
|
},
|
||||||
}
|
{
|
||||||
|
"type": "integer",
|
||||||
|
"description": "每页数量",
|
||||||
|
"name": "pageSize",
|
||||||
|
"in": "query"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
@@ -451,6 +431,49 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/ab/tag/add/{guid}": {
|
||||||
|
"post": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"BearerAuth": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "标签",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"地址[Personal]"
|
||||||
|
],
|
||||||
|
"summary": "标签添加",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "guid",
|
||||||
|
"name": "guid",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.ErrorResponse"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/ab/tag/rename/{guid}": {
|
"/ab/tag/rename/{guid}": {
|
||||||
"put": {
|
"put": {
|
||||||
"security": [
|
"security": [
|
||||||
@@ -469,6 +492,15 @@
|
|||||||
"地址[Personal]"
|
"地址[Personal]"
|
||||||
],
|
],
|
||||||
"summary": "标签重命名",
|
"summary": "标签重命名",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "guid",
|
||||||
|
"name": "guid",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "OK",
|
"description": "OK",
|
||||||
@@ -503,6 +535,15 @@
|
|||||||
"地址[Personal]"
|
"地址[Personal]"
|
||||||
],
|
],
|
||||||
"summary": "标签修改颜色",
|
"summary": "标签修改颜色",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "guid",
|
||||||
|
"name": "guid",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "OK",
|
"description": "OK",
|
||||||
@@ -537,6 +578,15 @@
|
|||||||
"地址[Personal]"
|
"地址[Personal]"
|
||||||
],
|
],
|
||||||
"summary": "标签删除",
|
"summary": "标签删除",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "guid",
|
||||||
|
"name": "guid",
|
||||||
|
"in": "path",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "OK",
|
"description": "OK",
|
||||||
@@ -574,8 +624,8 @@
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "id",
|
"description": "guid",
|
||||||
"name": "id",
|
"name": "guid",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true
|
"required": true
|
||||||
}
|
}
|
||||||
@@ -630,6 +680,86 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/audit/conn": {
|
||||||
|
"post": {
|
||||||
|
"description": "审计连接",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"审计"
|
||||||
|
],
|
||||||
|
"summary": "审计连接",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "审计连接",
|
||||||
|
"name": "body",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/api.AuditConnForm"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/audit/file": {
|
||||||
|
"post": {
|
||||||
|
"description": "审计文件",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"审计"
|
||||||
|
],
|
||||||
|
"summary": "审计文件",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "审计文件",
|
||||||
|
"name": "body",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/api.AuditFileForm"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/response.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/heartbeat": {
|
"/heartbeat": {
|
||||||
"post": {
|
"post": {
|
||||||
"description": "心跳",
|
"description": "心跳",
|
||||||
@@ -1130,6 +1260,64 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"api.AuditConnForm": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"action": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conn_id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ip": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"peer": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"session_id": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"uuid": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"api.AuditFileForm": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"info": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"is_file": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"peer_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"uuid": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"api.DeviceInfoInLogin": {
|
"api.DeviceInfoInLogin": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|||||||
@@ -6,6 +6,44 @@ definitions:
|
|||||||
example: '{"tags":["tag1","tag2","tag3"],"peers":[{"id":"abc","username":"abv-l","hostname":"","platform":"Windows","alias":"","tags":["tag1","tag2"],"hash":"hash"}],"tag_colors":"{\"tag1\":4288585374,\"tag2\":4278238420,\"tag3\":4291681337}"}'
|
example: '{"tags":["tag1","tag2","tag3"],"peers":[{"id":"abc","username":"abv-l","hostname":"","platform":"Windows","alias":"","tags":["tag1","tag2"],"hash":"hash"}],"tag_colors":"{\"tag1\":4288585374,\"tag2\":4278238420,\"tag3\":4291681337}"}'
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
|
api.AuditConnForm:
|
||||||
|
properties:
|
||||||
|
action:
|
||||||
|
type: string
|
||||||
|
conn_id:
|
||||||
|
type: integer
|
||||||
|
id:
|
||||||
|
type: string
|
||||||
|
ip:
|
||||||
|
type: string
|
||||||
|
peer:
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
session_id:
|
||||||
|
type: number
|
||||||
|
type:
|
||||||
|
type: integer
|
||||||
|
uuid:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
api.AuditFileForm:
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: string
|
||||||
|
info:
|
||||||
|
type: string
|
||||||
|
is_file:
|
||||||
|
type: boolean
|
||||||
|
path:
|
||||||
|
type: string
|
||||||
|
peer_id:
|
||||||
|
type: string
|
||||||
|
type:
|
||||||
|
type: integer
|
||||||
|
uuid:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
api.DeviceInfoInLogin:
|
api.DeviceInfoInLogin:
|
||||||
properties:
|
properties:
|
||||||
name:
|
name:
|
||||||
@@ -208,36 +246,15 @@ paths:
|
|||||||
summary: 地址更新
|
summary: 地址更新
|
||||||
tags:
|
tags:
|
||||||
- 地址
|
- 地址
|
||||||
/ab/add:
|
|
||||||
post:
|
|
||||||
consumes:
|
|
||||||
- application/json
|
|
||||||
description: 标签
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: OK
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
"500":
|
|
||||||
description: Internal Server Error
|
|
||||||
schema:
|
|
||||||
$ref: '#/definitions/response.ErrorResponse'
|
|
||||||
security:
|
|
||||||
- BearerAuth: []
|
|
||||||
summary: 标签添加
|
|
||||||
tags:
|
|
||||||
- 地址[Personal]
|
|
||||||
/ab/peer/add/{guid}:
|
/ab/peer/add/{guid}:
|
||||||
delete:
|
delete:
|
||||||
consumes:
|
consumes:
|
||||||
- application/json
|
- application/json
|
||||||
description: 删除地址
|
description: 删除地址
|
||||||
parameters:
|
parameters:
|
||||||
- description: id
|
- description: guid
|
||||||
in: path
|
in: path
|
||||||
name: id
|
name: guid
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
produces:
|
produces:
|
||||||
@@ -261,9 +278,9 @@ paths:
|
|||||||
- application/json
|
- application/json
|
||||||
description: 添加地址
|
description: 添加地址
|
||||||
parameters:
|
parameters:
|
||||||
- description: id
|
- description: guid
|
||||||
in: path
|
in: path
|
||||||
name: id
|
name: guid
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
produces:
|
produces:
|
||||||
@@ -288,9 +305,9 @@ paths:
|
|||||||
- application/json
|
- application/json
|
||||||
description: 更新地址
|
description: 更新地址
|
||||||
parameters:
|
parameters:
|
||||||
- description: id
|
- description: guid
|
||||||
in: path
|
in: path
|
||||||
name: id
|
name: guid
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
produces:
|
produces:
|
||||||
@@ -315,11 +332,18 @@ paths:
|
|||||||
- application/json
|
- application/json
|
||||||
description: 地址
|
description: 地址
|
||||||
parameters:
|
parameters:
|
||||||
- description: string valid
|
- description: 页码
|
||||||
in: body
|
in: query
|
||||||
name: string
|
name: current
|
||||||
schema:
|
type: integer
|
||||||
type: string
|
- description: 每页数量
|
||||||
|
in: query
|
||||||
|
name: pageSize
|
||||||
|
type: integer
|
||||||
|
- description: guid
|
||||||
|
in: query
|
||||||
|
name: ab
|
||||||
|
type: string
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
@@ -396,11 +420,14 @@ paths:
|
|||||||
- application/json
|
- application/json
|
||||||
description: 共享
|
description: 共享
|
||||||
parameters:
|
parameters:
|
||||||
- description: string valid
|
- description: 页码
|
||||||
in: body
|
in: query
|
||||||
name: string
|
name: current
|
||||||
schema:
|
type: integer
|
||||||
type: string
|
- description: 每页数量
|
||||||
|
in: query
|
||||||
|
name: pageSize
|
||||||
|
type: integer
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
@@ -422,6 +449,12 @@ paths:
|
|||||||
consumes:
|
consumes:
|
||||||
- application/json
|
- application/json
|
||||||
description: 标签
|
description: 标签
|
||||||
|
parameters:
|
||||||
|
- description: guid
|
||||||
|
in: path
|
||||||
|
name: guid
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
@@ -438,11 +471,44 @@ paths:
|
|||||||
summary: 标签删除
|
summary: 标签删除
|
||||||
tags:
|
tags:
|
||||||
- 地址[Personal]
|
- 地址[Personal]
|
||||||
|
/ab/tag/add/{guid}:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 标签
|
||||||
|
parameters:
|
||||||
|
- description: guid
|
||||||
|
in: path
|
||||||
|
name: guid
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/response.ErrorResponse'
|
||||||
|
security:
|
||||||
|
- BearerAuth: []
|
||||||
|
summary: 标签添加
|
||||||
|
tags:
|
||||||
|
- 地址[Personal]
|
||||||
/ab/tag/rename/{guid}:
|
/ab/tag/rename/{guid}:
|
||||||
put:
|
put:
|
||||||
consumes:
|
consumes:
|
||||||
- application/json
|
- application/json
|
||||||
description: 标签
|
description: 标签
|
||||||
|
parameters:
|
||||||
|
- description: guid
|
||||||
|
in: path
|
||||||
|
name: guid
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
@@ -464,6 +530,12 @@ paths:
|
|||||||
consumes:
|
consumes:
|
||||||
- application/json
|
- application/json
|
||||||
description: 标签
|
description: 标签
|
||||||
|
parameters:
|
||||||
|
- description: guid
|
||||||
|
in: path
|
||||||
|
name: guid
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
produces:
|
produces:
|
||||||
- application/json
|
- application/json
|
||||||
responses:
|
responses:
|
||||||
@@ -486,9 +558,9 @@ paths:
|
|||||||
- application/json
|
- application/json
|
||||||
description: 标签
|
description: 标签
|
||||||
parameters:
|
parameters:
|
||||||
- description: id
|
- description: guid
|
||||||
in: path
|
in: path
|
||||||
name: id
|
name: guid
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
produces:
|
produces:
|
||||||
@@ -528,6 +600,58 @@ paths:
|
|||||||
summary: 用户信息
|
summary: 用户信息
|
||||||
tags:
|
tags:
|
||||||
- 用户
|
- 用户
|
||||||
|
/audit/conn:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 审计连接
|
||||||
|
parameters:
|
||||||
|
- description: 审计连接
|
||||||
|
in: body
|
||||||
|
name: body
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/api.AuditConnForm'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/response.Response'
|
||||||
|
summary: 审计连接
|
||||||
|
tags:
|
||||||
|
- 审计
|
||||||
|
/audit/file:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: 审计文件
|
||||||
|
parameters:
|
||||||
|
- description: 审计文件
|
||||||
|
in: body
|
||||||
|
name: body
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/api.AuditFileForm'
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/response.Response'
|
||||||
|
summary: 审计文件
|
||||||
|
tags:
|
||||||
|
- 审计
|
||||||
/heartbeat:
|
/heartbeat:
|
||||||
post:
|
post:
|
||||||
consumes:
|
consumes:
|
||||||
|
|||||||
148
http/controller/admin/audit.go
Normal file
148
http/controller/admin/audit.go
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
package admin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Gwen/global"
|
||||||
|
"Gwen/http/request/admin"
|
||||||
|
"Gwen/http/response"
|
||||||
|
"Gwen/model"
|
||||||
|
"Gwen/service"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Audit struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// ConnList 列表
|
||||||
|
// @Tags 链接日志
|
||||||
|
// @Summary 链接日志列表
|
||||||
|
// @Description 链接日志列表
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param page query int false "页码"
|
||||||
|
// @Param page_size query int false "页大小"
|
||||||
|
// @Param peer_id query int false "目标设备"
|
||||||
|
// @Param from_peer query int false "来源设备"
|
||||||
|
// @Success 200 {object} response.Response{data=model.AuditConnList}
|
||||||
|
// @Failure 500 {object} response.Response
|
||||||
|
// @Router /admin/audit_conn/list [get]
|
||||||
|
// @Security token
|
||||||
|
func (a *Audit) ConnList(c *gin.Context) {
|
||||||
|
query := &admin.AuditQuery{}
|
||||||
|
if err := c.ShouldBindQuery(query); err != nil {
|
||||||
|
response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
res := service.AllService.AuditService.AuditConnList(query.Page, query.PageSize, func(tx *gorm.DB) {
|
||||||
|
if query.PeerId != "" {
|
||||||
|
tx.Where("peer_id like ?", "%"+query.PeerId+"%")
|
||||||
|
}
|
||||||
|
if query.FromPeer != "" {
|
||||||
|
tx.Where("from_peer like ?", "%"+query.FromPeer+"%")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
response.Success(c, res)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ConnDelete 删除
|
||||||
|
// @Tags 链接日志
|
||||||
|
// @Summary 链接日志删除
|
||||||
|
// @Description 链接日志删除
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param body body model.AuditConn true "链接日志信息"
|
||||||
|
// @Success 200 {object} response.Response
|
||||||
|
// @Failure 500 {object} response.Response
|
||||||
|
// @Router /admin/audit_conn/delete [post]
|
||||||
|
// @Security token
|
||||||
|
func (a *Audit) ConnDelete(c *gin.Context) {
|
||||||
|
f := &model.AuditConn{}
|
||||||
|
if err := c.ShouldBindJSON(f); err != nil {
|
||||||
|
response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
id := f.Id
|
||||||
|
errList := global.Validator.ValidVar(c, id, "required,gt=0")
|
||||||
|
if len(errList) > 0 {
|
||||||
|
response.Fail(c, 101, errList[0])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
l := service.AllService.AuditService.ConnInfoById(f.Id)
|
||||||
|
if l.Id > 0 {
|
||||||
|
err := service.AllService.AuditService.DeleteAuditConn(l)
|
||||||
|
if err == nil {
|
||||||
|
response.Success(c, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Fail(c, 101, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FileList 列表
|
||||||
|
// @Tags 文件日志
|
||||||
|
// @Summary 文件日志列表
|
||||||
|
// @Description 文件日志列表
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param page query int false "页码"
|
||||||
|
// @Param page_size query int false "页大小"
|
||||||
|
// @Param peer_id query int false "目标设备"
|
||||||
|
// @Param from_peer query int false "来源设备"
|
||||||
|
// @Success 200 {object} response.Response{data=model.AuditFileList}
|
||||||
|
// @Failure 500 {object} response.Response
|
||||||
|
// @Router /admin/audit_conn/list [get]
|
||||||
|
// @Security token
|
||||||
|
func (a *Audit) FileList(c *gin.Context) {
|
||||||
|
query := &admin.AuditQuery{}
|
||||||
|
if err := c.ShouldBindQuery(query); err != nil {
|
||||||
|
response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
res := service.AllService.AuditService.AuditFileList(query.Page, query.PageSize, func(tx *gorm.DB) {
|
||||||
|
if query.PeerId != "" {
|
||||||
|
tx.Where("peer_id like ?", "%"+query.PeerId+"%")
|
||||||
|
}
|
||||||
|
if query.FromPeer != "" {
|
||||||
|
tx.Where("from_peer like ?", "%"+query.FromPeer+"%")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
response.Success(c, res)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FileDelete 删除
|
||||||
|
// @Tags 文件日志
|
||||||
|
// @Summary 文件日志删除
|
||||||
|
// @Description 文件日志删除
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param body body model.AuditFile true "文件日志信息"
|
||||||
|
// @Success 200 {object} response.Response
|
||||||
|
// @Failure 500 {object} response.Response
|
||||||
|
// @Router /admin/audit_conn/delete [post]
|
||||||
|
// @Security token
|
||||||
|
func (a *Audit) FileDelete(c *gin.Context) {
|
||||||
|
f := &model.AuditFile{}
|
||||||
|
if err := c.ShouldBindJSON(f); err != nil {
|
||||||
|
response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
id := f.Id
|
||||||
|
errList := global.Validator.ValidVar(c, id, "required,gt=0")
|
||||||
|
if len(errList) > 0 {
|
||||||
|
response.Fail(c, 101, errList[0])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
l := service.AllService.AuditService.FileInfoById(f.Id)
|
||||||
|
if l.Id > 0 {
|
||||||
|
err := service.AllService.AuditService.DeleteAuditFile(l)
|
||||||
|
if err == nil {
|
||||||
|
response.Success(c, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Fail(c, 101, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
|
||||||
|
}
|
||||||
@@ -118,9 +118,10 @@ func (a *Ab) Tags(c *gin.Context) {
|
|||||||
// @Description 标签
|
// @Description 标签
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
|
// @Param guid path string true "guid"
|
||||||
// @Success 200 {string} string
|
// @Success 200 {string} string
|
||||||
// @Failure 500 {object} response.ErrorResponse
|
// @Failure 500 {object} response.ErrorResponse
|
||||||
// @Router /ab/add [post]
|
// @Router /ab/tag/add/{guid} [post]
|
||||||
// @Security BearerAuth
|
// @Security BearerAuth
|
||||||
func (a *Ab) TagAdd(c *gin.Context) {
|
func (a *Ab) TagAdd(c *gin.Context) {
|
||||||
t := &model.Tag{}
|
t := &model.Tag{}
|
||||||
@@ -150,6 +151,7 @@ func (a *Ab) TagAdd(c *gin.Context) {
|
|||||||
// @Description 标签
|
// @Description 标签
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
|
// @Param guid path string true "guid"
|
||||||
// @Success 200 {string} string
|
// @Success 200 {string} string
|
||||||
// @Failure 500 {object} response.ErrorResponse
|
// @Failure 500 {object} response.ErrorResponse
|
||||||
// @Router /ab/tag/rename/{guid} [put]
|
// @Router /ab/tag/rename/{guid} [put]
|
||||||
@@ -187,6 +189,7 @@ func (a *Ab) TagRename(c *gin.Context) {
|
|||||||
// @Description 标签
|
// @Description 标签
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
|
// @Param guid path string true "guid"
|
||||||
// @Success 200 {string} string
|
// @Success 200 {string} string
|
||||||
// @Failure 500 {object} response.ErrorResponse
|
// @Failure 500 {object} response.ErrorResponse
|
||||||
// @Router /ab/tag/update/{guid} [put]
|
// @Router /ab/tag/update/{guid} [put]
|
||||||
@@ -219,6 +222,7 @@ func (a *Ab) TagUpdate(c *gin.Context) {
|
|||||||
// @Description 标签
|
// @Description 标签
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
|
// @Param guid path string true "guid"
|
||||||
// @Success 200 {string} string
|
// @Success 200 {string} string
|
||||||
// @Failure 500 {object} response.ErrorResponse
|
// @Failure 500 {object} response.ErrorResponse
|
||||||
// @Router /ab/tag/{guid} [delete]
|
// @Router /ab/tag/{guid} [delete]
|
||||||
@@ -273,7 +277,7 @@ func (a *Ab) Personal(c *gin.Context) {
|
|||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"guid": guid,
|
"guid": guid,
|
||||||
"name": user.Username,
|
"name": user.Username,
|
||||||
"rule": 0,
|
"rule": 3,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
c.JSON(http.StatusOK, nil)
|
c.JSON(http.StatusOK, nil)
|
||||||
@@ -304,7 +308,8 @@ func (a *Ab) Settings(c *gin.Context) {
|
|||||||
// @Description 共享
|
// @Description 共享
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
// @Param string body string false "string valid"
|
// @Param current query int false "页码"
|
||||||
|
// @Param pageSize query int false "每页数量"
|
||||||
// @Success 200 {object} response.Response
|
// @Success 200 {object} response.Response
|
||||||
// @Failure 500 {object} response.Response
|
// @Failure 500 {object} response.Response
|
||||||
// @Router /ab/shared/profiles [post]
|
// @Router /ab/shared/profiles [post]
|
||||||
@@ -322,14 +327,14 @@ func (a *Ab) SharedProfiles(c *gin.Context) {
|
|||||||
"name": "admin",
|
"name": "admin",
|
||||||
"owner": "admin",
|
"owner": "admin",
|
||||||
"note": "admin11",
|
"note": "admin11",
|
||||||
"rule": 0,
|
"rule": 3,
|
||||||
}
|
}
|
||||||
item2 := map[string]interface{}{
|
item2 := map[string]interface{}{
|
||||||
"guid": "2",
|
"guid": "2",
|
||||||
"name": "admin2",
|
"name": "admin2",
|
||||||
"owner": "admin2",
|
"owner": "admin2",
|
||||||
"note": "admin22",
|
"note": "admin22",
|
||||||
"rule": 0,
|
"rule": 2,
|
||||||
}
|
}
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"total": 2,
|
"total": 2,
|
||||||
@@ -348,7 +353,9 @@ func (a *Ab) SharedProfiles(c *gin.Context) {
|
|||||||
// @Description 地址
|
// @Description 地址
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
// @Param string body string false "string valid"
|
// @Param current query int false "页码"
|
||||||
|
// @Param pageSize query int false "每页数量"
|
||||||
|
// @Param ab query string false "guid"
|
||||||
// @Success 200 {object} response.Response
|
// @Success 200 {object} response.Response
|
||||||
// @Failure 500 {object} response.Response
|
// @Failure 500 {object} response.Response
|
||||||
// @Router /ab/peers [post]
|
// @Router /ab/peers [post]
|
||||||
@@ -369,7 +376,7 @@ func (a *Ab) Peers(c *gin.Context) {
|
|||||||
// @Description 标签
|
// @Description 标签
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
// @Param id path string true "id"
|
// @Param guid path string true "guid"
|
||||||
// @Success 200 {object} model.TagList
|
// @Success 200 {object} model.TagList
|
||||||
// @Failure 500 {object} response.ErrorResponse
|
// @Failure 500 {object} response.ErrorResponse
|
||||||
// @Router /ab/tags/{guid} [post]
|
// @Router /ab/tags/{guid} [post]
|
||||||
@@ -387,7 +394,7 @@ func (a *Ab) PTags(c *gin.Context) {
|
|||||||
// @Description 添加地址
|
// @Description 添加地址
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
// @Param id path string true "id"
|
// @Param guid path string true "guid"
|
||||||
// @Success 200 {string} string
|
// @Success 200 {string} string
|
||||||
// @Failure 500 {object} response.ErrorResponse
|
// @Failure 500 {object} response.ErrorResponse
|
||||||
// @Router /ab/peer/add/{guid} [post]
|
// @Router /ab/peer/add/{guid} [post]
|
||||||
@@ -395,6 +402,7 @@ func (a *Ab) PTags(c *gin.Context) {
|
|||||||
func (a *Ab) PeerAdd(c *gin.Context) {
|
func (a *Ab) PeerAdd(c *gin.Context) {
|
||||||
// forceAlwaysRelay永远是字符串"false"
|
// forceAlwaysRelay永远是字符串"false"
|
||||||
//f := &gin.H{}
|
//f := &gin.H{}
|
||||||
|
//guid := c.Param("guid")
|
||||||
f := &requstform.PersonalAddressBookForm{}
|
f := &requstform.PersonalAddressBookForm{}
|
||||||
err := c.ShouldBindJSON(f)
|
err := c.ShouldBindJSON(f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -429,7 +437,7 @@ func (a *Ab) PeerAdd(c *gin.Context) {
|
|||||||
// @Description 删除地址
|
// @Description 删除地址
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
// @Param id path string true "id"
|
// @Param guid path string true "guid"
|
||||||
// @Success 200 {string} string
|
// @Success 200 {string} string
|
||||||
// @Failure 500 {object} response.ErrorResponse
|
// @Failure 500 {object} response.ErrorResponse
|
||||||
// @Router /ab/peer/add/{guid} [delete]
|
// @Router /ab/peer/add/{guid} [delete]
|
||||||
@@ -464,7 +472,7 @@ func (a *Ab) PeerDel(c *gin.Context) {
|
|||||||
// @Description 更新地址
|
// @Description 更新地址
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
// @Param id path string true "id"
|
// @Param guid path string true "guid"
|
||||||
// @Success 200 {string} string
|
// @Success 200 {string} string
|
||||||
// @Failure 500 {object} response.ErrorResponse
|
// @Failure 500 {object} response.ErrorResponse
|
||||||
// @Router /ab/peer/update/{guid} [put]
|
// @Router /ab/peer/update/{guid} [put]
|
||||||
|
|||||||
84
http/controller/api/audit.go
Normal file
84
http/controller/api/audit.go
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
request "Gwen/http/request/api"
|
||||||
|
"Gwen/http/response"
|
||||||
|
"Gwen/model"
|
||||||
|
"Gwen/service"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/gin-gonic/gin/binding"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Audit struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// AuditConn
|
||||||
|
// @Tags 审计
|
||||||
|
// @Summary 审计连接
|
||||||
|
// @Description 审计连接
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param body body request.AuditConnForm true "审计连接"
|
||||||
|
// @Success 200 {string} string ""
|
||||||
|
// @Failure 500 {object} response.Response
|
||||||
|
// @Router /audit/conn [post]
|
||||||
|
func (a *Audit) AuditConn(c *gin.Context) {
|
||||||
|
af := &request.AuditConnForm{}
|
||||||
|
err := c.ShouldBindBodyWith(af, binding.JSON)
|
||||||
|
if err != nil {
|
||||||
|
response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
/*ttt := &gin.H{}
|
||||||
|
c.ShouldBindBodyWith(ttt, binding.JSON)
|
||||||
|
fmt.Println(ttt)*/
|
||||||
|
ac := af.ToAuditConn()
|
||||||
|
if af.Action == model.AuditActionNew {
|
||||||
|
service.AllService.AuditService.CreateAuditConn(ac)
|
||||||
|
} else if af.Action == model.AuditActionClose {
|
||||||
|
ex := service.AllService.AuditService.InfoByPeerIdAndConnId(af.Id, af.ConnId)
|
||||||
|
if ex.Id != 0 {
|
||||||
|
ex.CloseTime = time.Now().Unix()
|
||||||
|
service.AllService.AuditService.UpdateAuditConn(ex)
|
||||||
|
}
|
||||||
|
} else if af.Action == "" {
|
||||||
|
ex := service.AllService.AuditService.InfoByPeerIdAndConnId(af.Id, af.ConnId)
|
||||||
|
if ex.Id != 0 {
|
||||||
|
up := &model.AuditConn{
|
||||||
|
IdModel: model.IdModel{Id: ex.Id},
|
||||||
|
FromPeer: ac.FromPeer,
|
||||||
|
FromName: ac.FromName,
|
||||||
|
SessionId: ac.SessionId,
|
||||||
|
Type: ac.Type,
|
||||||
|
}
|
||||||
|
service.AllService.AuditService.UpdateAuditConn(up)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response.Success(c, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// AuditFile
|
||||||
|
// @Tags 审计
|
||||||
|
// @Summary 审计文件
|
||||||
|
// @Description 审计文件
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Param body body request.AuditFileForm true "审计文件"
|
||||||
|
// @Success 200 {string} string ""
|
||||||
|
// @Failure 500 {object} response.Response
|
||||||
|
// @Router /audit/file [post]
|
||||||
|
func (a *Audit) AuditFile(c *gin.Context) {
|
||||||
|
aff := &request.AuditFileForm{}
|
||||||
|
err := c.ShouldBindBodyWith(aff, binding.JSON)
|
||||||
|
if err != nil {
|
||||||
|
response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//ttt := &gin.H{}
|
||||||
|
//c.ShouldBindBodyWith(ttt, binding.JSON)
|
||||||
|
//fmt.Println(ttt)
|
||||||
|
af := aff.ToAuditFile()
|
||||||
|
service.AllService.AuditService.CreateAuditFile(af)
|
||||||
|
response.Success(c, "")
|
||||||
|
}
|
||||||
@@ -54,5 +54,5 @@ func (p *Peer) SysInfo(c *gin.Context) {
|
|||||||
//SYSINFO_UPDATED 上传成功
|
//SYSINFO_UPDATED 上传成功
|
||||||
//ID_NOT_FOUND 下次心跳会上传
|
//ID_NOT_FOUND 下次心跳会上传
|
||||||
//直接响应文本
|
//直接响应文本
|
||||||
c.String(http.StatusOK, "")
|
c.String(http.StatusOK, "SYSINFO_UPDATED")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ type User struct {
|
|||||||
// @Security token
|
// @Security token
|
||||||
//func (u *User) currentUser(c *gin.Context) {
|
//func (u *User) currentUser(c *gin.Context) {
|
||||||
// user := service.AllService.UserService.CurUser(c)
|
// user := service.AllService.UserService.CurUser(c)
|
||||||
// up := (&apiResp.UserPayload{}).FromUser(user)
|
// up := (&apiResp.UserPayload{}).FromName(user)
|
||||||
// c.JSON(http.StatusOK, up)
|
// c.JSON(http.StatusOK, up)
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
|||||||
7
http/request/admin/audit.go
Normal file
7
http/request/admin/audit.go
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package admin
|
||||||
|
|
||||||
|
type AuditQuery struct {
|
||||||
|
PeerId string `form:"peer_id"`
|
||||||
|
FromPeer string `form:"from_peer"`
|
||||||
|
PageQuery
|
||||||
|
}
|
||||||
@@ -5,11 +5,13 @@ import "Gwen/model"
|
|||||||
type GroupForm struct {
|
type GroupForm struct {
|
||||||
Id uint `json:"id"`
|
Id uint `json:"id"`
|
||||||
Name string `json:"name" validate:"required"`
|
Name string `json:"name" validate:"required"`
|
||||||
|
Type int `json:"type"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gf *GroupForm) FromGroup(group *model.Group) *GroupForm {
|
func (gf *GroupForm) FromGroup(group *model.Group) *GroupForm {
|
||||||
gf.Id = group.Id
|
gf.Id = group.Id
|
||||||
gf.Name = group.Name
|
gf.Name = group.Name
|
||||||
|
gf.Type = group.Type
|
||||||
return gf
|
return gf
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,5 +19,6 @@ func (gf *GroupForm) ToGroup() *model.Group {
|
|||||||
group := &model.Group{}
|
group := &model.Group{}
|
||||||
group.Id = gf.Id
|
group.Id = gf.Id
|
||||||
group.Name = gf.Name
|
group.Name = gf.Name
|
||||||
|
group.Type = gf.Type
|
||||||
return group
|
return group
|
||||||
}
|
}
|
||||||
|
|||||||
78
http/request/api/audit.go
Normal file
78
http/request/api/audit.go
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Gwen/global"
|
||||||
|
"Gwen/model"
|
||||||
|
"encoding/json"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AuditConnForm struct {
|
||||||
|
Action string `json:"action"`
|
||||||
|
ConnId int64 `json:"conn_id"`
|
||||||
|
Id string `json:"id"`
|
||||||
|
Peer []string `json:"peer"`
|
||||||
|
Ip string `json:"ip"`
|
||||||
|
SessionId float64 `json:"session_id"`
|
||||||
|
Type int `json:"type"`
|
||||||
|
Uuid string `json:"uuid"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AuditConnForm) ToAuditConn() *model.AuditConn {
|
||||||
|
fp := ""
|
||||||
|
fn := ""
|
||||||
|
if len(a.Peer) >= 1 {
|
||||||
|
fp = a.Peer[0]
|
||||||
|
if len(a.Peer) == 2 {
|
||||||
|
fn = a.Peer[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ssid := strconv.FormatFloat(a.SessionId, 'f', -1, 64)
|
||||||
|
return &model.AuditConn{
|
||||||
|
Action: a.Action,
|
||||||
|
ConnId: a.ConnId,
|
||||||
|
PeerId: a.Id,
|
||||||
|
FromPeer: fp,
|
||||||
|
FromName: fn,
|
||||||
|
Ip: a.Ip,
|
||||||
|
SessionId: ssid,
|
||||||
|
Type: a.Type,
|
||||||
|
Uuid: a.Uuid,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type AuditFileForm struct {
|
||||||
|
Id string `json:"id"`
|
||||||
|
Info string `json:"info"`
|
||||||
|
IsFile bool `json:"is_file"`
|
||||||
|
Path string `json:"path"`
|
||||||
|
PeerId string `json:"peer_id"`
|
||||||
|
Type int `json:"type"`
|
||||||
|
Uuid string `json:"uuid"`
|
||||||
|
}
|
||||||
|
type AuditFileInfo struct {
|
||||||
|
Ip string `json:"ip"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Num int `json:"num"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *AuditFileForm) ToAuditFile() *model.AuditFile {
|
||||||
|
fi := &AuditFileInfo{}
|
||||||
|
err := json.Unmarshal([]byte(a.Info), fi)
|
||||||
|
if err != nil {
|
||||||
|
global.Logger.Warn("ToAuditFile", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &model.AuditFile{
|
||||||
|
PeerId: a.Id,
|
||||||
|
Info: a.Info,
|
||||||
|
IsFile: a.IsFile,
|
||||||
|
FromPeer: a.PeerId,
|
||||||
|
Path: a.Path,
|
||||||
|
Type: a.Type,
|
||||||
|
Uuid: a.Uuid,
|
||||||
|
FromName: fi.Name,
|
||||||
|
Ip: fi.Ip,
|
||||||
|
Num: fi.Num,
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,7 +27,7 @@ func Init(g *gin.Engine) {
|
|||||||
PeerBind(adg)
|
PeerBind(adg)
|
||||||
OauthBind(adg)
|
OauthBind(adg)
|
||||||
LoginLogBind(adg)
|
LoginLogBind(adg)
|
||||||
|
AuditBind(adg)
|
||||||
rs := &admin.Rustdesk{}
|
rs := &admin.Rustdesk{}
|
||||||
adg.GET("/server-config", rs.ServerConfig)
|
adg.GET("/server-config", rs.ServerConfig)
|
||||||
adg.GET("/app-config", rs.AppConfig)
|
adg.GET("/app-config", rs.AppConfig)
|
||||||
@@ -143,6 +143,15 @@ func LoginLogBind(rg *gin.RouterGroup) {
|
|||||||
aR.GET("/list", cont.List)
|
aR.GET("/list", cont.List)
|
||||||
aR.POST("/delete", cont.Delete)
|
aR.POST("/delete", cont.Delete)
|
||||||
}
|
}
|
||||||
|
func AuditBind(rg *gin.RouterGroup) {
|
||||||
|
cont := &admin.Audit{}
|
||||||
|
aR := rg.Group("/audit_conn").Use(middleware.AdminPrivilege())
|
||||||
|
aR.GET("/list", cont.ConnList)
|
||||||
|
aR.POST("/delete", cont.ConnDelete)
|
||||||
|
afR := rg.Group("/audit_file").Use(middleware.AdminPrivilege())
|
||||||
|
afR.GET("/list", cont.FileList)
|
||||||
|
afR.POST("/delete", cont.FileDelete)
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
func FileBind(rg *gin.RouterGroup) {
|
func FileBind(rg *gin.RouterGroup) {
|
||||||
|
|||||||
@@ -50,7 +50,11 @@ func ApiInit(g *gin.Engine) {
|
|||||||
if global.Config.App.WebClient == 1 {
|
if global.Config.App.WebClient == 1 {
|
||||||
WebClientRoutes(frg)
|
WebClientRoutes(frg)
|
||||||
}
|
}
|
||||||
|
au := &api.Audit{}
|
||||||
|
//[method:POST] [uri:/api/audit/conn]
|
||||||
|
frg.POST("/audit/conn", au.AuditConn)
|
||||||
|
//[method:POST] [uri:/api/audit/file]
|
||||||
|
frg.POST("/audit/file", au.AuditFile)
|
||||||
frg.Use(middleware.RustAuth())
|
frg.Use(middleware.RustAuth())
|
||||||
{
|
{
|
||||||
u := &api.User{}
|
u := &api.User{}
|
||||||
|
|||||||
46
model/audit.go
Normal file
46
model/audit.go
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
const (
|
||||||
|
AuditActionNew = "new"
|
||||||
|
AuditActionClose = "close"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AuditConn struct {
|
||||||
|
IdModel
|
||||||
|
Action string `json:"action" gorm:"default:'';not null;"`
|
||||||
|
ConnId int64 `json:"conn_id" gorm:"default:0;not null;index"`
|
||||||
|
PeerId string `json:"peer_id" gorm:"default:'';not null;index"`
|
||||||
|
FromPeer string `json:"from_peer" gorm:"default:'';not null;"`
|
||||||
|
FromName string `json:"from_name" gorm:"default:'';not null;"`
|
||||||
|
Ip string `json:"ip" gorm:"default:'';not null;"`
|
||||||
|
SessionId string `json:"session_id" gorm:"default:'';not null;"`
|
||||||
|
Type int `json:"type" gorm:"default:0;not null;"`
|
||||||
|
Uuid string `json:"uuid" gorm:"default:'';not null;"`
|
||||||
|
CloseTime int64 `json:"close_time" gorm:"default:0;not null;"`
|
||||||
|
TimeModel
|
||||||
|
}
|
||||||
|
|
||||||
|
type AuditConnList struct {
|
||||||
|
AuditConns []*AuditConn `json:"list"`
|
||||||
|
Pagination
|
||||||
|
}
|
||||||
|
|
||||||
|
type AuditFile struct {
|
||||||
|
IdModel
|
||||||
|
FromPeer string `json:"from_peer" gorm:"default:'';not null;index"`
|
||||||
|
Info string `json:"info" gorm:"default:'';not null;"`
|
||||||
|
IsFile bool `json:"is_file" gorm:"default:0;not null;"`
|
||||||
|
Path string `json:"path" gorm:"default:'';not null;"`
|
||||||
|
PeerId string `json:"peer_id" gorm:"default:'';not null;index"`
|
||||||
|
Type int `json:"type" gorm:"default:0;not null;"`
|
||||||
|
Uuid string `json:"uuid" gorm:"default:'';not null;"`
|
||||||
|
Ip string `json:"ip" gorm:"default:'';not null;"`
|
||||||
|
Num int `json:"num" gorm:"default:0;not null;"`
|
||||||
|
FromName string `json:"from_name" gorm:"default:'';not null;"`
|
||||||
|
TimeModel
|
||||||
|
}
|
||||||
|
|
||||||
|
type AuditFileList struct {
|
||||||
|
AuditFiles []*AuditFile `json:"list"`
|
||||||
|
Pagination
|
||||||
|
}
|
||||||
87
service/audit.go
Normal file
87
service/audit.go
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Gwen/global"
|
||||||
|
"Gwen/model"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AuditService struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (as *AuditService) AuditConnList(page, pageSize uint, where func(tx *gorm.DB)) (res *model.AuditConnList) {
|
||||||
|
res = &model.AuditConnList{}
|
||||||
|
res.Page = int64(page)
|
||||||
|
res.PageSize = int64(pageSize)
|
||||||
|
tx := global.DB.Model(&model.AuditConn{})
|
||||||
|
if where != nil {
|
||||||
|
where(tx)
|
||||||
|
}
|
||||||
|
tx.Count(&res.Total)
|
||||||
|
tx.Scopes(Paginate(page, pageSize))
|
||||||
|
tx.Find(&res.AuditConns)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create 创建
|
||||||
|
func (as *AuditService) CreateAuditConn(u *model.AuditConn) error {
|
||||||
|
res := global.DB.Create(u).Error
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
func (as *AuditService) DeleteAuditConn(u *model.AuditConn) error {
|
||||||
|
return global.DB.Delete(u).Error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 更新
|
||||||
|
func (as *AuditService) UpdateAuditConn(u *model.AuditConn) error {
|
||||||
|
return global.DB.Model(u).Updates(u).Error
|
||||||
|
}
|
||||||
|
|
||||||
|
// InfoByPeerIdAndConnId
|
||||||
|
func (as *AuditService) InfoByPeerIdAndConnId(peerId string, connId int64) (res *model.AuditConn) {
|
||||||
|
res = &model.AuditConn{}
|
||||||
|
global.DB.Where("peer_id = ? and conn_id = ?", peerId, connId).First(res)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ConnInfoById
|
||||||
|
func (as *AuditService) ConnInfoById(id uint) (res *model.AuditConn) {
|
||||||
|
res = &model.AuditConn{}
|
||||||
|
global.DB.Where("id = ?", id).First(res)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// FileInfoById
|
||||||
|
func (as *AuditService) FileInfoById(id uint) (res *model.AuditFile) {
|
||||||
|
res = &model.AuditFile{}
|
||||||
|
global.DB.Where("id = ?", id).First(res)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (as *AuditService) AuditFileList(page, pageSize uint, where func(tx *gorm.DB)) (res *model.AuditFileList) {
|
||||||
|
res = &model.AuditFileList{}
|
||||||
|
res.Page = int64(page)
|
||||||
|
res.PageSize = int64(pageSize)
|
||||||
|
tx := global.DB.Model(&model.AuditFile{})
|
||||||
|
if where != nil {
|
||||||
|
where(tx)
|
||||||
|
}
|
||||||
|
tx.Count(&res.Total)
|
||||||
|
tx.Scopes(Paginate(page, pageSize))
|
||||||
|
tx.Find(&res.AuditFiles)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateAuditFile
|
||||||
|
func (as *AuditService) CreateAuditFile(u *model.AuditFile) error {
|
||||||
|
res := global.DB.Create(u).Error
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
func (as *AuditService) DeleteAuditFile(u *model.AuditFile) error {
|
||||||
|
return global.DB.Delete(u).Error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 更新
|
||||||
|
func (as *AuditService) UpdateAuditFile(u *model.AuditFile) error {
|
||||||
|
return global.DB.Model(u).Updates(u).Error
|
||||||
|
}
|
||||||
@@ -7,12 +7,13 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"golang.org/x/oauth2"
|
"golang.org/x/oauth2"
|
||||||
"golang.org/x/oauth2/github"
|
"golang.org/x/oauth2/github"
|
||||||
"golang.org/x/oauth2/google"
|
"golang.org/x/oauth2/google"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"io"
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@@ -167,36 +168,60 @@ func (os *OauthService) GetOauthConfig(op string) (error, *oauth2.Config) {
|
|||||||
return errors.New("ConfigNotFound"), nil
|
return errors.New("ConfigNotFound"), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getHTTPClientWithProxy() *http.Client {
|
||||||
|
if global.Config.Proxy.Enable {
|
||||||
|
if global.Config.Proxy.Host == "" {
|
||||||
|
global.Logger.Warn("Proxy is enabled but proxy host is empty.")
|
||||||
|
return http.DefaultClient
|
||||||
|
}
|
||||||
|
proxyURL, err := url.Parse(global.Config.Proxy.Host)
|
||||||
|
if err != nil {
|
||||||
|
global.Logger.Warn("Invalid proxy URL: ", err)
|
||||||
|
return http.DefaultClient
|
||||||
|
}
|
||||||
|
transport := &http.Transport{
|
||||||
|
Proxy: http.ProxyURL(proxyURL),
|
||||||
|
}
|
||||||
|
return &http.Client{Transport: transport}
|
||||||
|
}
|
||||||
|
return http.DefaultClient
|
||||||
|
}
|
||||||
|
|
||||||
func (os *OauthService) GithubCallback(code string) (error error, userData *GithubUserdata) {
|
func (os *OauthService) GithubCallback(code string) (error error, userData *GithubUserdata) {
|
||||||
err, oauthConfig := os.GetOauthConfig(model.OauthTypeGithub)
|
err, oauthConfig := os.GetOauthConfig(model.OauthTypeGithub)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err, nil
|
return err, nil
|
||||||
}
|
}
|
||||||
token, err := oauthConfig.Exchange(context.Background(), code)
|
|
||||||
|
// 使用代理配置创建 HTTP 客户端
|
||||||
|
httpClient := getHTTPClientWithProxy()
|
||||||
|
ctx := context.WithValue(context.Background(), oauth2.HTTPClient, httpClient)
|
||||||
|
|
||||||
|
token, err := oauthConfig.Exchange(ctx, code)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Warn(fmt.Printf("oauthConfig.Exchange() failed: %s\n", err))
|
global.Logger.Warn("oauthConfig.Exchange() failed: ", err)
|
||||||
error = errors.New("GetOauthTokenError")
|
error = errors.New("GetOauthTokenError")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建一个 HTTP 客户端,并将 access_token 添加到 Authorization 头中
|
// 使用带有代理的 HTTP 客户端获取用户信息
|
||||||
client := oauthConfig.Client(context.Background(), token)
|
client := oauthConfig.Client(ctx, token)
|
||||||
resp, err := client.Get("https://api.github.com/user")
|
resp, err := client.Get("https://api.github.com/user")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Warn("failed getting user info: %s\n", err)
|
global.Logger.Warn("failed getting user info: ", err)
|
||||||
error = errors.New("GetOauthUserInfoError")
|
error = errors.New("GetOauthUserInfoError")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer func(Body io.ReadCloser) {
|
defer func(Body io.ReadCloser) {
|
||||||
err := Body.Close()
|
err := Body.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Warn("failed closing response body: %s\n", err)
|
global.Logger.Warn("failed closing response body: ", err)
|
||||||
}
|
}
|
||||||
}(resp.Body)
|
}(resp.Body)
|
||||||
|
|
||||||
// 在这里处理 GitHub 用户信息
|
// 解析用户信息
|
||||||
if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil {
|
if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil {
|
||||||
global.Logger.Warn("failed decoding user info: %s\n", err)
|
global.Logger.Warn("failed decoding user info: ", err)
|
||||||
error = errors.New("DecodeOauthUserInfoError")
|
error = errors.New("DecodeOauthUserInfoError")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -205,29 +230,39 @@ func (os *OauthService) GithubCallback(code string) (error error, userData *Gith
|
|||||||
|
|
||||||
func (os *OauthService) GoogleCallback(code string) (error error, userData *GoogleUserdata) {
|
func (os *OauthService) GoogleCallback(code string) (error error, userData *GoogleUserdata) {
|
||||||
err, oauthConfig := os.GetOauthConfig(model.OauthTypeGoogle)
|
err, oauthConfig := os.GetOauthConfig(model.OauthTypeGoogle)
|
||||||
token, err := oauthConfig.Exchange(context.Background(), code)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Warn(fmt.Printf("oauthConfig.Exchange() failed: %s\n", err))
|
return err, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用代理配置创建 HTTP 客户端
|
||||||
|
httpClient := getHTTPClientWithProxy()
|
||||||
|
ctx := context.WithValue(context.Background(), oauth2.HTTPClient, httpClient)
|
||||||
|
|
||||||
|
token, err := oauthConfig.Exchange(ctx, code)
|
||||||
|
if err != nil {
|
||||||
|
global.Logger.Warn("oauthConfig.Exchange() failed: ", err)
|
||||||
error = errors.New("GetOauthTokenError")
|
error = errors.New("GetOauthTokenError")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 创建 HTTP 客户端,并将 access_token 添加到 Authorization 头中
|
|
||||||
client := oauthConfig.Client(context.Background(), token)
|
// 使用带有代理的 HTTP 客户端获取用户信息
|
||||||
|
client := oauthConfig.Client(ctx, token)
|
||||||
resp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo")
|
resp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Warn("failed getting user info: %s\n", err)
|
global.Logger.Warn("failed getting user info: ", err)
|
||||||
error = errors.New("GetOauthUserInfoError")
|
error = errors.New("GetOauthUserInfoError")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer func(Body io.ReadCloser) {
|
defer func(Body io.ReadCloser) {
|
||||||
err := Body.Close()
|
err := Body.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Warn("failed closing response body: %s\n", err)
|
global.Logger.Warn("failed closing response body: ", err)
|
||||||
}
|
}
|
||||||
}(resp.Body)
|
}(resp.Body)
|
||||||
|
|
||||||
|
// 解析用户信息
|
||||||
if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil {
|
if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil {
|
||||||
global.Logger.Warn("failed decoding user info: %s\n", err)
|
global.Logger.Warn("failed decoding user info: ", err)
|
||||||
error = errors.New("DecodeOauthUserInfoError")
|
error = errors.New("DecodeOauthUserInfoError")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ type Service struct {
|
|||||||
*GroupService
|
*GroupService
|
||||||
*OauthService
|
*OauthService
|
||||||
*LoginLogService
|
*LoginLogService
|
||||||
|
*AuditService
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() *Service {
|
func New() *Service {
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ func (us *UserService) InfoById(id uint) *model.User {
|
|||||||
global.DB.Where("id = ?", id).First(u)
|
global.DB.Where("id = ?", id).First(u)
|
||||||
return u
|
return u
|
||||||
}
|
}
|
||||||
|
func (us *UserService) InfoByUsername(un string) *model.User {
|
||||||
|
u := &model.User{}
|
||||||
|
global.DB.Where("username = ?", un).First(u)
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
// InfoByOpenid 根据openid取用户信息
|
// InfoByOpenid 根据openid取用户信息
|
||||||
func (us *UserService) InfoByOpenid(openid string) *model.User {
|
func (us *UserService) InfoByOpenid(openid string) *model.User {
|
||||||
|
|||||||
Reference in New Issue
Block a user