Skip to content

Commit 839b831

Browse files
committed
only gitranks.com can trigger graphql endpoint
1 parent 843b305 commit 839b831

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

app/api/badge/[login]/route.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { redirect } from 'next/navigation';
22
import { NextRequest } from 'next/server';
3-
import { BadgeTemplateType, BadgeType } from '@/badge/badge.types';
3+
import { BadgeTemplateType, BadgeType, ThemeType } from '@/badge/badge.types';
44
import { renderSmallBadge } from '@/badge/templates/small/small.render';
55
import { renderMediumBadge } from '@/badge/templates/medium/medium.render';
66

@@ -16,12 +16,12 @@ const getRendererByTemplate = (template: BadgeTemplateType) => {
1616
};
1717

1818
export async function GET(req: NextRequest, { params }: Props) {
19-
const theme = 'light';
2019
const { login } = await params;
2120

2221
const searchParams = req.nextUrl.searchParams;
2322
const type = searchParams.get('type') as BadgeType;
2423
const template = searchParams.get('template') as BadgeTemplateType;
24+
const theme = (searchParams.get('theme') ?? 'light') as ThemeType;
2525

2626
const svg = await getRendererByTemplate(template)({ theme, login, type });
2727

app/api/graphql/route.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
import { NextRequest, NextResponse } from 'next/server';
22

33
export async function POST(req: NextRequest) {
4+
const isProd = process.env.NODE_ENV === 'production';
5+
6+
if (isProd) {
7+
const origin = req.headers.get('origin') || req.headers.get('referer');
8+
const host = req.headers.get('host');
9+
const protocol = req.headers.get('x-forwarded-proto') || 'https';
10+
const expectedOrigin = `${protocol}://${host}`;
11+
12+
if (!origin || !origin.startsWith(expectedOrigin)) {
13+
return NextResponse.json({ error: 'Forbidden' }, { status: 403 });
14+
}
15+
}
16+
417
try {
518
const { query, variables } = await req.json();
619

0 commit comments

Comments
 (0)