mirror of
https://github.com/kremalicious/umami.git
synced 2025-02-14 21:10:34 +01:00
Merge branch 'dev' into feat/better-event-data-dashboard
This commit is contained in:
commit
5b3996dc19
@ -41,7 +41,7 @@ export default function WebsiteChartList({ websites, showCharts, limit }) {
|
||||
</Link>
|
||||
</WebsiteHeader>
|
||||
<WebsiteMetricsBar websiteId={id} />
|
||||
<WebsiteChart websiteId={id} showChart={showCharts} />
|
||||
{showCharts && <WebsiteChart websiteId={id} />}
|
||||
</div>
|
||||
) : null;
|
||||
})}
|
||||
|
@ -70,7 +70,7 @@ SETTINGS kafka_broker_list = 'domain:9092,domain:9093,domain:9094', -- input bro
|
||||
kafka_group_name = 'event_consumer_group',
|
||||
kafka_format = 'JSONEachRow',
|
||||
kafka_max_block_size = 1048576,
|
||||
kafka_handle_error_mode = 'stream'
|
||||
kafka_handle_error_mode = 'stream';
|
||||
|
||||
CREATE MATERIALIZED VIEW umami.website_event_queue_mv TO umami.website_event AS
|
||||
SELECT website_id,
|
||||
@ -108,7 +108,7 @@ SETTINGS index_granularity = 8192 AS
|
||||
SELECT _error AS error,
|
||||
_raw_message AS raw
|
||||
FROM umami.website_event_queue
|
||||
WHERE length(_error) > 0
|
||||
WHERE length(_error) > 0;
|
||||
|
||||
CREATE TABLE umami.event_data
|
||||
(
|
||||
@ -151,7 +151,7 @@ SETTINGS kafka_broker_list = 'domain:9092,domain:9093,domain:9094', -- input bro
|
||||
kafka_group_name = 'event_data_consumer_group',
|
||||
kafka_format = 'JSONEachRow',
|
||||
kafka_max_block_size = 1048576,
|
||||
kafka_handle_error_mode = 'stream'
|
||||
kafka_handle_error_mode = 'stream';
|
||||
|
||||
CREATE MATERIALIZED VIEW umami.event_data_queue_mv TO umami.event_data AS
|
||||
SELECT website_id,
|
||||
@ -178,4 +178,4 @@ SETTINGS index_granularity = 8192 AS
|
||||
SELECT _error AS error,
|
||||
_raw_message AS raw
|
||||
FROM umami.event_data_queue
|
||||
WHERE length(_error) > 0
|
||||
WHERE length(_error) > 0;
|
@ -97,8 +97,8 @@ model WebsiteEvent {
|
||||
|
||||
model EventData {
|
||||
id String @id() @map("event_data_id") @db.VarChar(36)
|
||||
websiteEventId String @map("website_event_id") @db.VarChar(36)
|
||||
websiteId String @map("website_id") @db.VarChar(36)
|
||||
websiteEventId String @map("website_event_id") @db.VarChar(36)
|
||||
eventKey String @map("event_key") @db.VarChar(500)
|
||||
stringValue String? @map("string_value") @db.VarChar(500)
|
||||
numberValue Decimal? @map("number_value") @db.Decimal(19, 4)
|
||||
|
@ -2,8 +2,8 @@
|
||||
"label.access-code": "Code d'accès",
|
||||
"label.actions": "Actions",
|
||||
"label.activity-log": "Journal d'activité",
|
||||
"label.add": "Add",
|
||||
"label.add-description": "Add description",
|
||||
"label.add": "Ajouter",
|
||||
"label.add-description": "Ajouter une description",
|
||||
"label.add-website": "Ajouter un site",
|
||||
"label.admin": "Administrateur",
|
||||
"label.all": "Tout",
|
||||
@ -43,13 +43,13 @@
|
||||
"label.edit-dashboard": "Modifier le tableau de bord",
|
||||
"label.enable-share-url": "Activer l'URL de partage",
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.event-data": "Données d'événements",
|
||||
"label.events": "Événements",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.field": "Champ",
|
||||
"label.fields": "Champs",
|
||||
"label.filter-combined": "Combiné",
|
||||
"label.filter-raw": "Brut",
|
||||
"label.funnel": "Funnel",
|
||||
"label.funnel": "Entonnoir",
|
||||
"label.join": "Rejoindre",
|
||||
"label.join-team": "Rejoindre une équipe",
|
||||
"label.language": "Langue",
|
||||
@ -74,24 +74,24 @@
|
||||
"label.password": "Mot de passe",
|
||||
"label.powered-by": "Propulsé par {name}",
|
||||
"label.profile": "Profil",
|
||||
"label.queries": "Queries",
|
||||
"label.query": "Query",
|
||||
"label.queries": "Requêtes",
|
||||
"label.query": "Requête",
|
||||
"label.query-parameters": "Paramètres d'URL",
|
||||
"label.realtime": "Temps réel",
|
||||
"label.referrers": "Sources",
|
||||
"label.referrers": "Sites référents",
|
||||
"label.refresh": "Rafraîchir",
|
||||
"label.regenerate": "Régénérer",
|
||||
"label.regions": "Régions",
|
||||
"label.remove": "Retirer",
|
||||
"label.reports": "Reports",
|
||||
"label.reports": "Rapports",
|
||||
"label.required": "Requis",
|
||||
"label.reset": "Réinitialiser",
|
||||
"label.reset-website": "Réinitialiser les statistiques",
|
||||
"label.role": "Rôle",
|
||||
"label.run-query": "Run query",
|
||||
"label.run-query": "Éxécuter la requête",
|
||||
"label.save": "Enregistrer",
|
||||
"label.screens": "Résolutions d'écran",
|
||||
"label.select-date": "Select date",
|
||||
"label.select-date": "Choisir une période",
|
||||
"label.select-website": "Choisir un site",
|
||||
"label.sessions": "Sessions",
|
||||
"label.settings": "Paramètres",
|
||||
@ -122,46 +122,46 @@
|
||||
"label.users": "Utilisateurs",
|
||||
"label.view": "Voir",
|
||||
"label.view-details": "Voir les détails",
|
||||
"label.view-only": "View only",
|
||||
"label.view-only": "Consultation",
|
||||
"label.views": "Vues",
|
||||
"label.visitors": "Visiteurs",
|
||||
"label.website": "Website",
|
||||
"label.website-id": "ID de site",
|
||||
"label.websites": "Sites",
|
||||
"label.window": "Window",
|
||||
"label.window": "Fenêtre",
|
||||
"label.yesterday": "Hier",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.after": "Après",
|
||||
"labels.average": "Moyenne",
|
||||
"labels.before": "Avant",
|
||||
"labels.breakdown": "Répartition",
|
||||
"labels.contains": "Contient",
|
||||
"labels.create-report": "Créer un rapport",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.does-not-contain": "Ne contient pas",
|
||||
"labels.does-not-equal": "N'est pas égal",
|
||||
"labels.equals": "Est égal",
|
||||
"labels.false": "Faux",
|
||||
"labels.filters": "Filtres",
|
||||
"labels.greater-than": "Supérieur à",
|
||||
"labels.greater-than-equals": "Supérieur ou égal à",
|
||||
"labels.less-than": "Inférieur à",
|
||||
"labels.less-than-equals": "Inférieur ou égal à",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.overview": "Vue d'ensemble",
|
||||
"labels.sum": "Somme",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.total-records": "Nombre d'enregistrements",
|
||||
"labels.true": "Vrai",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"labels.untitled": "Sans titre",
|
||||
"labels.value": "Valeur",
|
||||
"message.active-users": "{x} {x, plural, one {visiteur} other {visiteurs}} actuellement",
|
||||
"message.confirm-delete": "Êtes-vous sûr de vouloir supprimer {target} ?",
|
||||
"message.confirm-leave": "Êtes-vous sûr de vouloir quitter {target} ?",
|
||||
"message.confirm-reset": "Êtes-vous sûr de vouloir réinitialiser les statistiques de {target} ?",
|
||||
"message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.",
|
||||
"message.delete-account": "Pour supprimer ce compte, taper {confirmation} ci-dessous pour confirmer.",
|
||||
"message.delete-website": "Pour supprimer ce site, taper {confirmation} ci-dessous pour confirmer.",
|
||||
"message.delete-website-warning": "Toutes les données associées seront supprimées.",
|
||||
"message.error": "Un problème est survenu.",
|
||||
@ -171,12 +171,12 @@
|
||||
"message.invalid-domain": "Domaine invalide",
|
||||
"message.min-password-length": "Taille minimale de {n} caractères",
|
||||
"message.no-data-available": "Aucune donnée disponible.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-event-data": "Aucune donnée d'événement disponible.",
|
||||
"message.no-match-password": "Les mots de passe ne correspondent pas",
|
||||
"message.no-teams": "Vous n'avez créé aucune équipe.",
|
||||
"message.no-users": "Il n'y aucun utilisateur.",
|
||||
"message.no-teams": "Vous n'avez pas créé d'équipe.",
|
||||
"message.no-users": "Aucun utilisateur.",
|
||||
"message.page-not-found": "Page non trouvée.",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website": "Pour réinitialiser ce site, taper {confirmation} ci-dessous pour confirmer.",
|
||||
"message.reset-website-warning": "Toutes les statistiques pour ce site seront supprimées, mais votre code de suivi restera intact.",
|
||||
"message.saved": "Enregistré avec succès.",
|
||||
"message.share-url": "Les statistiques de votre site sont accessibles publiquement sur cette URL :",
|
||||
@ -185,8 +185,8 @@
|
||||
"message.tracking-code": "Code de suivi",
|
||||
"message.user-deleted": "Utilisateur supprimé.",
|
||||
"message.visitor-log": "Visiteur de {country} utilisant {browser} sur {os} {device}",
|
||||
"messages.no-results-found": "No results were found.",
|
||||
"messages.no-results-found": "Aucun résultat n'a été trouvé.",
|
||||
"messages.no-team-websites": "Cette équipe n'a aucun site.",
|
||||
"messages.no-websites-configured": "Vous n'avez configuré aucun site.",
|
||||
"messages.no-websites-configured": "Vous n'avez pas configuré de site.",
|
||||
"messages.team-websites-info": "Les sites peuvent être vus par tout utilisateur dans l'équipe."
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
"label.access-code": "Kod dostępu",
|
||||
"label.actions": "Działania",
|
||||
"label.activity-log": "Dziennik aktywności",
|
||||
"label.add": "Add",
|
||||
"label.add": "Dodaj",
|
||||
"label.add-description": "Add description",
|
||||
"label.add-website": "Dodaj witrynę",
|
||||
"label.admin": "Administrator",
|
||||
@ -43,13 +43,13 @@
|
||||
"label.edit-dashboard": "Edytuj panel",
|
||||
"label.enable-share-url": "Włącz udostępnianie adresu URL",
|
||||
"label.event": "Event",
|
||||
"label.event-data": "Event data",
|
||||
"label.event-data": "Dane zdarzenia",
|
||||
"label.events": "Zdarzenia",
|
||||
"label.field": "Field",
|
||||
"label.fields": "Fields",
|
||||
"label.field": "Pole",
|
||||
"label.fields": "Pola",
|
||||
"label.filter-combined": "Połączone",
|
||||
"label.filter-raw": "Surowe dane",
|
||||
"label.funnel": "Funnel",
|
||||
"label.funnel": "Lejek",
|
||||
"label.join": "Dołącz",
|
||||
"label.join-team": "Dołącz do zespołu",
|
||||
"label.language": "Język",
|
||||
@ -75,7 +75,7 @@
|
||||
"label.powered-by": "Obsługiwane przez {name}",
|
||||
"label.profile": "Profil",
|
||||
"label.queries": "Zapytania",
|
||||
"label.query": "Query",
|
||||
"label.query": "Zapytanie",
|
||||
"label.query-parameters": "Parametry query",
|
||||
"label.realtime": "Czas rzeczywisty",
|
||||
"label.referrers": "Źródła odsyłające",
|
||||
@ -83,15 +83,15 @@
|
||||
"label.regenerate": "Wygeneruj ponownie",
|
||||
"label.regions": "Regiony",
|
||||
"label.remove": "Usuń",
|
||||
"label.reports": "Reports",
|
||||
"label.reports": "Raporty",
|
||||
"label.required": "Wymagany",
|
||||
"label.reset": "Zresetuj",
|
||||
"label.reset-website": "Zresetuj statystyki",
|
||||
"label.role": "Role",
|
||||
"label.run-query": "Run query",
|
||||
"label.role": "Rola",
|
||||
"label.run-query": "Uruchom zapytanie",
|
||||
"label.save": "Zapisz",
|
||||
"label.screens": "Ekrany",
|
||||
"label.select-date": "Select date",
|
||||
"label.select-date": "Wybierz datę",
|
||||
"label.select-website": "Wybierz witrynę",
|
||||
"label.sessions": "Sesje",
|
||||
"label.settings": "Ustawienia",
|
||||
@ -115,54 +115,54 @@
|
||||
"label.tracking-code": "Kod śledzenia",
|
||||
"label.unique-visitors": "Unikalni odwiedzający",
|
||||
"label.unknown": "Nieznany",
|
||||
"label.url": "URL",
|
||||
"label.urls": "URLs",
|
||||
"label.url": "Link",
|
||||
"label.urls": "Linki",
|
||||
"label.user": "Użytkownik",
|
||||
"label.username": "Nazwa użytkownika",
|
||||
"label.users": "Użytkownicy",
|
||||
"label.view": "Zobacz",
|
||||
"label.view-details": "Pokaż szczegóły",
|
||||
"label.view-only": "View only",
|
||||
"label.view-only": "Wyświetl tylko",
|
||||
"label.views": "Wyświetlenia",
|
||||
"label.visitors": "Odwiedzający",
|
||||
"label.website": "Website",
|
||||
"label.website": "Witryna",
|
||||
"label.website-id": "ID witryny",
|
||||
"label.websites": "Witryny",
|
||||
"label.window": "Window",
|
||||
"label.window": "Okno",
|
||||
"label.yesterday": "Wczoraj",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
"labels.false": "False",
|
||||
"labels.filters": "Filters",
|
||||
"labels.greater-than": "Greater than",
|
||||
"labels.greater-than-equals": "Greater than or equals",
|
||||
"labels.less-than": "Less than",
|
||||
"labels.less-than-equals": "Less than or equals",
|
||||
"labels.after": "Po",
|
||||
"labels.average": "Średnia",
|
||||
"labels.before": "Przed",
|
||||
"labels.breakdown": "Podział",
|
||||
"labels.contains": "Zawiera",
|
||||
"labels.create-report": "Utwórz raport",
|
||||
"labels.description": "Opis",
|
||||
"labels.does-not-contain": "Nie zawiera",
|
||||
"labels.does-not-equal": "Nie równa się",
|
||||
"labels.equals": "Równa się",
|
||||
"labels.false": "Fałsz",
|
||||
"labels.filters": "Filtry",
|
||||
"labels.greater-than": "Wiekszy niż",
|
||||
"labels.greater-than-equals": "Większy lub równy",
|
||||
"labels.less-than": "Mniejszy niż",
|
||||
"labels.less-than-equals": "Mniejszy lub równy",
|
||||
"labels.max": "Max",
|
||||
"labels.min": "Min",
|
||||
"labels.overview": "Overview",
|
||||
"labels.sum": "Sum",
|
||||
"labels.total": "Total",
|
||||
"labels.total-records": "Total records",
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.value": "Value",
|
||||
"labels.overview": "Przegląd",
|
||||
"labels.sum": "Suma",
|
||||
"labels.total": "Łącznie",
|
||||
"labels.total-records": "Łączna liczba rekordów",
|
||||
"labels.true": "Prawda",
|
||||
"labels.type": "Typ",
|
||||
"labels.unique": "Unikalne",
|
||||
"labels.untitled": "Bez tytułu",
|
||||
"labels.value": "Wartość",
|
||||
"message.active-users": "{x} aktualnie {x, plural, one {odwiedzający} other {odwiedzających}}",
|
||||
"message.confirm-delete": "Czy na pewno chcesz usunąć {target}?",
|
||||
"message.confirm-leave": "Czy na pewno chcesz opuścić {target}?",
|
||||
"message.confirm-reset": "Czy na pewno chcesz zresetować statystyki {target}?",
|
||||
"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-account": "Aby usunąć to konto, wpisz {confirmation} w polu poniżej w celu potwierdzenia.",
|
||||
"message.delete-website": "Aby usunąć tę stronę, wpisz {confirmation} w polu poniżej w celu potwierdzenia.",
|
||||
"message.delete-website-warning": "Wszystkie powiązane dane również zostaną usunięte.",
|
||||
"message.error": "Coś poszło nie tak.",
|
||||
"message.event-log": "{event} na {url}",
|
||||
@ -171,7 +171,7 @@
|
||||
"message.invalid-domain": "Nieprawidłowa witryna",
|
||||
"message.min-password-length": "Minimalna długość {n} znaków",
|
||||
"message.no-data-available": "Brak dostępnych danych.",
|
||||
"message.no-event-data": "No event data is available.",
|
||||
"message.no-event-data": "Dane dotyczące zdarzeń nie są dostępne.",
|
||||
"message.no-match-password": "Hasła się nie zgadzają",
|
||||
"message.no-teams": "Nie stworzyłeś żadnych zespołów.",
|
||||
"message.no-users": "Nie ma żadnych użytkowników.",
|
||||
@ -185,7 +185,7 @@
|
||||
"message.tracking-code": "Kod śledzenia",
|
||||
"message.user-deleted": "Użytkownik usunięty.",
|
||||
"message.visitor-log": "Odwiedzający z {country} używa {browser} na {os} {device}",
|
||||
"messages.no-results-found": "No results were found.",
|
||||
"messages.no-results-found": "Nie znaleziono żadnych wyników.",
|
||||
"messages.no-team-websites": "Ten zespół nie ma żadnych witryn internetowych.",
|
||||
"messages.no-websites-configured": "Nie masz skonfigurowanych żadnych witryn internetowych.",
|
||||
"messages.team-websites-info": "Strony internetowe mogą być przeglądane przez każdego członka zespołu."
|
||||
|
@ -2,8 +2,8 @@
|
||||
"label.access-code": "访问代码",
|
||||
"label.actions": "用户行为",
|
||||
"label.activity-log": "活动日志",
|
||||
"label.add": "Add",
|
||||
"label.add-description": "Add description",
|
||||
"label.add": "添加",
|
||||
"label.add-description": "添加描述",
|
||||
"label.add-website": "添加网站",
|
||||
"label.admin": "管理员",
|
||||
"label.all": "所有",
|
||||
@ -128,15 +128,15 @@
|
||||
"label.website": "Website",
|
||||
"label.website-id": "网站 ID",
|
||||
"label.websites": "网站",
|
||||
"label.window": "Window",
|
||||
"label.window": "窗口",
|
||||
"label.yesterday": "昨天",
|
||||
"labels.after": "After",
|
||||
"labels.average": "Average",
|
||||
"labels.before": "Before",
|
||||
"labels.breakdown": "Breakdown",
|
||||
"labels.contains": "Contains",
|
||||
"labels.create-report": "Create report",
|
||||
"labels.description": "Description",
|
||||
"labels.create-report": "创建报告",
|
||||
"labels.description": "描述",
|
||||
"labels.does-not-contain": "Does not contain",
|
||||
"labels.does-not-equal": "Does not equal",
|
||||
"labels.equals": "Equals",
|
||||
@ -155,14 +155,14 @@
|
||||
"labels.true": "True",
|
||||
"labels.type": "Type",
|
||||
"labels.unique": "Unique",
|
||||
"labels.untitled": "Untitled",
|
||||
"labels.untitled": "未命名",
|
||||
"labels.value": "Value",
|
||||
"message.active-users": "当前在线 {x} 人",
|
||||
"message.confirm-delete": "你确定要删除 {target} 吗?",
|
||||
"message.confirm-leave": "你确定要离开 {target} 吗?",
|
||||
"message.confirm-reset": "您确定要重置 {target} 的数据吗?",
|
||||
"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-account": "确定删除该账户, 请在下面的输入框中输入 {confirmation} 进行二次确认。",
|
||||
"message.delete-website": "确定删除该网站, 请在下面的输入框中输入 {confirmation} 进行二次确认。",
|
||||
"message.delete-website-warning": "所有相关数据将会被删除。",
|
||||
"message.error": "出现错误。",
|
||||
"message.event-log": "{event} on {url}",
|
||||
@ -176,7 +176,7 @@
|
||||
"message.no-teams": "你还没有创建任何团队。",
|
||||
"message.no-users": "没有任何用户。",
|
||||
"message.page-not-found": "网页未找到。",
|
||||
"message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.",
|
||||
"message.reset-website": "确定重置该网站, 请在下面的输入框中输入 {confirmation} 进行二次确认。",
|
||||
"message.reset-website-warning": "本网站的所有统计数据将被删除,但您的跟踪代码将保持不变。",
|
||||
"message.saved": "保存成功。",
|
||||
"message.share-url": "这是 {target} 的共享链接。",
|
||||
@ -185,7 +185,7 @@
|
||||
"message.tracking-code": "跟踪代码",
|
||||
"message.user-deleted": "User detected.",
|
||||
"message.visitor-log": "来自{country}的访客在搭载 {os} 的{device}上使用 {browser} 浏览器进行访问。",
|
||||
"messages.no-results-found": "No results were found.",
|
||||
"messages.no-results-found": "没有找到任何结果。",
|
||||
"messages.no-team-websites": "这个团队没有任何网站。",
|
||||
"messages.no-websites-configured": "你还没有设置任何网站。",
|
||||
"messages.team-websites-info": "团队中的任何人都可查看网站。"
|
||||
|
@ -30,6 +30,13 @@ export async function findSession(req: NextApiRequestCollect) {
|
||||
// Verify payload
|
||||
const { website: websiteId, hostname, screen, language } = payload;
|
||||
|
||||
|
||||
// Check the hostname value for legality to eliminate dirty data
|
||||
const validHostnameRegex = /^[\w-.]+$/;
|
||||
if (!validHostnameRegex.test(hostname)) {
|
||||
throw new Error('Invalid hostname.');
|
||||
}
|
||||
|
||||
if (!validate(websiteId)) {
|
||||
throw new Error('Invalid website ID.');
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user