From d203cda3009ff8a4069c310ac1b48843789c922e Mon Sep 17 00:00:00 2001 From: Tianpao Date: Sun, 1 Mar 2026 13:12:35 +0800 Subject: [PATCH 1/8] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E4=BB=A3=E7=A0=81=E5=B9=B6=E6=B7=BB=E5=8A=A0=E6=96=B0?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构路由和API请求模块 - 添加管理员面板和节点监控功能 - 实现用户认证和权限管理 - 新增常用组件和工具函数 - 优化表单验证和错误处理 - 完善类型定义和接口规范 - 改进UI设计和响应式布局 --- api-1.yaml | 2609 +++++++++++++++++ src/App.vue | 89 +- src/components/admin/ApiKeysTab.vue | 129 + src/components/admin/NodesTab.vue | 164 ++ src/components/admin/UsersTab.vue | 123 + src/components/common/EmptyState.vue | 16 + src/components/common/ErrorDisplay.vue | 16 + src/components/common/LoadingSpinner.vue | 7 + src/components/common/Pagination.vue | 29 + src/components/common/TabPanel.vue | 37 + .../dashboard/ApiKeyCreateModal.vue | 6 +- .../dashboard/ApiKeyDetailModal.vue | 19 +- src/components/dashboard/ApiKeyEditModal.vue | 6 +- src/components/dashboard/NodeCard.vue | 79 +- src/components/dashboard/NodeDetailModal.vue | 44 +- src/components/dashboard/NodeEditModal.vue | 58 +- src/components/monitor/MonitorFilters.vue | 120 + src/components/monitor/MonitorNodeRow.vue | 57 + src/components/monitor/MonitorPagination.vue | 64 + src/composables/index.ts | 4 + src/composables/useAsync.ts | 35 + src/composables/useAuth.ts | 48 + src/composables/useFormat.ts | 31 + src/composables/usePagination.ts | 52 + src/main.ts | 2 +- src/utils/request/api.ts | 222 +- src/utils/request/index.ts | 39 +- src/utils/request/types.ts | 193 +- src/{router/index.ts => utils/router.ts} | 5 + src/views/AboutView.vue | 2 +- src/views/AdminView.vue | 67 + src/views/DashboardView.vue | 367 +-- src/views/HomeView.vue | 48 +- src/views/LoginView.vue | 28 +- src/views/MonitorView.vue | 625 +--- src/views/SubmitView.vue | 82 +- 36 files changed, 4375 insertions(+), 1147 deletions(-) create mode 100644 api-1.yaml create mode 100644 src/components/admin/ApiKeysTab.vue create mode 100644 src/components/admin/NodesTab.vue create mode 100644 src/components/admin/UsersTab.vue create mode 100644 src/components/common/EmptyState.vue create mode 100644 src/components/common/ErrorDisplay.vue create mode 100644 src/components/common/LoadingSpinner.vue create mode 100644 src/components/common/Pagination.vue create mode 100644 src/components/common/TabPanel.vue create mode 100644 src/components/monitor/MonitorFilters.vue create mode 100644 src/components/monitor/MonitorNodeRow.vue create mode 100644 src/components/monitor/MonitorPagination.vue create mode 100644 src/composables/index.ts create mode 100644 src/composables/useAsync.ts create mode 100644 src/composables/useAuth.ts create mode 100644 src/composables/useFormat.ts create mode 100644 src/composables/usePagination.ts rename src/{router/index.ts => utils/router.ts} (87%) create mode 100644 src/views/AdminView.vue diff --git a/api-1.yaml b/api-1.yaml new file mode 100644 index 0000000..157c340 --- /dev/null +++ b/api-1.yaml @@ -0,0 +1,2609 @@ +openapi: 3.0.3 +info: + title: EasyTierMC.Uptime API Documentation + description: EasyTierMC.Uptime API + version: 1.0.0 +paths: + /api/oauth/clientId: + get: + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: object + required: + - client_id + properties: + client_id: + type: string + operationId: getApiOauthClientId + /api/oauth/callback: + post: + parameters: + - name: code + in: query + required: true + schema: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: object + required: + - token + - ttl + properties: + token: + type: string + ttl: + type: number + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: postApiOauthCallback + /api/oauth/profile: + get: + parameters: + - name: authorization + in: header + required: true + schema: + type: string + operationId: getApiOauthProfile + /api/admin/users/: + get: + parameters: + - name: limit + in: query + required: true + schema: + type: number + - name: offset + in: query + required: true + schema: + type: number + - name: role + in: query + required: false + schema: + type: string + enum: + - admin + - user + - name: authorization + in: header + required: true + schema: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: array + items: + type: object + required: + - uuid + - username + - githubId + - avatarUrl + - role + - lastLoginAt + - registeredAt + properties: + uuid: + type: string + username: + type: string + githubId: + type: number + avatarUrl: + type: string + role: + type: string + enum: + - admin + - user + lastLoginAt: + type: string + registeredAt: + type: string + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: getApiAdminUsers + /api/admin/users/{uuid}: + delete: + parameters: + - name: uuid + in: path + required: true + schema: + type: string + - name: authorization + in: header + required: true + schema: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + message: + const: User deleted + type: string + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: deleteApiAdminUsersByUuid + /api/admin/users/role/{uuid}: + put: + parameters: + - name: uuid + in: path + required: true + schema: + type: string + - name: authorization + in: header + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - role + properties: + role: + type: string + enum: + - admin + - user + application/x-www-form-urlencoded: + schema: + type: object + required: + - role + properties: + role: + type: string + enum: + - admin + - user + multipart/form-data: + schema: + type: object + required: + - role + properties: + role: + type: string + enum: + - admin + - user + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + message: + const: User role updated + type: string + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: putApiAdminUsersRoleByUuid + /api/admin/apikey/: + get: + parameters: + - name: limit + in: query + required: true + schema: + minimum: 1 + maximum: 100 + type: number + - name: offset + in: query + required: true + schema: + minimum: 0 + type: number + - name: type + in: query + required: false + schema: + type: string + enum: + - active + - pending + - name: authorization + in: header + required: true + schema: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: array + items: + type: object + required: + - id + - name + - description + - userAgent + - providerUuid + - type + - createdAt + - provider + properties: + id: + type: number + name: + type: string + description: + nullable: true + anyOf: + - type: string + - type: "null" + userAgent: + type: string + providerUuid: + type: number + type: + type: string + enum: + - active + - pending + createdAt: + type: string + provider: + type: object + required: + - username + - githubId + properties: + username: + type: string + githubId: + type: number + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: getApiAdminApikey + /api/admin/apikey/{id}: + delete: + parameters: + - name: id + in: path + required: true + schema: + type: number + - name: authorization + in: header + required: true + schema: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + message: + const: Apikey deleted + type: string + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "404": + description: Response for status 404 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 404 + type: number + success: + const: false + type: boolean + message: + const: Apikey not found + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: deleteApiAdminApikeyById + /api/admin/apikey/type/{id}: + put: + parameters: + - name: id + in: path + required: true + schema: + type: number + - name: authorization + in: header + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - type + properties: + type: + type: string + enum: + - active + - pending + application/x-www-form-urlencoded: + schema: + type: object + required: + - type + properties: + type: + type: string + enum: + - active + - pending + multipart/form-data: + schema: + type: object + required: + - type + properties: + type: + type: string + enum: + - active + - pending + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + message: + const: Apikey type updated + type: string + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "404": + description: Response for status 404 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 404 + type: number + success: + const: false + type: boolean + message: + const: Apikey not found + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: putApiAdminApikeyTypeById + /api/admin/nodes/: + get: + parameters: + - name: limit + in: query + required: false + schema: + default: 30 + type: number + - name: offset + in: query + required: false + schema: + default: 0 + type: number + - name: isReviewed + in: query + required: false + schema: + type: boolean + - name: isPublic + in: query + required: false + schema: + type: boolean + - name: authorization + in: header + required: true + schema: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + - total + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: array + items: + type: object + required: + - id + - name + - description + - providerUuid + - providerName + - isReviewed + - isPublic + - status + - connections + - maxConnections + - createdAt + properties: + id: + type: number + name: + type: string + description: + nullable: true + anyOf: + - type: string + - type: "null" + providerUuid: + type: number + providerName: + type: string + isReviewed: + type: boolean + isPublic: + type: boolean + status: + type: string + connections: + type: number + maxConnections: + type: number + createdAt: + type: string + total: + type: number + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: getApiAdminNodes + /api/admin/nodes/review/{id}: + put: + parameters: + - name: id + in: path + required: true + schema: + type: string + - name: authorization + in: header + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - isReviewed + properties: + isReviewed: + type: boolean + application/x-www-form-urlencoded: + schema: + type: object + required: + - isReviewed + properties: + isReviewed: + type: boolean + multipart/form-data: + schema: + type: object + required: + - isReviewed + properties: + isReviewed: + type: boolean + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + message: + const: Node review status updated + type: string + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "404": + description: Response for status 404 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 404 + type: number + success: + const: false + type: boolean + message: + const: Node not found + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: putApiAdminNodesReviewById + /api/admin/nodes/public/{id}: + put: + parameters: + - name: id + in: path + required: true + schema: + type: string + - name: authorization + in: header + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - isPublic + properties: + isPublic: + type: boolean + application/x-www-form-urlencoded: + schema: + type: object + required: + - isPublic + properties: + isPublic: + type: boolean + multipart/form-data: + schema: + type: object + required: + - isPublic + properties: + isPublic: + type: boolean + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + message: + const: Node public status updated + type: string + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "404": + description: Response for status 404 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 404 + type: number + success: + const: false + type: boolean + message: + const: Node not found + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: putApiAdminNodesPublicById + /api/admin/nodes/{id}: + delete: + parameters: + - name: id + in: path + required: true + schema: + type: string + - name: authorization + in: header + required: true + schema: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + message: + const: Node deleted + type: string + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "404": + description: Response for status 404 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 404 + type: number + success: + const: false + type: boolean + message: + const: Node not found + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: deleteApiAdminNodesById + /api/nodes/: + post: + parameters: + - name: authorization + in: header + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - name + - description + - host + - port + - protocol + - isRelay + - maximumBandwidth + - network + - contact + properties: + name: + type: string + description: + type: string + host: + type: string + port: + type: number + protocol: + type: string + enum: + - tcp + - udp + - ws + - wss + isRelay: + type: boolean + maximumBandwidth: + type: number + network: + type: object + required: + - name + - secret + properties: + name: + type: string + secret: + type: string + contact: + type: object + required: + - email + - qq + properties: + email: + nullable: true + anyOf: + - type: string + - type: "null" + qq: + nullable: true + anyOf: + - type: string + - type: "null" + application/x-www-form-urlencoded: + schema: + type: object + required: + - name + - description + - host + - port + - protocol + - isRelay + - maximumBandwidth + - network + - contact + properties: + name: + type: string + description: + type: string + host: + type: string + port: + type: number + protocol: + type: string + enum: + - tcp + - udp + - ws + - wss + isRelay: + type: boolean + maximumBandwidth: + type: number + network: + type: object + required: + - name + - secret + properties: + name: + type: string + secret: + type: string + contact: + type: object + required: + - email + - qq + properties: + email: + nullable: true + anyOf: + - type: string + - type: "null" + qq: + nullable: true + anyOf: + - type: string + - type: "null" + multipart/form-data: + schema: + type: object + required: + - name + - description + - host + - port + - protocol + - isRelay + - maximumBandwidth + - network + - contact + properties: + name: + type: string + description: + type: string + host: + type: string + port: + type: number + protocol: + type: string + enum: + - tcp + - udp + - ws + - wss + isRelay: + type: boolean + maximumBandwidth: + type: number + network: + type: object + required: + - name + - secret + properties: + name: + type: string + secret: + type: string + contact: + type: object + required: + - email + - qq + properties: + email: + nullable: true + anyOf: + - type: string + - type: "null" + qq: + nullable: true + anyOf: + - type: string + - type: "null" + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: "null" + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: postApiNodes + get: + parameters: + - name: limit + in: query + required: false + schema: + type: number + - name: offset + in: query + required: false + schema: + type: number + - name: sort + in: query + required: false + schema: + type: string + - name: order + in: query + required: false + schema: + type: string + responses: + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: getApiNodes + /api/nodes/me: + get: + parameters: + - name: authorization + in: header + required: true + schema: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + type: boolean + data: {} + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: getApiNodesMe + /api/nodes/status/global: + get: + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + type: boolean + data: {} + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: getApiNodesStatusGlobal + /api/nodes/{nodeId}: + put: + parameters: + - name: nodeId + in: path + required: true + schema: + type: string + - name: authorization + in: header + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - name + - description + - host + - port + - protocol + - isRelay + - maximumBandwidth + - network + - contact + properties: + name: + type: string + description: + type: string + host: + type: string + port: + type: number + protocol: + type: string + enum: + - tcp + - udp + - ws + - wss + isRelay: + type: boolean + maximumBandwidth: + type: number + network: + type: object + required: + - name + - secret + properties: + name: + type: string + secret: + type: string + contact: + type: object + required: + - email + - qq + properties: + email: + nullable: true + anyOf: + - type: string + - type: "null" + qq: + nullable: true + anyOf: + - type: string + - type: "null" + application/x-www-form-urlencoded: + schema: + type: object + required: + - name + - description + - host + - port + - protocol + - isRelay + - maximumBandwidth + - network + - contact + properties: + name: + type: string + description: + type: string + host: + type: string + port: + type: number + protocol: + type: string + enum: + - tcp + - udp + - ws + - wss + isRelay: + type: boolean + maximumBandwidth: + type: number + network: + type: object + required: + - name + - secret + properties: + name: + type: string + secret: + type: string + contact: + type: object + required: + - email + - qq + properties: + email: + nullable: true + anyOf: + - type: string + - type: "null" + qq: + nullable: true + anyOf: + - type: string + - type: "null" + multipart/form-data: + schema: + type: object + required: + - name + - description + - host + - port + - protocol + - isRelay + - maximumBandwidth + - network + - contact + properties: + name: + type: string + description: + type: string + host: + type: string + port: + type: number + protocol: + type: string + enum: + - tcp + - udp + - ws + - wss + isRelay: + type: boolean + maximumBandwidth: + type: number + network: + type: object + required: + - name + - secret + properties: + name: + type: string + secret: + type: string + contact: + type: object + required: + - email + - qq + properties: + email: + nullable: true + anyOf: + - type: string + - type: "null" + qq: + nullable: true + anyOf: + - type: string + - type: "null" + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: "null" + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: putApiNodesByNodeId + /api/apikey/register: + post: + parameters: + - name: authorization + in: header + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - name + - description + - userAgent + properties: + name: + type: string + description: + type: string + userAgent: + type: string + application/x-www-form-urlencoded: + schema: + type: object + required: + - name + - description + - userAgent + properties: + name: + type: string + description: + type: string + userAgent: + type: string + multipart/form-data: + schema: + type: object + required: + - name + - description + - userAgent + properties: + name: + type: string + description: + type: string + userAgent: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: "null" + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + data: + const: Internal Server Error + type: string + operationId: postApiApikeyRegister + /api/apikey/{id}: + put: + parameters: + - name: id + in: path + required: true + schema: + type: number + - name: authorization + in: header + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - name + - description + - userAgent + properties: + name: + type: string + description: + type: string + userAgent: + type: string + application/x-www-form-urlencoded: + schema: + type: object + required: + - name + - description + - userAgent + properties: + name: + type: string + description: + type: string + userAgent: + type: string + multipart/form-data: + schema: + type: object + required: + - name + - description + - userAgent + properties: + name: + type: string + description: + type: string + userAgent: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: "null" + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + data: + const: Internal Server Error + type: string + operationId: putApiApikeyById + delete: + parameters: + - name: id + in: path + required: true + schema: + type: number + - name: authorization + in: header + required: true + schema: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: "null" + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + data: + const: Internal Server Error + type: string + operationId: deleteApiApikeyById + /api/apikey/my: + get: + parameters: + - name: authorization + in: header + required: true + schema: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: array + items: + type: object + required: + - id + - name + - description + - userAgent + - providerUuid + - createdAt + properties: + id: + type: number + name: + type: string + description: + nullable: true + anyOf: + - type: string + - type: "null" + userAgent: + type: string + providerUuid: + type: number + createdAt: + anyOf: + - type: Date + - format: date-time + type: string + - format: date + type: string + - type: number + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + data: + const: Internal Server Error + type: string + operationId: getApiApikeyMy + /api/cluster/challenge: + get: + parameters: + - name: clusterId + in: query + required: true + schema: + type: string + - name: user-agent + in: header + required: true + schema: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: object + required: + - challenge + properties: + challenge: + type: string + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: getApiClusterChallenge + /api/cluster/token: + post: + parameters: + - name: user-agent + in: header + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - clusterId + - challenge + - signature + properties: + clusterId: + type: string + challenge: + type: string + signature: + type: string + application/x-www-form-urlencoded: + schema: + type: object + required: + - clusterId + - challenge + - signature + properties: + clusterId: + type: string + challenge: + type: string + signature: + type: string + multipart/form-data: + schema: + type: object + required: + - clusterId + - challenge + - signature + properties: + clusterId: + type: string + challenge: + type: string + signature: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: object + required: + - token + - ttl + properties: + token: + type: string + ttl: + type: number + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: postApiClusterToken + /api/cluster/refresh: + post: + parameters: + - name: user-agent + in: header + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - clusterId + - token + properties: + clusterId: + type: string + token: + type: string + application/x-www-form-urlencoded: + schema: + type: object + required: + - clusterId + - token + properties: + clusterId: + type: string + token: + type: string + multipart/form-data: + schema: + type: object + required: + - clusterId + - token + properties: + clusterId: + type: string + token: + type: string + responses: + "200": + description: Response for status 200 + content: + application/json: + schema: + type: object + required: + - status + - success + - data + properties: + status: + const: 200 + type: number + success: + const: true + type: boolean + data: + type: object + required: + - token + - ttl + properties: + token: + type: string + ttl: + type: number + "403": + description: Response for status 403 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 403 + type: number + success: + const: false + type: boolean + message: + const: Forbidden + type: string + "500": + description: Response for status 500 + content: + application/json: + schema: + type: object + required: + - status + - success + - message + properties: + status: + const: 500 + type: number + success: + const: false + type: boolean + message: + const: Internal Server Error + type: string + operationId: postApiClusterRefresh +components: + schemas: {} diff --git a/src/App.vue b/src/App.vue index fc2f21d..608e07d 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,69 +1,24 @@