mirror of
https://github.com/umami-software/umami.git
synced 2026-02-10 23:57:12 +01:00
Check for valid urls.
This commit is contained in:
parent
6466cef269
commit
e2523d2604
2 changed files with 19 additions and 4 deletions
|
|
@ -9,6 +9,7 @@ import { getClientInfo, hasBlockedIp } from '@/lib/detect';
|
||||||
import { secret, uuid, visitSalt } from '@/lib/crypto';
|
import { secret, uuid, visitSalt } from '@/lib/crypto';
|
||||||
import { COLLECTION_TYPE } from '@/lib/constants';
|
import { COLLECTION_TYPE } from '@/lib/constants';
|
||||||
import { createSession, saveEvent, saveSessionData } from '@/queries';
|
import { createSession, saveEvent, saveSessionData } from '@/queries';
|
||||||
|
import { urlOrPathParam } from '@/lib/schema';
|
||||||
|
|
||||||
const schema = z.object({
|
const schema = z.object({
|
||||||
type: z.enum(['event', 'identify']),
|
type: z.enum(['event', 'identify']),
|
||||||
|
|
@ -17,11 +18,11 @@ const schema = z.object({
|
||||||
data: z.object({}).passthrough().optional(),
|
data: z.object({}).passthrough().optional(),
|
||||||
hostname: z.string().max(100).optional(),
|
hostname: z.string().max(100).optional(),
|
||||||
language: z.string().max(35).optional(),
|
language: z.string().max(35).optional(),
|
||||||
referrer: z.string().optional(),
|
referrer: urlOrPathParam,
|
||||||
screen: z.string().max(11).optional(),
|
screen: z.string().max(11).optional(),
|
||||||
title: z.string().optional(),
|
title: z.string().optional(),
|
||||||
url: z.string().optional(),
|
url: urlOrPathParam,
|
||||||
name: z.string().max(50).optional(),
|
name: z.string().url().max(50).optional(),
|
||||||
tag: z.string().max(50).optional(),
|
tag: z.string().max(50).optional(),
|
||||||
ip: z.string().ip().optional(),
|
ip: z.string().ip().optional(),
|
||||||
userAgent: z.string().optional(),
|
userAgent: z.string().optional(),
|
||||||
|
|
@ -129,7 +130,7 @@ export async function POST(request: Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type === COLLECTION_TYPE.event) {
|
if (type === COLLECTION_TYPE.event) {
|
||||||
const base = hostname ? `http://${hostname}` : 'http://localhost';
|
const base = hostname ? `https://${hostname}` : 'https://localhost';
|
||||||
const currentUrl = new URL(url, base);
|
const currentUrl = new URL(url, base);
|
||||||
|
|
||||||
let urlPath = currentUrl.pathname;
|
let urlPath = currentUrl.pathname;
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,20 @@ export const unitParam = z.string().refine(value => UNIT_TYPES.includes(value),
|
||||||
|
|
||||||
export const roleParam = z.enum(['team-member', 'team-view-only', 'team-manager']);
|
export const roleParam = z.enum(['team-member', 'team-view-only', 'team-manager']);
|
||||||
|
|
||||||
|
export const urlOrPathParam = z.string().refine(
|
||||||
|
value => {
|
||||||
|
try {
|
||||||
|
new URL(value, 'https://localhost');
|
||||||
|
return true;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
message: 'Invalid URL.',
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
export const reportTypeParam = z.enum([
|
export const reportTypeParam = z.enum([
|
||||||
'funnel',
|
'funnel',
|
||||||
'insights',
|
'insights',
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue