import { ActionInfo } from "./common" export const Permission = { Start: 1, Stop: 1 << 1, Browse: 1 << 2, Create: 1 << 3, Delete: 1 << 4, RunCommand: 1 << 5, Admin: 1 << 6, Cloud: 1 << 7, } const definitions = { ChangeUserRequest: { properties: { permissions: { items: { "$ref": "#/definitions/Permission" }, type: "array", title: "Permissions" } }, type: "object", required: [ "permissions" ], title: "ChangeUserRequest" }, CreateUserRequest: { properties: { username: { type: "string", title: "Username" }, password: { type: "string", title: "Password" } }, type: "object", required: [ "username", "password" ], title: "CreateUserRequest" }, FileBrowserInfo: { properties: { id_: { type: "string", title: "Id " }, owner_id: { type: "string", title: "Owner Id" }, domain: { type: "string", title: "Domain" }, connected_to: { "$ref": "#/definitions/ServerInfo" }, url: { type: "string", title: "Url", readOnly: true } }, type: "object", required: [ "id_", "owner_id", "domain", "connected_to", "url" ], title: "FileBrowserInfo" }, HTTPValidationError: { properties: { detail: { items: { "$ref": "#/definitions/ValidationError" }, type: "array", title: "Detail" } }, type: "object", title: "HTTPValidationError" }, ImageInfo: { properties: { name: { type: "string", title: "Name" }, version: { type: "string", title: "Version" }, ports: { items: { "$ref": "#/definitions/Port-Output" }, type: "array", uniqueItems: true, title: "Ports" }, id_: { type: "string", title: "Id ", readOnly: true }, display_name: { type: "string", title: "Display Name", readOnly: true } }, type: "object", required: [ "name", "version", "id_", "display_name" ], title: "ImageInfo" }, PasswordRequestForm: { properties: { username: { type: "string", title: "Username" }, password: { type: "string", title: "Password" }, remember: { anyOf: [ { type: "boolean" }, { type: "string" } ], title: "Remember", default: false } }, type: "object", required: [ "username", "password" ], title: "PasswordRequestForm" }, Permission: { type: "number", enum: [ "create", "start", "browse", "cloud", "run-command", "delete", "stop", "admin" ], title: "Permission" }, "Port-Input": { properties: { number: { type: "integer", exclusiveMaximum: 65535, exclusiveMinimum: 1, title: "Number" }, protocol: { "$ref": "#/definitions/PortProtocol" } }, type: "object", required: [ "number", "protocol" ], title: "Port" }, "Port-Output": { properties: { number: { type: "integer", exclusiveMaximum: 65535, exclusiveMinimum: 1, title: "Number" }, protocol: { "$ref": "#/definitions/PortProtocol" }, id_: { type: "string", title: "Id ", readOnly: true } }, type: "object", required: [ "number", "protocol", "id_" ], title: "Port" }, PortMapping: { properties: { source_port: { "$ref": "#/definitions/Port-Input" }, destination_port: { anyOf: [ { "$ref": "#/definitions/Port-Input" }, { type: "null" } ] } }, type: "object", required: [ "source_port" ], title: "PortMapping" }, PortProtocol: { type: "string", enum: [ "tcp", "udp" ], title: "PortProtocol" }, ServerInfo: { properties: { id_: { type: "string", title: "Id " }, user_id: { type: "string", title: "User Id" }, image: { "$ref": "#/definitions/ImageInfo" }, on: { type: "boolean", title: "On" }, domain: { anyOf: [ { type: "string" }, { type: "null" } ], title: "Domain" }, ports: { anyOf: [ { items: { "$ref": "#/definitions/Port-Output" }, type: "array", uniqueItems: true }, { type: "null" } ], title: "Ports" }, nickname: { anyOf: [ { type: "string" }, { type: "null" } ], title: "Nickname" } }, type: "object", required: [ "id_", "user_id", "image", "on" ], title: "ServerInfo" }, SetServerNicknameRequest: { properties: { nickname: { type: "string", title: "Nickname" } }, type: "object", required: [ "nickname" ], title: "SetServerNicknameRequest" }, Token: { properties: { access_token: { type: "string", title: "Access Token" }, token_type: { type: "string", title: "Token Type" } }, type: "object", required: [ "access_token", "token_type" ], title: "Token" }, UserView: { properties: { username: { type: "string", title: "Username" }, email: { type: "string", title: "Email" }, max_owned_servers: { type: "integer", title: "Max Owned Servers", default: 5 }, permissions: { items: { "$ref": "#/definitions/Permission" }, type: "array", title: "Permissions" } }, type: "object", required: [ "username", "email" ], title: "UserView" }, ValidationError: { properties: { loc: { items: { anyOf: [ { type: "string" }, { type: "integer" } ] }, type: "array", title: "Location" }, msg: { type: "string", title: "Message" }, type: { type: "string", title: "Error Type" } }, type: "object", required: [ "loc", "msg", "type" ], title: "ValidationError" } } export const SERVER_ACTIONS: ActionInfo[] = [ { name: "Start", args: { properties: { ports: { items: { "$ref": "#/definitions/PortMapping" }, type: "array", title: "Ports", default: [] }, command: { type: "string", title: "Command" } }, type: "object", title: "Start Server", definitions: definitions, }, requestType: "post", endpoint: "/servers/{server_id}/start", permissions: Permission.Start, response_action: "Ignore", ServerState: "off", }, { name: "Stop", args: { title: "Stop", type: "object", required: [], properties: {}, default: {} }, requestType: "post", endpoint: "/servers/{server_id}/stop", permissions: Permission.Stop, response_action: "Ignore", ServerState: "on", }, { name: "Terminal", args: { }, requestType: "post", endpoint: "/servers/{server_id}/attach", permissions: Permission.RunCommand, response_action: "Terminal", ServerState: "on", }, { name: "Delete Server", args: { title: "Delete Server", type: "object", required: [], properties: {}, default: {} }, requestType: "delete", endpoint: "/servers/{server_id}", permissions: Permission.Delete, response_action: "Ignore" }, { name: "Run Command", args: { properties: { command: { type: "string", title: "Command" } }, type: "object", required: [ "command" ], title: "Run Command", definitions: definitions, }, requestType: "post", endpoint: "/servers/{server_id}/run_command", permissions: Permission.RunCommand, response_action: "Ignore", ServerState: "on", }, { name: "Browse", args: { title: "Browse", type: "object", required: [], properties: {}, default: {} }, requestType: "post", endpoint: "/servers/{server_id}/browse", permissions: Permission.Browse, response_action: "Browse" }, { name: "Update Server", requestType: "patch", endpoint: "/servers/{server_id}", permissions: Permission.Admin, response_action: "Ignore", args: { title: "Update Server", type: "object", required: [], properties: { DefaultPorts: { type: "array", title: "Default Ports", items: { "$ref": "#/definitions/Port-Input" } }, DefaultCommand: { type: "string", title: "Default Command" }, Nickname: { type: "string", title: "Nickname" } }, definitions: definitions, }, }, { name: "Add Permissions", requestType: "post", endpoint: "/servers/{server_id}/permissions", permissions: Permission.Admin, response_action: "Ignore", args: { properties: { Username: { type: "string", title: "Username", fetch_display_path: "Username", fetch_key_path: "Username", fetch_url: "/users" }, Permissions: { type: "number", title: "Permissions", permissions: true, } }, type: "object", required: [ "Username" ], default: { Permissions: 0 }, title: "Set User Permissions", definitions: definitions, }, }, ] export const CREATE_SERVER_ACTION: ActionInfo = { name: "Create Server", args: { properties: { ImageId: { type: "string", title: "Image Id", fetch_display_path: "DisplayName", fetch_key_path: "Id", fetch_url: "/images" }, Nickname: { type: "string", title: "Server Nickname" }, DefaultCommand: { type: "string", title: "Default Command" }, DefaultPorts: { items: { "$ref": "#/definitions/Port-Input" }, type: "array", title: "Default Ports", } }, type: "object", required: [ "ImageId" ], title: "Create Server", definitions: definitions, }, requestType: "post", endpoint: "/servers", permissions: Permission.Create, response_action: "Ignore" } export const INVITE_USER_ACTION: ActionInfo = { name: "Invite User", args: { properties: { email: { type: "string", title: "Email" }, permissions: { type: "number", title: "Permissions", permissions: true, } }, type: "object", required: [ "email" ], title: "Invite User", definitions: definitions, }, requestType: "post", endpoint: "/users", permissions: Permission.Admin, response_action: "Ignore" } export const USERS_ACTIONS: ActionInfo[] = [ { name: "Delete User", args: {}, requestType: "delete", endpoint: "/users/{username}", permissions: Permission.Admin, response_action: "Ignore" }, { name: "Change Permissions", args: { properties: { Permissions: { type: "number", title: "Permissions", permissions: true, } }, type: "object", required: [], default: { Permissions: 0 }, title: "Set User Permissions", definitions: definitions, }, requestType: "patch", endpoint: "/users/{username}/permissions", permissions: Permission.Admin, response_action: "Ignore" }, ] export const BROWSER_ACTIONS: ActionInfo[] = [ { name: "Stop Browser", requestType: "post", endpoint: "/browsers/{browser_id}/stop", args: {}, permissions: Permission.Browse, response_action: "Ignore" } ]