diff --git a/assets/openapi.json b/assets/openapi.json index 8917d9e..bb8268f 100644 --- a/assets/openapi.json +++ b/assets/openapi.json @@ -30,6 +30,17 @@ } }, "schemas": { + "CreateFingerprintResponse": { + "type": "object", + "properties": { + "fingerprint": { + "type": "string" + } + }, + "required": [ + "fingerprint" + ] + }, "ApplicationCommandOption": { "type": "object", "properties": { @@ -4470,7 +4481,7 @@ "sending_dns_records": { "type": "array", "items": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord" + "$ref": "#/components/schemas/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord" } } }, @@ -7993,7 +8004,7 @@ "type": "string" }, "template": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/components/schemas/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -8020,7 +8031,7 @@ "items": { "type": "array", "items": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/components/schemas/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "paging": { @@ -8070,7 +8081,7 @@ "type": "object", "properties": { "template": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/components/schemas/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -8158,7 +8169,7 @@ "type": "string" }, "template": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/components/schemas/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -9212,7 +9223,7 @@ "type": "object", "properties": { "body": { - "$ref": "#/components/schemas/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType" + "$ref": "#/components/schemas/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType" }, "status": { "type": "integer" @@ -17813,7 +17824,7 @@ "length": { "type": "integer" }, - "__@unscopables@689": { + "__@unscopables@691": { "type": "object", "additionalProperties": false, "patternProperties": { @@ -17972,17 +17983,17 @@ "except": { "type": "boolean" }, - "__@iterator@687": { + "__@iterator@689": { "type": "boolean" }, - "__@unscopables@689": { + "__@unscopables@691": { "type": "boolean" } } } }, "required": [ - "__@unscopables@689", + "__@unscopables@691", "length" ] }, @@ -33565,6 +33576,25 @@ ] } }, + "/auth/fingerprint/": { + "post": { + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateFingerprintResponse" + } + } + } + } + }, + "tags": [ + "auth" + ] + } + }, "/attachments/refresh-urls/": { "post": { "security": [ diff --git a/assets/schemas.json b/assets/schemas.json index c8afe2c..3a27520 100644 --- a/assets/schemas.json +++ b/assets/schemas.json @@ -1,4 +1,17 @@ { + "CreateFingerprintResponse": { + "type": "object", + "properties": { + "fingerprint": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "fingerprint" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, "ApplicationCommandSchema": { "type": "object", "properties": { @@ -10699,7 +10712,7 @@ "sending_dns_records": { "type": "array", "items": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord" + "$ref": "#/definitions/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord" } } }, @@ -10720,7 +10733,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord": { + "import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Domains/Domains\",{with:{\"resolution-mode\":\"import\"}}).DNSRecord": { "type": "object", "properties": { "cached": { @@ -14322,7 +14335,7 @@ "type": "string" }, "template": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/definitions/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -14338,7 +14351,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { + "import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { "type": "object", "properties": { "name": { @@ -14365,7 +14378,7 @@ "type": "string" }, "version": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" + "$ref": "#/definitions/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" }, "versions": { "type": "array", @@ -14424,7 +14437,7 @@ "name" ] }, - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { + "import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { "additionalProperties": false, "type": "object", "properties": { @@ -14502,7 +14515,7 @@ "items": { "type": "array", "items": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/definitions/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "paging": { @@ -14543,7 +14556,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { + "import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { "type": "object", "properties": { "name": { @@ -14570,7 +14583,7 @@ "type": "string" }, "version": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" + "$ref": "#/definitions/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" }, "versions": { "type": "array", @@ -14629,7 +14642,7 @@ "name" ] }, - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { + "import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { "additionalProperties": false, "type": "object", "properties": { @@ -14705,7 +14718,7 @@ "type": "object", "properties": { "template": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/definitions/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -14720,7 +14733,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { + "import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { "type": "object", "properties": { "name": { @@ -14747,7 +14760,7 @@ "type": "string" }, "version": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" + "$ref": "#/definitions/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" }, "versions": { "type": "array", @@ -14806,7 +14819,7 @@ "name" ] }, - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { + "import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { "additionalProperties": false, "type": "object", "properties": { @@ -14950,7 +14963,7 @@ "type": "string" }, "template": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" + "$ref": "#/definitions/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate" } }, "additionalProperties": false, @@ -14966,7 +14979,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { + "import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Interfaces/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).IDomainTemplate": { "type": "object", "properties": { "name": { @@ -14993,7 +15006,7 @@ "type": "string" }, "version": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" + "$ref": "#/definitions/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion" }, "versions": { "type": "array", @@ -15052,7 +15065,7 @@ "name" ] }, - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { + "import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Domains/DomainTemplates\",{with:{\"resolution-mode\":\"import\"}}).TemplateVersion": { "additionalProperties": false, "type": "object", "properties": { @@ -16185,7 +16198,7 @@ "type": "object", "properties": { "body": { - "$ref": "#/definitions/import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType" + "$ref": "#/definitions/import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType" }, "status": { "type": "integer" @@ -16197,7 +16210,7 @@ "status" ], "definitions": { - "import(\"/home/cyber/Dokumenty/git-projects/private/spacebar-test-station/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType": { + "import(\"/data/data/com.termux/files/home/server/node_modules/mailgun.js/Types/Types/Suppressions/Suppressions\",{with:{\"resolution-mode\":\"import\"}}).SuppressionDataType": { "anyOf": [ { "type": "object", @@ -17090,13 +17103,13 @@ "Promise": { "type": "object", "properties": { - "__@toStringTag@1292": { + "__@toStringTag@1294": { "type": "string" } }, "additionalProperties": false, "required": [ - "__@toStringTag@1292" + "__@toStringTag@1294" ] }, "Cancel": { @@ -58228,7 +58241,7 @@ "length": { "type": "integer" }, - "__@unscopables@689": { + "__@unscopables@691": { "type": "object", "additionalProperties": false, "patternProperties": { @@ -58387,17 +58400,17 @@ "except": { "type": "boolean" }, - "__@iterator@687": { + "__@iterator@689": { "type": "boolean" }, - "__@unscopables@689": { + "__@unscopables@691": { "type": "boolean" } } } }, "required": [ - "__@unscopables@689", + "__@unscopables@691", "length" ] }, @@ -58451,7 +58464,7 @@ "length": { "type": "integer" }, - "__@unscopables@689": { + "__@unscopables@691": { "type": "object", "additionalProperties": false, "patternProperties": { @@ -58610,17 +58623,17 @@ "except": { "type": "boolean" }, - "__@iterator@687": { + "__@iterator@689": { "type": "boolean" }, - "__@unscopables@689": { + "__@unscopables@691": { "type": "boolean" } } } }, "required": [ - "__@unscopables@689", + "__@unscopables@691", "length" ] }, @@ -117751,7 +117764,7 @@ "length": { "type": "integer" }, - "__@unscopables@689": { + "__@unscopables@691": { "type": "object", "additionalProperties": false, "patternProperties": { @@ -117910,17 +117923,17 @@ "except": { "type": "boolean" }, - "__@iterator@687": { + "__@iterator@689": { "type": "boolean" }, - "__@unscopables@689": { + "__@unscopables@691": { "type": "boolean" } } } }, "required": [ - "__@unscopables@689", + "__@unscopables@691", "length" ] }, diff --git a/src/api/middlewares/Authentication.ts b/src/api/middlewares/Authentication.ts index 0821f81..4bb809a 100644 --- a/src/api/middlewares/Authentication.ts +++ b/src/api/middlewares/Authentication.ts @@ -29,6 +29,7 @@ "POST /auth/verify", "POST /auth/forgot", "POST /auth/reset", + "POST /auth/fingerprint", "GET /invites/", // Routes with a seperate auth system /^(POST|HEAD|GET|PATCH|DELETE) \/webhooks\/\d+\/\w+\/?/, // no token requires auth diff --git a/src/api/routes/auth/fingerprint.ts b/src/api/routes/auth/fingerprint.ts new file mode 100644 index 0000000..d7ef34b --- /dev/null +++ b/src/api/routes/auth/fingerprint.ts @@ -0,0 +1,29 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2023 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +import { route } from "@spacebar/api"; +import { createHash } from "node:crypto"; +import { Snowflake } from "@spacebar/util"; +import { Request, Response, Router } from "express"; +const router = Router({ mergeParams: true }); +router.post("/", route({ responses: { 200: { body: "CreateFingerprintResponse" } } }), (req: Request, res: Response) => { + const snowflake = Snowflake.generate(); + return res.json({ + fingerprint: `${snowflake}.${createHash("sha512").update(snowflake).digest("base64")}`, + }); +}); +export default router; diff --git a/src/schemas/CreateFingerprintResponse.ts b/src/schemas/CreateFingerprintResponse.ts new file mode 100644 index 0000000..3182ad9 --- /dev/null +++ b/src/schemas/CreateFingerprintResponse.ts @@ -0,0 +1,3 @@ +export interface CreateFingerprintResponse { + fingerprint: string; +}