mirror of
https://github.com/zkldi/Tachi.git
synced 2026-10-02 20:08:17 +03:00
Mount ksHookIR and change how fervidex permission mounting works.
This commit is contained in:
@@ -22,6 +22,8 @@ export const AllPermissions: Record<APIPermissions, true> = {
|
||||
delete_score: true,
|
||||
};
|
||||
|
||||
export const SetRequestPermissions: RequestHandler = CreateSetRequestPermissions("description");
|
||||
|
||||
/**
|
||||
* Sets the permissions for this request, alongside the user that is making the request.
|
||||
*
|
||||
@@ -36,61 +38,73 @@ export const AllPermissions: Record<APIPermissions, true> = {
|
||||
*
|
||||
* This is set on req[SYMBOL_TachiAPIAuth].
|
||||
*/
|
||||
export const SetRequestPermissions: RequestHandler = async (req, res, next) => {
|
||||
if (req.session?.tachi?.user.id) {
|
||||
function CreateSetRequestPermissions(errorKeyName: string): RequestHandler {
|
||||
return async (req, res, next) => {
|
||||
if (req.session?.tachi?.user.id) {
|
||||
req[SYMBOL_TachiAPIAuth] = {
|
||||
userID: req.session.tachi.user.id,
|
||||
identifier: `Session-Key ${req.session.tachi.user.id}`,
|
||||
token: null,
|
||||
permissions: AllPermissions,
|
||||
};
|
||||
return next();
|
||||
}
|
||||
|
||||
const header = req.header("Authorization");
|
||||
|
||||
// if no auth was attempted, default to the guest token.
|
||||
if (!header) {
|
||||
req[SYMBOL_TachiAPIAuth] = GuestToken;
|
||||
return next();
|
||||
}
|
||||
|
||||
const { token, type } = SplitAuthorizationHeader(header);
|
||||
|
||||
if (type !== "Bearer") {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
[errorKeyName]: "Invalid Authorization Type - Expected Bearer.",
|
||||
});
|
||||
}
|
||||
|
||||
if (!token) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
[errorKeyName]: "Invalid token.",
|
||||
});
|
||||
}
|
||||
|
||||
const apiTokenData = await db["api-tokens"].findOne({
|
||||
token,
|
||||
});
|
||||
|
||||
if (!apiTokenData) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
[errorKeyName]:
|
||||
"The provided API token does not correspond with any key in the database.",
|
||||
});
|
||||
}
|
||||
|
||||
req[SYMBOL_TachiAPIAuth] = {
|
||||
userID: req.session.tachi.user.id,
|
||||
identifier: `Session-Key ${req.session.tachi.user.id}`,
|
||||
token: null,
|
||||
permissions: AllPermissions,
|
||||
userID: apiTokenData.userID,
|
||||
token,
|
||||
permissions: apiTokenData.permissions,
|
||||
identifier: apiTokenData.identifier,
|
||||
};
|
||||
|
||||
return next();
|
||||
}
|
||||
|
||||
const header = req.header("Authorization");
|
||||
|
||||
// if no auth was attempted, default to the guest token.
|
||||
if (!header) {
|
||||
req[SYMBOL_TachiAPIAuth] = GuestToken;
|
||||
return next();
|
||||
}
|
||||
|
||||
const { token, type } = SplitAuthorizationHeader(header);
|
||||
|
||||
if (type !== "Bearer") {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
description: "Invalid Authorization Type - Expected Bearer.",
|
||||
});
|
||||
}
|
||||
|
||||
if (!token) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
description: "Invalid token.",
|
||||
});
|
||||
}
|
||||
|
||||
const apiTokenData = await db["api-tokens"].findOne({
|
||||
token,
|
||||
});
|
||||
|
||||
if (!apiTokenData) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
description: "The provided API token does not correspond with any key in the database.",
|
||||
});
|
||||
}
|
||||
|
||||
req[SYMBOL_TachiAPIAuth] = {
|
||||
userID: apiTokenData.userID,
|
||||
token,
|
||||
permissions: apiTokenData.permissions,
|
||||
identifier: apiTokenData.identifier,
|
||||
};
|
||||
}
|
||||
|
||||
return next();
|
||||
};
|
||||
/**
|
||||
* An identical implementation of SetRequestPermissions, but returns
|
||||
* fervidex-style errors (error, instead of description).
|
||||
*
|
||||
* @see SetRequestPermissions
|
||||
*/
|
||||
export const SetFervidexStyleRequestPermissions: RequestHandler =
|
||||
CreateSetRequestPermissions("error");
|
||||
|
||||
/**
|
||||
* Returns a middleware that enforces the request has the necessary permissions.
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import { Router } from "express";
|
||||
|
||||
const router: Router = Router({ mergeParams: true });
|
||||
|
||||
export default router;
|
||||
@@ -5,14 +5,16 @@ import directManualIR from "./direct-manual/router";
|
||||
import fervidexIR from "./fervidex/router";
|
||||
import uscIR from "./usc/router";
|
||||
import beatorajaIR from "./beatoraja/router";
|
||||
import ksHookIR from "./kshook/router";
|
||||
import { RequireBokutachi, RequireKamaitachi } from "../../middleware/type-require";
|
||||
import { SetRequestPermissions } from "../../middleware/auth";
|
||||
import { SetFervidexStyleRequestPermissions, SetRequestPermissions } from "../../middleware/auth";
|
||||
|
||||
const router: Router = Router({ mergeParams: true });
|
||||
|
||||
// Common IRs
|
||||
|
||||
router.use("/direct-manual", SetRequestPermissions, directManualIR);
|
||||
router.use("/kshook", SetFervidexStyleRequestPermissions, ksHookIR);
|
||||
|
||||
// Bokutachi IRs
|
||||
|
||||
@@ -24,9 +26,8 @@ router.use("/beatoraja", SetRequestPermissions, RequireBokutachi, beatorajaIR);
|
||||
|
||||
// Kamaitachi IRs
|
||||
|
||||
router.use(SetRequestPermissions);
|
||||
router.use("/barbatos", RequireKamaitachi, barbatosIR);
|
||||
router.use("/chunitachi", RequireKamaitachi, chunitachiIR);
|
||||
router.use("/fervidex", RequireKamaitachi, fervidexIR);
|
||||
router.use("/barbatos", SetRequestPermissions, RequireKamaitachi, barbatosIR);
|
||||
router.use("/chunitachi", SetRequestPermissions, RequireKamaitachi, chunitachiIR);
|
||||
router.use("/fervidex", SetFervidexStyleRequestPermissions, RequireKamaitachi, fervidexIR);
|
||||
|
||||
export default router;
|
||||
|
||||
Reference in New Issue
Block a user