Skip to content

Commit 3157a4e

Browse files
authored
Merge pull request #446 from PretendoNetwork/feat/express-5
Express 5
2 parents de5bf45 + 984a799 commit 3157a4e

File tree

17 files changed

+696
-100
lines changed

17 files changed

+696
-100
lines changed

.github/dependabot.yml

Lines changed: 0 additions & 20 deletions
This file was deleted.

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
- name: Setup Node.js
1818
uses: actions/setup-node@v6
1919
with:
20-
node-version: "20"
20+
node-version: "24"
2121

2222
- name: Install dependencies
2323
run: npm ci

apps/juxtaposition-ui/package.json

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,10 @@
2525
"connect-redis": "^9.0.0",
2626
"cookie-parser": "^1.4.7",
2727
"crc": "^4.3.2",
28-
"express": "^4.22.1",
29-
"express-async-errors": "^3.1.1",
28+
"express": "^5.2.1",
3029
"express-prom-bundle": "^7.0.2",
3130
"express-rate-limit": "^8.2.1",
3231
"express-session": "^1.19.0",
33-
"express-subdomain": "^1.0.6",
3432
"hashmap": "^2.4.0",
3533
"i18next": "^25.8.13",
3634
"luxon": "^3.7.2",
@@ -67,7 +65,7 @@
6765
"@types/hashmap": "^2.3.4",
6866
"@types/luxon": "^3.7.1",
6967
"@types/method-override": "^3.0.0",
70-
"@types/node": "^22.19.15",
68+
"@types/node": "^24.12.0",
7169
"@types/react": "^19.2.14",
7270
"@types/react-dom": "^19.2.3",
7371
"browserslist": "^4.28.1",
@@ -82,4 +80,4 @@
8280
"tsup": "^8.5.1",
8381
"typescript": "^5.9.3"
8482
}
85-
}
83+
}

apps/juxtaposition-ui/src/config.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ const schema = z.object({
6969
host: z.string(),
7070
port: z.coerce.number().default(6379)
7171
}),
72+
domains: z.object({
73+
web: z.hostname().default('juxt.pretendo.network'),
74+
ctr: z.hostname().default('ctr.olv.pretendo.cc'),
75+
portal: z.hostname().default('portal.olv.pretendo.cc')
76+
}).prefault({}),
7277
dmBanner: z.object({
7378
text: z.string().optional(), // Add `<url>content</url>` to insert the url
7479
url: z.url().optional(),
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import type express from 'express';
2+
3+
export function restrictHostnames<TFn extends express.Router>(
4+
allowedHostnames: string[],
5+
fn: TFn
6+
): (request: express.Request, response: express.Response, next: () => void) => void | TFn {
7+
return (request: express.Request, response: express.Response, next: () => void) => {
8+
if (allowedHostnames.includes(request.hostname)) {
9+
return fn(request, response, next);
10+
}
11+
12+
return next();
13+
};
14+
}

apps/juxtaposition-ui/src/server.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import express from 'express';
22
import cookieParser from 'cookie-parser';
33
import session from 'express-session';
44
import { RedisStore } from 'connect-redis';
5-
import 'express-async-errors'; // See package docs
65
import methodOverride from 'method-override';
76
import { database } from '@/database';
87
import { logger } from '@/logger';

apps/juxtaposition-ui/src/services/juxt-web/index.ts

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import express from 'express';
2-
import subdomain from 'express-subdomain';
32
import { webAuth } from '@/middleware/webAuth';
43
import { consoleAuth } from '@/middleware/consoleAuth';
54
import { checkBan } from '@/middleware/checkBan';
65
import { detectVersion } from '@/middleware/detectVersion';
76
import { checkDiscovery } from '@/middleware/discovery';
8-
import { logger } from '@/logger';
97
import { routes } from '@/services/juxt-web/routes';
8+
import { restrictHostnames } from '@/middleware/hostLimit';
9+
import { config } from '@/config';
1010

1111
export const router = express.Router();
1212
const consoleRouter = express.Router();
@@ -20,20 +20,8 @@ router.use(routes.ENTRYPOINT);
2020
router.use(checkDiscovery);
2121

2222
// Create subdomains
23-
logger.info('[JUXT-WEB] Creating \'Web\' subdomain');
24-
router.use(subdomain('juxt', webRouter));
25-
router.use(subdomain('juxt-beta', webRouter));
26-
router.use(subdomain('juxt-dev', webRouter));
27-
28-
logger.info('[JUXT-WEB] Creating \'Wii U\' subdomain');
29-
router.use(subdomain('portal.olv', consoleRouter));
30-
router.use(subdomain('portal-beta.olv', consoleRouter));
31-
router.use(subdomain('portal-dev.olv', consoleRouter));
32-
33-
logger.info('[JUXT-WEB] Creating \'3DS\' subdomain');
34-
router.use(subdomain('ctr.olv', consoleRouter));
35-
router.use(subdomain('ctr-beta.olv', consoleRouter));
36-
router.use(subdomain('ctr-dev.olv', consoleRouter));
23+
router.use(restrictHostnames([config.domains.web], webRouter));
24+
router.use(restrictHostnames([config.domains.portal, config.domains.ctr], consoleRouter));
3725

3826
// Setup routes for console
3927
consoleRouter.use(consoleAuth);

apps/miiverse-api/package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,9 @@
2121
"@repo/grpc-client": "^0.0.0",
2222
"colors": "^1.4.0",
2323
"crc": "^4.3.2",
24-
"express": "^4.22.1",
25-
"express-async-errors": "^3.1.1",
24+
"express": "^5.2.1",
2625
"express-prom-bundle": "^7.0.2",
2726
"express-rate-limit": "^8.2.1",
28-
"express-subdomain": "^1.0.6",
2927
"moment": "^2.24.0",
3028
"mongoose": "^8.23.0",
3129
"multer": "^2.1.1",

apps/miiverse-api/src/config.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,11 @@ const schema = z.object({
5252
port: z.coerce.number().default(8125),
5353
apiKey: z.string()
5454
})
55-
})
55+
}),
56+
domains: z.object({
57+
api: z.hostname().default('api.olv.pretendo.cc'),
58+
discovery: z.hostname().default('discovery.olv.pretendo.cc')
59+
}).prefault({})
5660
});
5761

5862
export const presets: Record<string, any> = {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import type express from 'express';
2+
3+
export function restrictHostnames<TFn extends express.Router>(
4+
allowedHostnames: string[],
5+
fn: TFn
6+
): (request: express.Request, response: express.Response, next: () => void) => void | TFn {
7+
return (request: express.Request, response: express.Response, next: () => void) => {
8+
if (allowedHostnames.includes(request.hostname)) {
9+
return fn(request, response, next);
10+
}
11+
12+
return next();
13+
};
14+
}

0 commit comments

Comments
 (0)