mirror of
https://github.com/veops/oneterm.git
synced 2025-10-28 09:51:34 +08:00
feat(backend): update swagger
This commit is contained in:
@@ -188,6 +188,160 @@ const docTemplate = `{
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/rdp/sessions/{session_id}/files": {
|
||||
"get": {
|
||||
"description": "Get file list for RDP session drive",
|
||||
"tags": [
|
||||
"RDP File"
|
||||
],
|
||||
"summary": "List RDP session files",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Session ID",
|
||||
"name": "session_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Directory path",
|
||||
"name": "path",
|
||||
"in": "query"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/controller.HttpResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/rdp/sessions/{session_id}/files/download": {
|
||||
"get": {
|
||||
"description": "Download file from RDP session drive",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/octet-stream"
|
||||
],
|
||||
"tags": [
|
||||
"RDP File"
|
||||
],
|
||||
"summary": "Download file from RDP session",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Session ID",
|
||||
"name": "session_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "File path",
|
||||
"name": "path",
|
||||
"in": "query",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"type": "file"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/rdp/sessions/{session_id}/files/mkdir": {
|
||||
"post": {
|
||||
"description": "Create directory in RDP session drive",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"RDP File"
|
||||
],
|
||||
"summary": "Create directory in RDP session",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Session ID",
|
||||
"name": "session_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"description": "Directory creation request",
|
||||
"name": "request",
|
||||
"in": "body",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"$ref": "#/definitions/controller.RDPMkdirRequest"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/controller.HttpResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/rdp/sessions/{session_id}/files/upload": {
|
||||
"post": {
|
||||
"description": "Upload file to RDP session drive",
|
||||
"consumes": [
|
||||
"multipart/form-data"
|
||||
],
|
||||
"tags": [
|
||||
"RDP File"
|
||||
],
|
||||
"summary": "Upload file to RDP session",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Session ID",
|
||||
"name": "session_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"description": "File to upload",
|
||||
"name": "file",
|
||||
"in": "formData",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Target directory path",
|
||||
"name": "path",
|
||||
"in": "formData"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/controller.HttpResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/asset": {
|
||||
"get": {
|
||||
"tags": [
|
||||
@@ -823,17 +977,10 @@ const docTemplate = `{
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "filename",
|
||||
"name": "filename",
|
||||
"description": "names (comma-separated for multiple files)",
|
||||
"name": "names",
|
||||
"in": "query",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "file field name",
|
||||
"name": "file",
|
||||
"in": "formData",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@@ -905,7 +1052,7 @@ const docTemplate = `{
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "account id",
|
||||
"name": "accout_id",
|
||||
"name": "account_id",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
@@ -953,7 +1100,7 @@ const docTemplate = `{
|
||||
}
|
||||
},
|
||||
"/file/ls/:asset_id/:account_id": {
|
||||
"post": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"file"
|
||||
],
|
||||
@@ -978,6 +1125,12 @@ const docTemplate = `{
|
||||
"name": "dir",
|
||||
"in": "query",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
"description": "show hidden files (default: false)",
|
||||
"name": "show_hidden",
|
||||
"in": "query"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@@ -993,7 +1146,7 @@ const docTemplate = `{
|
||||
"/file/mkdir/:asset_id/:account_id": {
|
||||
"post": {
|
||||
"tags": [
|
||||
"account"
|
||||
"file"
|
||||
],
|
||||
"parameters": [
|
||||
{
|
||||
@@ -1432,6 +1585,12 @@ const docTemplate = `{
|
||||
"description": "include itself and its parent",
|
||||
"name": "self_parent",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
"description": "return tree structure with children",
|
||||
"name": "recursive",
|
||||
"in": "query"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@@ -2724,6 +2883,17 @@ const docTemplate = `{
|
||||
}
|
||||
}
|
||||
},
|
||||
"controller.RDPMkdirRequest": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"path"
|
||||
],
|
||||
"properties": {
|
||||
"path": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"model.AccessAuth": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3090,6 +3260,12 @@ const docTemplate = `{
|
||||
"authorization": {
|
||||
"$ref": "#/definitions/model.Map-int-model_Slice-int"
|
||||
},
|
||||
"children": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/model.Node"
|
||||
}
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
},
|
||||
@@ -3224,6 +3400,21 @@ const docTemplate = `{
|
||||
"copy": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"create_drive_path": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"disable_download": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"disable_upload": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"drive_path": {
|
||||
"type": "string"
|
||||
},
|
||||
"enable_drive": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"paste": {
|
||||
"type": "boolean"
|
||||
}
|
||||
|
||||
@@ -177,6 +177,160 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/rdp/sessions/{session_id}/files": {
|
||||
"get": {
|
||||
"description": "Get file list for RDP session drive",
|
||||
"tags": [
|
||||
"RDP File"
|
||||
],
|
||||
"summary": "List RDP session files",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Session ID",
|
||||
"name": "session_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Directory path",
|
||||
"name": "path",
|
||||
"in": "query"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/controller.HttpResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/rdp/sessions/{session_id}/files/download": {
|
||||
"get": {
|
||||
"description": "Download file from RDP session drive",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/octet-stream"
|
||||
],
|
||||
"tags": [
|
||||
"RDP File"
|
||||
],
|
||||
"summary": "Download file from RDP session",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Session ID",
|
||||
"name": "session_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "File path",
|
||||
"name": "path",
|
||||
"in": "query",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"type": "file"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/rdp/sessions/{session_id}/files/mkdir": {
|
||||
"post": {
|
||||
"description": "Create directory in RDP session drive",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"RDP File"
|
||||
],
|
||||
"summary": "Create directory in RDP session",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Session ID",
|
||||
"name": "session_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"description": "Directory creation request",
|
||||
"name": "request",
|
||||
"in": "body",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"$ref": "#/definitions/controller.RDPMkdirRequest"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/controller.HttpResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/rdp/sessions/{session_id}/files/upload": {
|
||||
"post": {
|
||||
"description": "Upload file to RDP session drive",
|
||||
"consumes": [
|
||||
"multipart/form-data"
|
||||
],
|
||||
"tags": [
|
||||
"RDP File"
|
||||
],
|
||||
"summary": "Upload file to RDP session",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Session ID",
|
||||
"name": "session_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"description": "File to upload",
|
||||
"name": "file",
|
||||
"in": "formData",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "Target directory path",
|
||||
"name": "path",
|
||||
"in": "formData"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/controller.HttpResponse"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/asset": {
|
||||
"get": {
|
||||
"tags": [
|
||||
@@ -812,17 +966,10 @@
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "filename",
|
||||
"name": "filename",
|
||||
"description": "names (comma-separated for multiple files)",
|
||||
"name": "names",
|
||||
"in": "query",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "file field name",
|
||||
"name": "file",
|
||||
"in": "formData",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@@ -894,7 +1041,7 @@
|
||||
{
|
||||
"type": "integer",
|
||||
"description": "account id",
|
||||
"name": "accout_id",
|
||||
"name": "account_id",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
@@ -942,7 +1089,7 @@
|
||||
}
|
||||
},
|
||||
"/file/ls/:asset_id/:account_id": {
|
||||
"post": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"file"
|
||||
],
|
||||
@@ -967,6 +1114,12 @@
|
||||
"name": "dir",
|
||||
"in": "query",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
"description": "show hidden files (default: false)",
|
||||
"name": "show_hidden",
|
||||
"in": "query"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@@ -982,7 +1135,7 @@
|
||||
"/file/mkdir/:asset_id/:account_id": {
|
||||
"post": {
|
||||
"tags": [
|
||||
"account"
|
||||
"file"
|
||||
],
|
||||
"parameters": [
|
||||
{
|
||||
@@ -1421,6 +1574,12 @@
|
||||
"description": "include itself and its parent",
|
||||
"name": "self_parent",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
"description": "return tree structure with children",
|
||||
"name": "recursive",
|
||||
"in": "query"
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@@ -2713,6 +2872,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"controller.RDPMkdirRequest": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"path"
|
||||
],
|
||||
"properties": {
|
||||
"path": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"model.AccessAuth": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3079,6 +3249,12 @@
|
||||
"authorization": {
|
||||
"$ref": "#/definitions/model.Map-int-model_Slice-int"
|
||||
},
|
||||
"children": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/model.Node"
|
||||
}
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
},
|
||||
@@ -3213,6 +3389,21 @@
|
||||
"copy": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"create_drive_path": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"disable_download": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"disable_upload": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"drive_path": {
|
||||
"type": "string"
|
||||
},
|
||||
"enable_drive": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"paste": {
|
||||
"type": "boolean"
|
||||
}
|
||||
|
||||
@@ -15,6 +15,13 @@ definitions:
|
||||
items: {}
|
||||
type: array
|
||||
type: object
|
||||
controller.RDPMkdirRequest:
|
||||
properties:
|
||||
path:
|
||||
type: string
|
||||
required:
|
||||
- path
|
||||
type: object
|
||||
model.AccessAuth:
|
||||
properties:
|
||||
allow:
|
||||
@@ -257,6 +264,10 @@ definitions:
|
||||
type: integer
|
||||
authorization:
|
||||
$ref: '#/definitions/model.Map-int-model_Slice-int'
|
||||
children:
|
||||
items:
|
||||
$ref: '#/definitions/model.Node'
|
||||
type: array
|
||||
comment:
|
||||
type: string
|
||||
created_at:
|
||||
@@ -347,6 +358,16 @@ definitions:
|
||||
properties:
|
||||
copy:
|
||||
type: boolean
|
||||
create_drive_path:
|
||||
type: boolean
|
||||
disable_download:
|
||||
type: boolean
|
||||
disable_upload:
|
||||
type: boolean
|
||||
drive_path:
|
||||
type: string
|
||||
enable_drive:
|
||||
type: boolean
|
||||
paste:
|
||||
type: boolean
|
||||
type: object
|
||||
@@ -668,6 +689,108 @@ paths:
|
||||
$ref: '#/definitions/controller.HttpResponse'
|
||||
tags:
|
||||
- account
|
||||
/api/v1/rdp/sessions/{session_id}/files:
|
||||
get:
|
||||
description: Get file list for RDP session drive
|
||||
parameters:
|
||||
- description: Session ID
|
||||
in: path
|
||||
name: session_id
|
||||
required: true
|
||||
type: string
|
||||
- description: Directory path
|
||||
in: query
|
||||
name: path
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
schema:
|
||||
$ref: '#/definitions/controller.HttpResponse'
|
||||
summary: List RDP session files
|
||||
tags:
|
||||
- RDP File
|
||||
/api/v1/rdp/sessions/{session_id}/files/download:
|
||||
get:
|
||||
consumes:
|
||||
- application/json
|
||||
description: Download file from RDP session drive
|
||||
parameters:
|
||||
- description: Session ID
|
||||
in: path
|
||||
name: session_id
|
||||
required: true
|
||||
type: string
|
||||
- description: File path
|
||||
in: query
|
||||
name: path
|
||||
required: true
|
||||
type: string
|
||||
produces:
|
||||
- application/octet-stream
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
schema:
|
||||
type: file
|
||||
summary: Download file from RDP session
|
||||
tags:
|
||||
- RDP File
|
||||
/api/v1/rdp/sessions/{session_id}/files/mkdir:
|
||||
post:
|
||||
consumes:
|
||||
- application/json
|
||||
description: Create directory in RDP session drive
|
||||
parameters:
|
||||
- description: Session ID
|
||||
in: path
|
||||
name: session_id
|
||||
required: true
|
||||
type: string
|
||||
- description: Directory creation request
|
||||
in: body
|
||||
name: request
|
||||
required: true
|
||||
schema:
|
||||
$ref: '#/definitions/controller.RDPMkdirRequest'
|
||||
produces:
|
||||
- application/json
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
schema:
|
||||
$ref: '#/definitions/controller.HttpResponse'
|
||||
summary: Create directory in RDP session
|
||||
tags:
|
||||
- RDP File
|
||||
/api/v1/rdp/sessions/{session_id}/files/upload:
|
||||
post:
|
||||
consumes:
|
||||
- multipart/form-data
|
||||
description: Upload file to RDP session drive
|
||||
parameters:
|
||||
- description: Session ID
|
||||
in: path
|
||||
name: session_id
|
||||
required: true
|
||||
type: string
|
||||
- description: File to upload
|
||||
in: formData
|
||||
name: file
|
||||
required: true
|
||||
type: file
|
||||
- description: Target directory path
|
||||
in: formData
|
||||
name: path
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
schema:
|
||||
$ref: '#/definitions/controller.HttpResponse'
|
||||
summary: Upload file to RDP session
|
||||
tags:
|
||||
- RDP File
|
||||
/asset:
|
||||
get:
|
||||
parameters:
|
||||
@@ -1054,14 +1177,9 @@ paths:
|
||||
name: dir
|
||||
required: true
|
||||
type: string
|
||||
- description: filename
|
||||
- description: names (comma-separated for multiple files)
|
||||
in: query
|
||||
name: filename
|
||||
required: true
|
||||
type: string
|
||||
- description: file field name
|
||||
in: formData
|
||||
name: file
|
||||
name: names
|
||||
required: true
|
||||
type: string
|
||||
responses:
|
||||
@@ -1110,7 +1228,7 @@ paths:
|
||||
type: integer
|
||||
- description: account id
|
||||
in: query
|
||||
name: accout_id
|
||||
name: account_id
|
||||
type: integer
|
||||
- description: client_ip
|
||||
in: query
|
||||
@@ -1136,7 +1254,7 @@ paths:
|
||||
tags:
|
||||
- file
|
||||
/file/ls/:asset_id/:account_id:
|
||||
post:
|
||||
get:
|
||||
parameters:
|
||||
- description: asset_id
|
||||
in: path
|
||||
@@ -1153,6 +1271,10 @@ paths:
|
||||
name: dir
|
||||
required: true
|
||||
type: string
|
||||
- description: 'show hidden files (default: false)'
|
||||
in: query
|
||||
name: show_hidden
|
||||
type: boolean
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
@@ -1184,7 +1306,7 @@ paths:
|
||||
schema:
|
||||
$ref: '#/definitions/controller.HttpResponse'
|
||||
tags:
|
||||
- account
|
||||
- file
|
||||
/file/upload/:asset_id/:account_id:
|
||||
post:
|
||||
parameters:
|
||||
@@ -1436,6 +1558,10 @@ paths:
|
||||
in: query
|
||||
name: self_parent
|
||||
type: integer
|
||||
- description: return tree structure with children
|
||||
in: query
|
||||
name: recursive
|
||||
type: boolean
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
|
||||
@@ -23,7 +23,10 @@ func (w bodyWriter) Write(b []byte) (int, error) {
|
||||
|
||||
func Error2RespMiddleware() gin.HandlerFunc {
|
||||
return func(ctx *gin.Context) {
|
||||
if strings.Contains(ctx.Request.URL.String(), "session/replay") {
|
||||
// Skip middleware for session replay and file download endpoints
|
||||
urlPath := ctx.Request.URL.String()
|
||||
if strings.Contains(urlPath, "session/replay") ||
|
||||
strings.Contains(urlPath, "/file/download/") {
|
||||
ctx.Next()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -151,5 +151,14 @@ func SetupRouter(r *gin.Engine) {
|
||||
preference.GET("", c.GetPreference)
|
||||
preference.PUT("", c.UpdatePreference)
|
||||
}
|
||||
|
||||
// RDP file transfer routes
|
||||
rdpGroup := v1.Group("/rdp")
|
||||
{
|
||||
rdpGroup.GET("/sessions/:session_id/files", c.RDPFileList)
|
||||
rdpGroup.POST("/sessions/:session_id/files/upload", c.RDPFileUpload)
|
||||
rdpGroup.GET("/sessions/:session_id/files/download", c.RDPFileDownload)
|
||||
rdpGroup.POST("/sessions/:session_id/files/mkdir", c.RDPFileMkdir)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user