Compare commits

...

2 commits

Author SHA1 Message Date
sam
e3338ef540
add auth-node endpoint 2023-07-23 03:06:24 +02:00
sam
d6834528a7
remove code i left over from mercury, woops 2023-07-22 18:07:13 +02:00
3 changed files with 38 additions and 22 deletions

View file

@ -1,20 +0,0 @@
import { BASE_URL } from "~/config.js";
import { Blog } from "~/db/entities/blog.js";
/** Transforms the given Blog into an ActivityPub Person. It is the caller's responsibility to ensure the blog is local. */
export function blogToActivityPub(blog: Blog) {
return {
"@context": "https://www.w3.org/ns/activitystreams",
type: "Person",
id: `${BASE_URL}/blogs/${blog.username}`,
inbox: `${BASE_URL}/blogs/${blog.username}/inbox`,
outbox: `${BASE_URL}/blogs/${blog.username}/outbox`,
name: blog.username,
preferredUsername: blog.username,
publicKey: {
id: `${BASE_URL}/blogs/${blog.username}#main-key`,
owner: `${BASE_URL}/blogs/${blog.username}`,
publicKeyPem: blog.publicKey,
},
};
}

View file

@ -11,8 +11,8 @@ export const DATABASE_PASS = process.env.DATABASE_PASS || "postgres";
export const DATABASE_NAME = process.env.DATABASE_NAME || "postgres"; export const DATABASE_NAME = process.env.DATABASE_NAME || "postgres";
export const HTTPS = process.env.HTTPS === "true"; export const HTTPS = process.env.HTTPS === "true";
export const DOMAIN = process.env.DOMAIN; export const DOMAIN = process.env.DOMAIN || "";
if (!DOMAIN) throw "$DOMAIN is empty"; if (DOMAIN === "") throw "$DOMAIN is empty";
export const BASE_URL = `${HTTPS ? "https" : "http"}://${DOMAIN}`; export const BASE_URL = `${HTTPS ? "https" : "http"}://${DOMAIN}`;

View file

@ -1,9 +1,45 @@
import { RouteOptions } from "fastify"; import { RouteOptions } from "fastify";
import { BASE_URL, DOMAIN } from "~/config.js";
import { Account } from "~/db/entities/account.js";
import LongmontDataSource from "~/db/index.js";
interface AuthNode {
api_base: string;
name_suffix: string;
software: {
name: string;
version: string;
source: string;
};
features: string[];
registrations: "open" | "approval" | "closed";
usage: {
users: number | null;
};
}
const route: RouteOptions = { const route: RouteOptions = {
method: "GET", method: "GET",
url: "/.well-known/longmont/auth-node", url: "/.well-known/longmont/auth-node",
handler: async (_, res) => { handler: async (_, res) => {
const userCount = await LongmontDataSource.getRepository(Account).count();
res.send({
api_base: BASE_URL,
name_suffix: DOMAIN,
software: {
name: "authsrv",
version: "0.1.0-dev",
source: "https://github.com/longmont-chat",
},
features: [],
registrations: "open",
usage: {
users: userCount,
},
} satisfies AuthNode);
res.status(204); res.status(204);
}, },
}; };