mirror of
https://github.com/kremalicious/umami.git
synced 2024-11-16 02:05:04 +01:00
commit
c7275ef85b
@ -12,8 +12,8 @@ RUN yarn install --frozen-lockfile
|
||||
FROM node:18-alpine AS builder
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY docker/middleware.js .
|
||||
COPY . .
|
||||
COPY docker/middleware.js ./src
|
||||
|
||||
ARG DATABASE_TYPE
|
||||
ARG BASE_PATH
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "umami",
|
||||
"version": "2.6.1",
|
||||
"version": "2.6.2",
|
||||
"description": "A simple, fast, privacy-focused alternative to Google Analytics.",
|
||||
"author": "Mike Cao <mike@mikecao.com>",
|
||||
"license": "MIT",
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,5 @@
|
||||
import { useEffect, useCallback, useState } from 'react';
|
||||
import { createPortal } from 'react-dom';
|
||||
import { Button, Row, Column } from 'react-basics';
|
||||
import { setItem } from 'next-basics';
|
||||
import useStore, { checkVersion } from 'store/version';
|
||||
@ -44,7 +45,7 @@ export function UpdateNotice({ user, config }) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
return createPortal(
|
||||
<Row className={styles.notice}>
|
||||
<Column variant="two" className={styles.message}>
|
||||
{formatMessage(messages.newVersionAvailable, { version: `v${latest}` })}
|
||||
@ -55,7 +56,8 @@ export function UpdateNotice({ user, config }) {
|
||||
</Button>
|
||||
<Button onClick={handleDismissClick}>{formatMessage(labels.dismiss)}</Button>
|
||||
</Column>
|
||||
</Row>
|
||||
</Row>,
|
||||
document.body,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -2,13 +2,14 @@
|
||||
position: absolute;
|
||||
max-width: 800px;
|
||||
gap: 20px;
|
||||
margin: 20px auto;
|
||||
justify-self: center;
|
||||
margin: 80px auto;
|
||||
align-self: center;
|
||||
background: var(--base50);
|
||||
padding: 20px;
|
||||
border: 1px solid var(--base300);
|
||||
border-radius: var(--border-radius);
|
||||
z-index: var(--z-index-popup);
|
||||
box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.message {
|
||||
|
@ -1,211 +1,211 @@
|
||||
{
|
||||
"label.access-code": "Access code",
|
||||
"label.access-code": "Koda za dostop",
|
||||
"label.actions": "Dejanja",
|
||||
"label.activity-log": "Activity log",
|
||||
"label.add": "Add",
|
||||
"label.add-description": "Add description",
|
||||
"label.activity-log": "Dnevnik dejavnosti",
|
||||
"label.add": "Dodaj",
|
||||
"label.add-description": "Dodaj opis",
|
||||
"label.add-website": "Dodaj spletno mesto",
|
||||
"label.admin": "Administrator",
|
||||
"label.after": "After",
|
||||
"label.all": "Vse",
|
||||
"label.all-time": "All time",
|
||||
"label.analytics": "Analytics",
|
||||
"label.average": "Average",
|
||||
"label.after": "Po",
|
||||
"label.all": "Vsi",
|
||||
"label.all-time": "Ves čas",
|
||||
"label.analytics": "Analitika",
|
||||
"label.average": "Povprečno",
|
||||
"label.average-visit-time": "Povprečni čas obiska",
|
||||
"label.back": "Nazaj",
|
||||
"label.before": "Before",
|
||||
"label.bounce-rate": "Zapustna stopnja",
|
||||
"label.breakdown": "Breakdown",
|
||||
"label.browser": "Browser",
|
||||
"label.before": "Pred",
|
||||
"label.bounce-rate": "Odbojna stopnja",
|
||||
"label.breakdown": "Razčlenitev",
|
||||
"label.browser": "Brskalnik",
|
||||
"label.browsers": "Brskalniki",
|
||||
"label.cancel": "Prekliči",
|
||||
"label.change-password": "Zamenjaj geslo",
|
||||
"label.cities": "Cities",
|
||||
"label.city": "City",
|
||||
"label.clear-all": "Clear all",
|
||||
"label.confirm": "Confirm",
|
||||
"label.confirm-password": "Potrditev gesla",
|
||||
"label.contains": "Contains",
|
||||
"label.continue": "Continue",
|
||||
"label.cities": "Mesta",
|
||||
"label.city": "Mesto",
|
||||
"label.clear-all": "Počisti vse",
|
||||
"label.confirm": "Potrdi",
|
||||
"label.confirm-password": "Potrdi geslo",
|
||||
"label.contains": "Vsebuje",
|
||||
"label.continue": "Nadaljuj",
|
||||
"label.countries": "Države",
|
||||
"label.country": "Country",
|
||||
"label.create-report": "Create report",
|
||||
"label.create-team": "Create team",
|
||||
"label.create-user": "Create user",
|
||||
"label.created": "Created",
|
||||
"label.country": "Država",
|
||||
"label.create-report": "Ustvari poročilo",
|
||||
"label.create-team": "Ustvari ekipo",
|
||||
"label.create-user": "Ustvari uporabnika",
|
||||
"label.created": "Ustvarjeno",
|
||||
"label.current-password": "Trenutno geslo",
|
||||
"label.custom-range": "Razpon po meri",
|
||||
"label.custom-range": "Obdobje po meri",
|
||||
"label.dashboard": "Nadzorna plošča",
|
||||
"label.data": "Data",
|
||||
"label.date": "Date",
|
||||
"label.date-range": "Časovni razpon",
|
||||
"label.day": "Day",
|
||||
"label.default-date-range": "Privzeti časovni razpon",
|
||||
"label.data": "Podatki",
|
||||
"label.date": "Datum",
|
||||
"label.date-range": "Časovno obdobje",
|
||||
"label.day": "Dan",
|
||||
"label.default-date-range": "Privzeto časovno obdobje",
|
||||
"label.delete": "Izbriši",
|
||||
"label.delete-team": "Delete team",
|
||||
"label.delete-user": "Delete user",
|
||||
"label.delete-team": "Izbriši ekipo",
|
||||
"label.delete-user": "Izbriši uporabnika",
|
||||
"label.delete-website": "Izbriši spletno mesto",
|
||||
"label.description": "Description",
|
||||
"label.description": "Opis",
|
||||
"label.desktop": "Namizni računalnik",
|
||||
"label.details": "Details",
|
||||
"label.device": "Device",
|
||||
"label.details": "Podrobnosti",
|
||||
"label.device": "Naprava",
|
||||
"label.devices": "Naprave",
|
||||
"label.dismiss": "Opusti",
|
||||
"label.does-not-contain": "Does not contain",
|
||||
"label.dismiss": "Prezri",
|
||||
"label.does-not-contain": "Ne vsebuje",
|
||||
"label.domain": "Domena",
|
||||
"label.dropoff": "Dropoff",
|
||||
"label.dropoff": "Zapustitev",
|
||||
"label.edit": "Uredi",
|
||||
"label.edit-dashboard": "Edit dashboard",
|
||||
"label.enable-share-url": "Omogoči URL za skupno rabo",
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.edit-dashboard": "Uredi nadzorno ploščo",
|
||||
"label.enable-share-url": "Uredi povezavo za deljenje",
|
||||
"label.event": "Dogodek",
|
||||
"label.event-data": "Podatki dogodka",
|
||||
"label.events": "Dogodki",
|
||||
"label.false": "False",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.filter-combined": "Skupno",
|
||||
"label.filter-raw": "Neobdelane meritve",
|
||||
"label.filters": "Filters",
|
||||
"label.funnel": "Funnel",
|
||||
"label.greater-than": "Greater than",
|
||||
"label.greater-than-equals": "Greater than or equals",
|
||||
"label.insights": "Insights",
|
||||
"label.is": "Is",
|
||||
"label.is-not": "Is not",
|
||||
"label.is-not-set": "Is not set",
|
||||
"label.is-set": "Is set",
|
||||
"label.join": "Join",
|
||||
"label.join-team": "Join team",
|
||||
"label.language": "Language",
|
||||
"label.languages": "Languages",
|
||||
"label.false": "Napačno",
|
||||
"label.field": "Polje",
|
||||
"label.fields": "Polja",
|
||||
"label.filter-combined": "Skupaj",
|
||||
"label.filter-raw": "Neobdelano",
|
||||
"label.filters": "Filtri",
|
||||
"label.funnel": "Prodajni lijak",
|
||||
"label.greater-than": "Večje od",
|
||||
"label.greater-than-equals": "Večje ali enako kot",
|
||||
"label.insights": "Vpogled",
|
||||
"label.is": "Je",
|
||||
"label.is-not": "Ni",
|
||||
"label.is-not-set": "Ni nastavljeno",
|
||||
"label.is-set": "Je nastavljeno",
|
||||
"label.join": "Pridruži se",
|
||||
"label.join-team": "Pridruži se ekipi",
|
||||
"label.language": "Jezik",
|
||||
"label.languages": "Jeziki",
|
||||
"label.laptop": "Prenosni računalnik",
|
||||
"label.last-days": "Zadnjih {x} dni",
|
||||
"label.last-hours": "Zadnjih {x} ur",
|
||||
"label.leave": "Leave",
|
||||
"label.leave-team": "Leave team",
|
||||
"label.less-than": "Less than",
|
||||
"label.less-than-equals": "Less than or equals",
|
||||
"label.leave": "Zapusti",
|
||||
"label.leave-team": "Zapusti ekipo",
|
||||
"label.less-than": "Manjše kot",
|
||||
"label.less-than-equals": "Manjše ali enako kot",
|
||||
"label.login": "Prijava",
|
||||
"label.logout": "Odjava",
|
||||
"label.max": "Max",
|
||||
"label.members": "Members",
|
||||
"label.min": "Min",
|
||||
"label.mobile": "Mobilni telefon",
|
||||
"label.max": "Največ",
|
||||
"label.members": "Člani",
|
||||
"label.min": "Najmanj",
|
||||
"label.mobile": "Mobilne naprave",
|
||||
"label.more": "Več",
|
||||
"label.my-websites": "My websites",
|
||||
"label.my-websites": "Moja spletna mesta",
|
||||
"label.name": "Ime",
|
||||
"label.new-password": "Novo geslo",
|
||||
"label.none": "None",
|
||||
"label.none": "Brez",
|
||||
"label.os": "OS",
|
||||
"label.overview": "Overview",
|
||||
"label.owner": "Owner",
|
||||
"label.page-of": "Page {current} of {total}",
|
||||
"label.page-views": "Ogledi strani",
|
||||
"label.pageTitle": "Page title",
|
||||
"label.overview": "Pregled",
|
||||
"label.owner": "Lastnik",
|
||||
"label.page-of": "Stran {current} od {total}",
|
||||
"label.page-views": "Obiski strani",
|
||||
"label.pageTitle": "Naslov strani",
|
||||
"label.pages": "Strani",
|
||||
"label.password": "Geslo",
|
||||
"label.powered-by": "Zagotavlja {name}",
|
||||
"label.powered-by": "Poganja {name}",
|
||||
"label.profile": "Profil",
|
||||
"label.queries": "Queries",
|
||||
"label.query": "Query",
|
||||
"label.query-parameters": "Query parameters",
|
||||
"label.realtime": "V realnem času",
|
||||
"label.referrer": "Referrer",
|
||||
"label.queries": "Poizvedbe",
|
||||
"label.query": "Poizvedba",
|
||||
"label.query-parameters": "Parametri poizvedbe",
|
||||
"label.realtime": "V živo",
|
||||
"label.referrer": "Vir",
|
||||
"label.referrers": "Viri",
|
||||
"label.refresh": "Osveži",
|
||||
"label.regenerate": "Regenerate",
|
||||
"label.region": "Region",
|
||||
"label.regions": "Regions",
|
||||
"label.remove": "Remove",
|
||||
"label.reports": "Reports",
|
||||
"label.regenerate": "Ponovno generiraj",
|
||||
"label.region": "Regija",
|
||||
"label.regions": "Regije",
|
||||
"label.remove": "Odstrani",
|
||||
"label.reports": "Poročila",
|
||||
"label.required": "Zahtevano",
|
||||
"label.reset": "Ponastavi",
|
||||
"label.reset-website": "Reset statistics",
|
||||
"label.retention": "Retention",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.reset-website": "Ponastavi statistiko",
|
||||
"label.retention": "Ohranjanje uporabnikov",
|
||||
"label.role": "Vloga",
|
||||
"label.run-query": "Izvedi poizvedbo",
|
||||
"label.save": "Shrani",
|
||||
"label.screens": "Screens",
|
||||
"label.select-date": "Select date",
|
||||
"label.select-website": "Select website",
|
||||
"label.sessions": "Sessions",
|
||||
"label.screens": "Zasloni",
|
||||
"label.select-date": "Izberi datum",
|
||||
"label.select-website": "Izberi spletno mesto",
|
||||
"label.sessions": "Seje",
|
||||
"label.settings": "Nastavitve",
|
||||
"label.share-url": "Deli URL",
|
||||
"label.share-url": "Deli povezavo",
|
||||
"label.single-day": "En dan",
|
||||
"label.sum": "Sum",
|
||||
"label.sum": "Seštevek",
|
||||
"label.tablet": "Tablični računalnik",
|
||||
"label.team": "Team",
|
||||
"label.team-guest": "Team guest",
|
||||
"label.team-id": "Team ID",
|
||||
"label.team-member": "Team member",
|
||||
"label.team-name": "Team name",
|
||||
"label.team-owner": "Team owner",
|
||||
"label.team-websites": "Team websites",
|
||||
"label.teams": "Teams",
|
||||
"label.theme": "Theme",
|
||||
"label.team": "Ekipa",
|
||||
"label.team-guest": "Gost ekipe",
|
||||
"label.team-id": "ID ekipe",
|
||||
"label.team-member": "Član ekipe",
|
||||
"label.team-name": "Ime ekipe",
|
||||
"label.team-owner": "Lastnik ekipe",
|
||||
"label.team-websites": "Spletna mesta ekipe",
|
||||
"label.teams": "Ekipe",
|
||||
"label.theme": "Tema",
|
||||
"label.this-month": "Ta mesec",
|
||||
"label.this-week": "Ta teden",
|
||||
"label.this-year": "Letos",
|
||||
"label.this-year": "To leto",
|
||||
"label.timezone": "Časovni pas",
|
||||
"label.title": "Title",
|
||||
"label.title": "Naslov",
|
||||
"label.today": "Danes",
|
||||
"label.toggle-charts": "Toggle charts",
|
||||
"label.total": "Total",
|
||||
"label.total-records": "Total records",
|
||||
"label.toggle-charts": "Preklopi grafe",
|
||||
"label.total": "Skupaj",
|
||||
"label.total-records": "Skupni zapisi",
|
||||
"label.tracking-code": "Koda za sledenje",
|
||||
"label.true": "True",
|
||||
"label.type": "Type",
|
||||
"label.unique": "Unique",
|
||||
"label.true": "Pravilno",
|
||||
"label.type": "Vrsta",
|
||||
"label.unique": "Unikatni",
|
||||
"label.unique-visitors": "Unikatni obiskovalci",
|
||||
"label.unknown": "Neznano",
|
||||
"label.untitled": "Untitled",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.user": "User",
|
||||
"label.untitled": "Brez naslova",
|
||||
"label.url": "Povezava",
|
||||
"label.urls": "Povezave",
|
||||
"label.user": "Uporabnik",
|
||||
"label.username": "Uporabniško ime",
|
||||
"label.users": "Users",
|
||||
"label.value": "Value",
|
||||
"label.view": "View",
|
||||
"label.view-details": "Prikaži podrobnosti",
|
||||
"label.view-only": "View only",
|
||||
"label.views": "Ogledi",
|
||||
"label.users": "Uporabniki",
|
||||
"label.value": "Vrednost",
|
||||
"label.view": "Poglej",
|
||||
"label.view-details": "Poglej podrobnosti",
|
||||
"label.view-only": "Samo ogledovanje",
|
||||
"label.views": "Obiski",
|
||||
"label.visitors": "Obiskovalci",
|
||||
"label.website": "Website",
|
||||
"label.website-id": "Website ID",
|
||||
"label.websites": "Spletna mesta",
|
||||
"label.window": "Window",
|
||||
"label.yesterday": "Yesterday",
|
||||
"label.website": "Spletno mesto",
|
||||
"label.website-id": "ID spletnega mesta",
|
||||
"label.websites": "Spletnih mest",
|
||||
"label.window": "Okno",
|
||||
"label.yesterday": "Včeraj",
|
||||
"message.active-users": "{x} trenutni {x, plural, one {obiskovalec} other {obiskovalcev}}",
|
||||
"message.confirm-delete": "Ste prepričani, da želite izbrisati {target}?",
|
||||
"message.confirm-leave": "Are you sure you want to leave {target}?",
|
||||
"message.confirm-reset": "Are your sure you want to reset {target}'s statistics?",
|
||||
"message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.",
|
||||
"message.delete-website": "To delete this website, type {confirmation} in the box below to confirm.",
|
||||
"message.delete-website-warning": "Izbrisani bodo tudi vsi povezani podatki.",
|
||||
"message.error": "Prišlo je do napake.",
|
||||
"message.event-log": "{event} on {url}",
|
||||
"message.confirm-leave": "Ste prepričani, da želite zapustiti {target}?",
|
||||
"message.confirm-reset": "Ste prepričani, da želite ponastaviti statistiko {target}?",
|
||||
"message.delete-account": "Za potrditev izbrisa tega računa vnesite {confirmation} v spodnje polje.",
|
||||
"message.delete-website": "Za potrditev izbrisa tega spletnega mesta vnesite {confirmation} v spodnje polje.",
|
||||
"message.delete-website-warning": "Izbrisani bodo tudi vsi pripadajoči podatki.",
|
||||
"message.error": "Nekaj je šlo narobe.",
|
||||
"message.event-log": "{event} na {url}",
|
||||
"message.go-to-settings": "Pojdi v nastavitve",
|
||||
"message.incorrect-username-password": "Nepravilno uporabniško ime/geslo",
|
||||
"message.incorrect-username-password": "Nepravilno uporabniško ime/geslo.",
|
||||
"message.invalid-domain": "Neveljavna domena",
|
||||
"message.min-password-length": "Minimum length of {n} characters",
|
||||
"message.new-version-available": "A new version of Umami {version} is available!",
|
||||
"message.min-password-length": "Najmanjša dolžina je {n} znakov",
|
||||
"message.new-version-available": "Na voljo je nova verzija programa Umami {version}!",
|
||||
"message.no-data-available": "Podatki niso na voljo.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-event-data": "Podatki o dogodku niso na voljo.",
|
||||
"message.no-match-password": "Gesli se ne ujemata",
|
||||
"message.no-results-found": "No results were found.",
|
||||
"message.no-team-websites": "This team does not have any websites.",
|
||||
"message.no-teams": "You have not created any teams.",
|
||||
"message.no-users": "There are no users.",
|
||||
"message.no-websites-configured": "Ni nastavljenih spletnih mest.",
|
||||
"message.no-results-found": "Rezultatov ni bilo mogoče najti.",
|
||||
"message.no-team-websites": "Ta ekipa nima spletnih mest.",
|
||||
"message.no-teams": "Niste še ustvarili nobene ekipe.",
|
||||
"message.no-users": "Ni uporabnikov.",
|
||||
"message.no-websites-configured": "Nimate nastavljenih nobenih spletnih mest.",
|
||||
"message.page-not-found": "Stran ni bila najdena.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website-warning": "All statistics for this website will be deleted, but your tracking code will remain intact.",
|
||||
"message.reset-website": "Za ponastavitev izbrisa tega spletnega mesta vnesite {confirmation} v spodnje polje.",
|
||||
"message.reset-website-warning": "Vse statistike za to spletno mesto bodo izbrisane, koda za sledenje pa bo ostala nespremenjena.",
|
||||
"message.saved": "Uspešno shranjeno.",
|
||||
"message.share-url": "To je javno dostopen naslov URL za {target}.",
|
||||
"message.team-already-member": "You are already a member of the team.",
|
||||
"message.team-not-found": "Team not found.",
|
||||
"message.team-websites-info": "Websites can be viewed by anyone on the team.",
|
||||
"message.share-url": "To je javno dostopna povezava za {target}.",
|
||||
"message.team-already-member": "Ste že član ekipe.",
|
||||
"message.team-not-found": "Ekipa ni bila najdena.",
|
||||
"message.team-websites-info": "Spletne strani si lahko ogleda vsak član ekipe.",
|
||||
"message.tracking-code": "Koda za sledenje",
|
||||
"message.user-deleted": "User deleted.",
|
||||
"message.user-deleted": "Uporabnik je izbrisan.",
|
||||
"message.visitor-log": "Obiskovalec iz {country} uporablja {browser} na {os} {device}"
|
||||
}
|
||||
|
@ -130,11 +130,3 @@ export async function getClientInfo(req: NextApiRequestCollect, { screen }) {
|
||||
|
||||
return { userAgent, browser, os, ip, country, subdivision1, subdivision2, city, device };
|
||||
}
|
||||
|
||||
export function getJsonBody<T>(req): T {
|
||||
if ((req.headers['content-type'] || '').indexOf('text/plain') !== -1) {
|
||||
return JSON.parse(req.body);
|
||||
}
|
||||
|
||||
return req.body;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { isUuid, secret, uuid } from 'lib/crypto';
|
||||
import { getClientInfo, getJsonBody } from 'lib/detect';
|
||||
import { getClientInfo } from 'lib/detect';
|
||||
import { parseToken } from 'next-basics';
|
||||
import { CollectRequestBody, NextApiRequestCollect } from 'pages/api/send';
|
||||
import { NextApiRequestCollect } from 'pages/api/send';
|
||||
import { createSession } from 'queries';
|
||||
import cache from './cache';
|
||||
import clickhouse from './clickhouse';
|
||||
@ -22,7 +22,7 @@ export async function findSession(req: NextApiRequestCollect): Promise<{
|
||||
city: any;
|
||||
ownerId: string;
|
||||
}> {
|
||||
const { payload } = getJsonBody<CollectRequestBody>(req);
|
||||
const { payload } = req.body;
|
||||
|
||||
if (!payload) {
|
||||
throw new Error('Invalid payload.');
|
||||
|
@ -3,11 +3,11 @@ import ipaddr from 'ipaddr.js';
|
||||
import isbot from 'isbot';
|
||||
import { COLLECTION_TYPE, HOSTNAME_REGEX } from 'lib/constants';
|
||||
import { secret } from 'lib/crypto';
|
||||
import { getIpAddress, getJsonBody } from 'lib/detect';
|
||||
import { getIpAddress } from 'lib/detect';
|
||||
import { useCors, useSession, useValidate } from 'lib/middleware';
|
||||
import { CollectionType, YupRequest } from 'lib/types';
|
||||
import { NextApiRequest, NextApiResponse } from 'next';
|
||||
import { badRequest, createToken, forbidden, ok, send } from 'next-basics';
|
||||
import { badRequest, createToken, forbidden, methodNotAllowed, ok, send } from 'next-basics';
|
||||
import { saveEvent, saveSessionData } from 'queries';
|
||||
import * as yup from 'yup';
|
||||
|
||||
@ -73,71 +73,75 @@ const schema = {
|
||||
export default async (req: NextApiRequestCollect, res: NextApiResponse) => {
|
||||
await useCors(req, res);
|
||||
|
||||
if (isbot(req.headers['user-agent']) && !process.env.DISABLE_BOT_CHECK) {
|
||||
return ok(res);
|
||||
}
|
||||
|
||||
const { type, payload } = getJsonBody<CollectRequestBody>(req);
|
||||
|
||||
req.yup = schema;
|
||||
await useValidate(req, res);
|
||||
|
||||
if (await hasBlockedIp(req)) {
|
||||
return forbidden(res);
|
||||
}
|
||||
|
||||
const { url, referrer, name: eventName, data: eventData, title: pageTitle } = payload;
|
||||
|
||||
await useSession(req, res);
|
||||
|
||||
const session = req.session;
|
||||
|
||||
if (type === COLLECTION_TYPE.event) {
|
||||
// eslint-disable-next-line prefer-const
|
||||
let [urlPath, urlQuery] = url?.split('?') || [];
|
||||
let [referrerPath, referrerQuery] = referrer?.split('?') || [];
|
||||
let referrerDomain;
|
||||
|
||||
if (!urlPath) {
|
||||
urlPath = '/';
|
||||
if (req.method === 'POST') {
|
||||
if (isbot(req.headers['user-agent']) && !process.env.DISABLE_BOT_CHECK) {
|
||||
return ok(res);
|
||||
}
|
||||
|
||||
if (referrerPath?.startsWith('http')) {
|
||||
const refUrl = new URL(referrer);
|
||||
referrerPath = refUrl.pathname;
|
||||
referrerQuery = refUrl.search.substring(1);
|
||||
referrerDomain = refUrl.hostname.replace(/www\./, '');
|
||||
const { type, payload } = req.body;
|
||||
|
||||
req.yup = schema;
|
||||
await useValidate(req, res);
|
||||
|
||||
if (await hasBlockedIp(req)) {
|
||||
return forbidden(res);
|
||||
}
|
||||
|
||||
if (process.env.REMOVE_TRAILING_SLASH) {
|
||||
urlPath = urlPath.replace(/.+\/$/, '');
|
||||
const { url, referrer, name: eventName, data: eventData, title: pageTitle } = payload;
|
||||
|
||||
await useSession(req, res);
|
||||
|
||||
const session = req.session;
|
||||
|
||||
if (type === COLLECTION_TYPE.event) {
|
||||
// eslint-disable-next-line prefer-const
|
||||
let [urlPath, urlQuery] = url?.split('?') || [];
|
||||
let [referrerPath, referrerQuery] = referrer?.split('?') || [];
|
||||
let referrerDomain;
|
||||
|
||||
if (!urlPath) {
|
||||
urlPath = '/';
|
||||
}
|
||||
|
||||
if (referrerPath?.startsWith('http')) {
|
||||
const refUrl = new URL(referrer);
|
||||
referrerPath = refUrl.pathname;
|
||||
referrerQuery = refUrl.search.substring(1);
|
||||
referrerDomain = refUrl.hostname.replace(/www\./, '');
|
||||
}
|
||||
|
||||
if (process.env.REMOVE_TRAILING_SLASH) {
|
||||
urlPath = urlPath.replace(/.+\/$/, '');
|
||||
}
|
||||
|
||||
await saveEvent({
|
||||
urlPath,
|
||||
urlQuery,
|
||||
referrerPath,
|
||||
referrerQuery,
|
||||
referrerDomain,
|
||||
pageTitle,
|
||||
eventName,
|
||||
eventData,
|
||||
...session,
|
||||
sessionId: session.id,
|
||||
});
|
||||
}
|
||||
|
||||
await saveEvent({
|
||||
urlPath,
|
||||
urlQuery,
|
||||
referrerPath,
|
||||
referrerQuery,
|
||||
referrerDomain,
|
||||
pageTitle,
|
||||
eventName,
|
||||
eventData,
|
||||
...session,
|
||||
sessionId: session.id,
|
||||
});
|
||||
if (type === COLLECTION_TYPE.identify) {
|
||||
if (!eventData) {
|
||||
return badRequest(res, 'Data required.');
|
||||
}
|
||||
|
||||
await saveSessionData({ ...session, sessionData: eventData, sessionId: session.id });
|
||||
}
|
||||
|
||||
const token = createToken(session, secret());
|
||||
|
||||
return send(res, token);
|
||||
}
|
||||
|
||||
if (type === COLLECTION_TYPE.identify) {
|
||||
if (!eventData) {
|
||||
return badRequest(res, 'Data required.');
|
||||
}
|
||||
|
||||
await saveSessionData({ ...session, sessionData: eventData, sessionId: session.id });
|
||||
}
|
||||
|
||||
const token = createToken(session, secret());
|
||||
|
||||
return send(res, token);
|
||||
return methodNotAllowed(res);
|
||||
};
|
||||
|
||||
async function hasBlockedIp(req: NextApiRequestCollect) {
|
||||
|
Loading…
Reference in New Issue
Block a user