From 9757997e5d4814de32b9fd44bf8004d9869ebd71 Mon Sep 17 00:00:00 2001 From: doesnm Date: Mon, 20 Oct 2025 21:51:58 +0300 Subject: [PATCH] add fingerprint endpoint --- assets/openapi.json | Bin 1382249 -> 1382990 bytes assets/schemas.json | Bin 4233511 -> 4233209 bytes src/api/middlewares/Authentication.ts | 1 + src/api/routes/auth/fingerprint.ts | 29 +++++++++++++++++++++++ src/schemas/CreateFingerprintResponse.ts | 3 +++ 5 files changed, 33 insertions(+) create mode 100644 src/api/routes/auth/fingerprint.ts create mode 100644 src/schemas/CreateFingerprintResponse.ts diff --git a/assets/openapi.json b/assets/openapi.json index 8917d9e6a967870d272113bd0c1f98c3dd7786b7..bb8268f57b5999904fcacf777f76380eb755ee19 100644 GIT binary patch delta 607 zcmaF4F67*nkPS{Olld31al2*arKc7Z6lLa>OgFS)NtynxgwJn!0UNtJh{ZFVIh9*~ z`aWYWq2>^l_7E0EAZ7w$=ItRYEUOIVQxZ!O^}$4Pey(0gYEf=!g??IQPHM4!Mt*K; zyR8`u5VLN#HDil8M@aQ_UrzRg+a1)|7cp*^W@rD*NJztWpausHLaM;VP6rx0efoq@ zHkRq@McG-WJFu~zoGxI=!nXa6FnbplQD%UgHi2>bH3jx78wqLv`dp`7^fEgTa{w_X z5OZx8z0Cc)o6&Om#TEg%=>>u;oYM{XIW-}y4-?qzr#p0U8G*UmpTzUz%T5=J=TQUm zr)6`gPEW{U5t!bvf?Z=;JdXg(7=;%sf(Y3Ky(~)8CoJH%oSqQEB0YVB54#pb@#My* zitTFkJV49~#C$-^55xjMEC|FxKrFmntzP7d#B_%u5f<(=q=a$NS3r0B0bfCBMnUJI b)Wnih2CR z6NT8-+B?iyfS7fAhdG=x{6jB6vaS+o*sDlbp7Z)9MY6XYtp#KO$w{xlJ!S8rE{yg0Oo_p|k z%&=4*Gq^^X7ng5;P94mv@zn5HH8+w=4O8}&F-S9)O!f47HWnqX$oi`%JN5R7{WNg5 zk(FLLt=D8t7BtzQ$wo~!X|h?9Et+h7B8!nj4W|e5gMnYSQ<=0sujbN)i-9w#A@zLV zTqdnjG9hNUv0HQ)^rA&X!N!vb)|AmplXIR;(#UPk1*#ksMS9aMx~RO!qNNToOUY4_ zhknd4rZGk3ZFQn`G zTSQ9ZopVypRiTykeXn~;T?u~X4GW=Jq4xoKhk}_|Bq5p_`v$R=!kFj$2n?=slt6o>ssIn_x3+fvwO8O|T8NLo@7v so#2N6v_KGc!ER`UHVDBUXooOFU@vq)Cq%h>I`+J0MJn-0)-^Hl6R}rIWdHyG delta 2221 zcmdtj-Ahwp90zdD+1$>HFY|3yHr=sOOSfZ|Z7y@Wuyi1_UWA0am~t$gZeu$J7Li&o z1d)MpenD8?NEcn0UHIUYL{LE&3EmZ5D_(?j6G=qh`7a!i@Ztjp9?tjS`99Bi&hMou z{?*$lo_`?G@=R^T;~1BTaXCC#zzTU_13QaxLZCBvH!-TI1LOT#O6^F*#zwWcKCa#w z(mlykVpto{(`qs`bT6uFYC0Jm(E6h(kFKS4Pg;-aLy5StD+So!F5xo2A4!BHA8q<= zW#mY=c4oZY0*K7pE!~croq%>KiRlqWf}Q4CS4)ojYjuCySU4Z#LHV(nIWM4-G z8@B=mVZg>BowAdgYl_>*5tG{~GA)%;_N(;F>}vnZ;#u&gbansgo}ua=l1PyaspYVC zmMAuR5Dxpt%(lGpH^Xd8xEvZ;;Rm_T^y$nc5t4dY(I+`P!8KF#b=4|e>B=v`^K!(} zl<5iQLje>*5jdb2N}v?Vpd6e~0Y~5{9D_+vX^y ziB(sCk|ULQ^zy#aJh%Q)WDmE32^Z(1cfSOW@yA(<8_Qt~i}m#4rsBxGKS=9?7KK93 zEqizP@xIVLNlC$^Uwkpzz2S4g#cWHHn;@sY|MYB diff --git a/src/api/middlewares/Authentication.ts b/src/api/middlewares/Authentication.ts index 0821f811..4bb809a6 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 00000000..d7ef34b4 --- /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 00000000..3182ad9e --- /dev/null +++ b/src/schemas/CreateFingerprintResponse.ts @@ -0,0 +1,3 @@ +export interface CreateFingerprintResponse { + fingerprint: string; +}