Skip to content

Commit d0d5542

Browse files
author
Rajat Saxena
committed
WIP: Renamed presigned to signature; totally broken API
1 parent 6aabf80 commit d0d5542

26 files changed

Lines changed: 304 additions & 419 deletions

File tree

apps/api/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
"aws-sdk": "^2.1692.0",
4444
"cors": "^2.8.5",
4545
"dotenv": "^16.4.7",
46-
"express": "^5.1.0",
46+
"express": "^4.2.0",
4747
"express-fileupload": "^1.3.1",
4848
"joi": "^17.6.0",
4949
"mongoose": "^8.0.1",

apps/api/src/apikey/middleware.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@ import { BAD_REQUEST, UNAUTHORISED } from "../config/strings";
22
import { getApiKeyUsingKeyId } from "./queries";
33
import { getUser } from "../user/queries";
44
import { Apikey } from "@medialit/models";
5+
import logger from "../services/log";
56

67
export default async function apikey(
78
req: any,
89
res: any,
910
next: (...args: any[]) => void,
1011
) {
11-
const reqKey = req.body.apikey || req.headers["x-medialit-apikey"];
12+
const reqKey = req.body?.apikey || req.headers["x-medialit-apikey"];
1213

1314
if (!reqKey) {
14-
console.log("API key missing in request");
15+
logger.error({}, "API key is missing");
1516
return res.status(400).json({ error: BAD_REQUEST });
1617
}
1718

apps/api/src/config/constants.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,3 @@ export const HOSTNAME_OVERRIDE = process.env.HOSTNAME_OVERRIDE || ""; // Useful
6767
export const TUS_UPLOAD_EXPIRATION_HOURS = parseInt(
6868
process.env.TUS_UPLOAD_EXPIRATION_HOURS || "48",
6969
);
70-
export const TUS_CHUNK_SIZE = parseInt(
71-
process.env.TUS_CHUNK_SIZE || "10485760",
72-
); // 10MB default

apps/api/src/index.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import express from "express";
55
import connectToDatabase from "./config/db";
66
import passport from "passport";
77
import mediaRoutes from "./media/routes";
8-
import presignedUrlRoutes from "./presigning/routes";
8+
import signatureRoutes from "./signature/routes";
99
import mediaSettingsRoutes from "./media-settings/routes";
1010
import tusRoutes from "./tus/routes";
1111
import logger from "./services/log";
1212
import { createUser, findByEmail } from "./user/queries";
13-
import { Apikey, Constants, User } from "@medialit/models";
13+
import { Apikey, User } from "@medialit/models";
1414
import { createApiKey } from "./apikey/queries";
1515
import { spawn } from "child_process";
16-
import { cleanupExpiredTusUploads } from "./tus/queries";
16+
import { Cleanup } from "./tus/cleanup";
1717

1818
connectToDatabase();
1919
const app = express();
@@ -30,7 +30,7 @@ app.get("/health", (req, res) => {
3030
});
3131

3232
app.use("/settings/media", mediaSettingsRoutes(passport));
33-
app.use("/media/presigned", presignedUrlRoutes);
33+
app.use("/media/signature", signatureRoutes);
3434
app.use("/media", tusRoutes);
3535
app.use("/media", mediaRoutes);
3636

@@ -48,10 +48,10 @@ checkDependencies().then(() => {
4848
// Setup background cleanup job for expired tus uploads
4949
setInterval(
5050
async () => {
51-
await cleanupExpiredTusUploads();
51+
await Cleanup();
5252
},
53-
1000 * 60 * 60,
54-
); // Run every hour
53+
1000 * 60 * 60, // 1 hours
54+
);
5555
});
5656

5757
async function checkDependencies() {

apps/api/src/media/handlers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import logger from "../services/log";
1515
import { Request } from "express";
1616
import mediaService from "./service";
1717
import { getMediaCount as getCount, getTotalSpace } from "./queries";
18-
import { Constants, getSubscriptionStatus } from "@medialit/models";
18+
import { getSubscriptionStatus } from "@medialit/models";
1919

2020
function validateUploadOptions(req: Request): Joi.ValidationResult {
2121
const uploadSchema = Joi.object({

apps/api/src/media/routes.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
getMediaCount,
1515
getTotalSpaceOccupied,
1616
} from "./handlers";
17-
import presigned from "../presigning/middleware";
17+
import signatureMiddleware from "../signature/middleware";
1818
import storage from "./storage-middleware";
1919

2020
const router = express.Router();
@@ -31,9 +31,12 @@ router.post(
3131
},
3232
}),
3333
(req: Request, res: Response, next: (...args: any[]) => void) => {
34-
const { signature } = req.query;
34+
const signature =
35+
req.query.signature ||
36+
req.headers["x-medialit-signature"] ||
37+
req.headers["X-Medialit-Signature"];
3538
if (signature) {
36-
presigned(
39+
signatureMiddleware(
3740
req as Request & { user: any; apikey: string },
3841
res,
3942
next,

apps/api/src/media/service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import {
3535
getPaginatedMedia,
3636
createMedia,
3737
} from "./queries";
38-
import * as presignedUrlService from "../presigning/service";
38+
import * as presignedUrlService from "../signature/service";
3939
import getTags from "./utils/get-tags";
4040
import { getMainFileUrl, getThumbnailUrl } from "./utils/get-public-urls";
4141

apps/api/src/presigning/routes.ts

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ function validatePresigningOptions(req: Request): Joi.ValidationResult {
1212
return uploadSchema.validate({ group });
1313
}
1414

15-
export async function getPresignedUrl(
15+
export async function getSignature(
1616
req: any,
1717
res: any,
1818
next: (...args: any[]) => void,
@@ -23,40 +23,13 @@ export async function getPresignedUrl(
2323
}
2424

2525
try {
26-
const presignedUrl = await preSignedUrlService.generateSignedUrl({
26+
const signature = await preSignedUrlService.generateSignature({
2727
userId: req.user.id,
2828
apikey: req.apikey,
2929
protocol: req.protocol,
3030
host: HOSTNAME_OVERRIDE || req.get("Host"),
3131
group: req.body.group,
3232
});
33-
return res.status(200).json({ message: presignedUrl });
34-
} catch (err: any) {
35-
logger.error({ err }, err.message);
36-
return res.status(500).json(err.message);
37-
}
38-
}
39-
40-
export async function getPresignedTusUrl(
41-
req: any,
42-
res: any,
43-
next: (...args: any[]) => void,
44-
) {
45-
const { error } = validatePresigningOptions(req);
46-
if (error) {
47-
return res.status(400).json({ error: error.message });
48-
}
49-
50-
try {
51-
const presignedUrl = await preSignedUrlService.generateSignedUrlForTus({
52-
userId: req.user.id,
53-
apikey: req.apikey,
54-
protocol: req.protocol,
55-
host: HOSTNAME_OVERRIDE || req.get("Host"),
56-
group: req.body.group,
57-
});
58-
// Extract signature from the URL
59-
const signature = presignedUrl.split("signature=")[1];
6033
return res.status(200).json({ signature });
6134
} catch (err: any) {
6235
logger.error({ err }, err.message);
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ import { Request, Response } from "express";
22
import { PRESIGNED_URL_INVALID } from "../config/strings";
33
import * as preSignedUrlService from "./service";
44

5-
export default async function presigned(
5+
export default async function signature(
66
req: Request & { user?: any; apikey?: string },
77
res: Response,
88
next: (...args: any[]) => void,
99
) {
1010
const signature =
11-
req.query.signature || req.headers["x-medialit-signature"];
11+
req.query.signature ||
12+
req.headers["x-medialit-signature"] ||
13+
req.headers["X-Medialit-Signature"];
1214

1315
const response = await preSignedUrlService.getUserAndGroupFromPresignedUrl(
1416
signature as string,

0 commit comments

Comments
 (0)