mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-11-23 19:43:09 +02:00
upd: create auth endpoint
This commit is contained in:
parent
4e401408e9
commit
b25e193845
1 changed files with 74 additions and 0 deletions
74
packages/backend/src/server/api/mastodon/endpoints/auth.ts
Normal file
74
packages/backend/src/server/api/mastodon/endpoints/auth.ts
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
import type { MegalodonInterface } from "megalodon";
|
||||||
|
import type { FastifyRequest } from 'fastify';
|
||||||
|
|
||||||
|
const readScope = [
|
||||||
|
"read:account",
|
||||||
|
"read:drive",
|
||||||
|
"read:blocks",
|
||||||
|
"read:favorites",
|
||||||
|
"read:following",
|
||||||
|
"read:messaging",
|
||||||
|
"read:mutes",
|
||||||
|
"read:notifications",
|
||||||
|
"read:reactions",
|
||||||
|
"read:pages",
|
||||||
|
"read:page-likes",
|
||||||
|
"read:user-groups",
|
||||||
|
"read:channels",
|
||||||
|
"read:gallery",
|
||||||
|
"read:gallery-likes",
|
||||||
|
];
|
||||||
|
|
||||||
|
const writeScope = [
|
||||||
|
"write:account",
|
||||||
|
"write:drive",
|
||||||
|
"write:blocks",
|
||||||
|
"write:favorites",
|
||||||
|
"write:following",
|
||||||
|
"write:messaging",
|
||||||
|
"write:mutes",
|
||||||
|
"write:notes",
|
||||||
|
"write:notifications",
|
||||||
|
"write:reactions",
|
||||||
|
"write:votes",
|
||||||
|
"write:pages",
|
||||||
|
"write:page-likes",
|
||||||
|
"write:user-groups",
|
||||||
|
"write:channels",
|
||||||
|
"write:gallery",
|
||||||
|
"write:gallery-likes",
|
||||||
|
];
|
||||||
|
|
||||||
|
export async function apiAuthMastodon(request: FastifyRequest, client: MegalodonInterface) {
|
||||||
|
const body: any = request.body || request.query;
|
||||||
|
try {
|
||||||
|
let scope = body.scopes;
|
||||||
|
if (typeof scope === "string") scope = scope.split(" ");
|
||||||
|
const pushScope = new Set<string>();
|
||||||
|
for (const s of scope) {
|
||||||
|
if (s.match(/^read/)) for (const r of readScope) pushScope.add(r);
|
||||||
|
if (s.match(/^write/)) for (const r of writeScope) pushScope.add(r);
|
||||||
|
}
|
||||||
|
const scopeArr = Array.from(pushScope);
|
||||||
|
|
||||||
|
const red = body.redirect_uris;
|
||||||
|
const appData = await client.registerApp(body.client_name, {
|
||||||
|
scopes: scopeArr,
|
||||||
|
redirect_uris: red,
|
||||||
|
website: body.website,
|
||||||
|
});
|
||||||
|
const returns = {
|
||||||
|
id: Math.floor(Math.random() * 100).toString(),
|
||||||
|
name: appData.name,
|
||||||
|
website: body.website,
|
||||||
|
redirect_uri: red,
|
||||||
|
client_id: Buffer.from(appData.url || "").toString("base64"),
|
||||||
|
client_secret: appData.clientSecret,
|
||||||
|
};
|
||||||
|
|
||||||
|
return returns;
|
||||||
|
} catch (e: any) {
|
||||||
|
console.error(e);
|
||||||
|
return e.response.data;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue