diff --git a/src/api/middlewares/Authentication.ts b/src/api/middlewares/Authentication.ts
index 0821f811b..4bb809a67 100644
--- a/src/api/middlewares/Authentication.ts
+++ b/src/api/middlewares/Authentication.ts
@@ -29,6 +29,7 @@ export const NO_AUTHORIZATION_ROUTES = [
"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 000000000..d7ef34b4f
--- /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 <https://www.gnu.org/licenses/>.
+*/
+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 000000000..3182ad9e0
--- /dev/null
+++ b/src/schemas/CreateFingerprintResponse.ts
@@ -0,0 +1,3 @@
+export interface CreateFingerprintResponse {
+ fingerprint: string;
+}
|