Small refactors

This commit is contained in:
Jesse Wierzbinski 2023-09-26 12:33:43 -10:00
parent 2cadb68a56
commit 3b452d66aa
22 changed files with 165 additions and 76 deletions

View file

@ -45,7 +45,7 @@ export default async (
// TODO: Add authentication
// Check is Activity already exists
const activity = await RawActivity.addIfNotExists(body);
const activity = await RawActivity.createIfNotExists(body);
if (activity instanceof Response) {
return activity;
@ -65,7 +65,7 @@ export default async (
return object;
}
const activity = await RawActivity.addIfNotExists(body, object);
const activity = await RawActivity.createIfNotExists(body, object);
if (activity instanceof Response) {
return activity;
@ -87,7 +87,7 @@ export default async (
}
// Store the Delete event in the database
const activity = await RawActivity.addIfNotExists(body);
const activity = await RawActivity.createIfNotExists(body);
if (activity instanceof Response) {
return activity;

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
import { Relationship } from "~database/entities/Relationship";
@ -19,7 +18,7 @@ export default async (
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { parseRequest } from "@request";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
@ -20,7 +19,7 @@ export default async (
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,7 +1,7 @@
import { getUserByToken } from "@auth";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
import { RawActor } from "~database/entities/RawActor";
import { User } from "~database/entities/User";
/**
* Fetch a user
@ -13,8 +13,12 @@ export default async (
const id = matchedRoute.params.id;
// Check auth token
const token = req.headers.get("Authorization")?.split(" ")[1] || null;
const user = await getUserByToken(token);
const token = req.headers.get("Authorization")?.split(" ")[1];
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const user = await User.retrieveFromToken(token);
let foundUser: RawActor | null;
try {

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { parseRequest } from "@request";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
@ -20,7 +19,7 @@ export default async (
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { parseRequest } from "@request";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
@ -20,7 +19,7 @@ export default async (
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
import { Relationship } from "~database/entities/Relationship";
@ -19,7 +18,7 @@ export default async (
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
import { Relationship } from "~database/entities/Relationship";
@ -19,7 +18,7 @@ export default async (
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
import { Relationship } from "~database/entities/Relationship";
@ -19,7 +18,7 @@ export default async (
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
import { Relationship } from "~database/entities/Relationship";
@ -19,7 +18,7 @@ export default async (
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
import { Relationship } from "~database/entities/Relationship";
@ -19,7 +18,7 @@ export default async (
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
import { Relationship } from "~database/entities/Relationship";
@ -19,7 +18,7 @@ export default async (
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { parseRequest } from "@request";
import { errorResponse, jsonResponse } from "@response";
import { User } from "~database/entities/User";
@ -14,7 +13,7 @@ export default async (req: Request): Promise<Response> => {
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,4 +1,3 @@
import { getUserByToken } from "@auth";
import { parseRequest } from "@request";
import { errorResponse, jsonResponse } from "@response";
import { Relationship } from "~database/entities/Relationship";
@ -14,7 +13,7 @@ export default async (req: Request): Promise<Response> => {
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const self = await getUserByToken(token);
const self = await User.retrieveFromToken(token);
if (!self) return errorResponse("Unauthorized", 401);

View file

@ -1,7 +1,7 @@
import { getUserByToken } from "@auth";
import { getConfig } from "@config";
import { parseRequest } from "@request";
import { errorResponse, jsonResponse } from "@response";
import { User } from "~database/entities/User";
/**
* Patches a user
@ -17,27 +17,35 @@ export default async (req: Request): Promise<Response> => {
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const user = await getUserByToken(token);
const user = await User.retrieveFromToken(token);
if (!user) return errorResponse("Unauthorized", 401);
const config = getConfig();
const { display_name, note, avatar, header, locked, bot, discoverable } =
await parseRequest<{
display_name: string;
note: string;
avatar: File;
header: File;
locked: string;
bot: string;
discoverable: string;
}>(req);
// TODO: Implement other options like field or source
// const source_privacy = body.get("source[privacy]")?.toString() || null;
// const source_sensitive = body.get("source[sensitive]")?.toString() || null;
// const source_language = body.get("source[language]")?.toString() || null;
const {
display_name,
note,
avatar,
header,
locked,
bot,
discoverable,
"source[privacy]": source_privacy,
"source[sensitive]": source_sensitive,
"source[language]": source_language,
} = await parseRequest<{
display_name: string;
note: string;
avatar: File;
header: File;
locked: string;
bot: string;
discoverable: string;
"source[privacy]": string;
"source[sensitive]": string;
"source[language]": string;
}>(req);
if (display_name) {
// Check if within allowed display name lengths
@ -66,6 +74,36 @@ export default async (req: Request): Promise<Response> => {
user.note = note;
}
if (source_privacy) {
// Check if within allowed privacy values
if (
!["public", "unlisted", "private", "direct"].includes(
source_privacy
)
) {
return errorResponse(
"Privacy must be one of public, unlisted, private, or direct",
422
);
}
user.source.privacy = source_privacy;
}
if (source_sensitive) {
// Check if within allowed sensitive values
if (source_sensitive !== "true" && source_sensitive !== "false") {
return errorResponse("Sensitive must be a boolean", 422);
}
user.source.sensitive = source_sensitive === "true";
}
if (source_language) {
// TODO: Check if proper ISO code
user.source.language = source_language;
}
if (avatar) {
// Check if within allowed avatar length (avatar is an image)
if (avatar.size > config.validation.max_avatar_size) {

View file

@ -1,5 +1,5 @@
import { getUserByToken } from "@auth";
import { errorResponse, jsonResponse } from "@response";
import { User } from "~database/entities/User";
/**
* Patches a user
@ -16,7 +16,7 @@ export default async (req: Request): Promise<Response> => {
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const user = await getUserByToken(token);
const user = await User.retrieveFromToken(token);
if (!user) return errorResponse("Unauthorized", 401);

View file

@ -1,6 +1,6 @@
import { getUserByToken } from "@auth";
import { errorResponse, jsonResponse } from "@response";
import { Application } from "~database/entities/Application";
import { User } from "~database/entities/User";
/**
* Returns OAuth2 credentials
@ -12,7 +12,7 @@ export default async (req: Request): Promise<Response> => {
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const user = await getUserByToken(token);
const user = await User.retrieveFromToken(token);
const application = await Application.getFromToken(token);
if (!user) return errorResponse("Unauthorized", 401);

View file

@ -1,8 +1,8 @@
import { getUserByToken } from "@auth";
import { errorResponse, jsonResponse } from "@response";
import { MatchedRoute } from "bun";
import { RawObject } from "~database/entities/RawObject";
import { Status } from "~database/entities/Status";
import { User } from "~database/entities/User";
/**
* Fetch a user
@ -15,7 +15,11 @@ export default async (
// Check auth token
const token = req.headers.get("Authorization")?.split(" ")[1] || null;
const user = await getUserByToken(token);
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const user = await User.retrieveFromToken(token);
// TODO: Add checks for user's permissions to view this status

View file

@ -1,10 +1,10 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import { getUserByToken } from "@auth";
import { getConfig } from "@config";
import { parseRequest } from "@request";
import { errorResponse, jsonResponse } from "@response";
import { Application } from "~database/entities/Application";
import { Status } from "~database/entities/Status";
import { User } from "~database/entities/User";
/**
* Post new status
@ -20,7 +20,7 @@ export default async (req: Request): Promise<Response> => {
if (!token)
return errorResponse("This method requires an authenticated user", 422);
const user = await getUserByToken(token);
const user = await User.retrieveFromToken(token);
const application = await Application.getFromToken(token);
if (!user) return errorResponse("Unauthorized", 401);