diff --git a/commafeed-client/src/App.tsx b/commafeed-client/src/App.tsx index 6a2129bb..cc5f4cae 100644 --- a/commafeed-client/src/App.tsx +++ b/commafeed-client/src/App.tsx @@ -9,6 +9,7 @@ import { HashRouter, Navigate, Route, Routes, useNavigate } from "react-router-d import Tinycon from "tinycon" import { Constants } from "@/app/constants" import { redirectTo } from "@/app/redirect/slice" +import { redirectToInitialSetup } from "@/app/redirect/thunks" import { reloadServerInfos } from "@/app/server/thunks" import { useAppDispatch, useAppSelector } from "@/app/store" import { categoryUnreadCount } from "@/app/utils" @@ -30,6 +31,7 @@ import { FeedEntriesPage } from "@/pages/app/FeedEntriesPage" import Layout from "@/pages/app/Layout" import { SettingsPage } from "@/pages/app/SettingsPage" import { TagDetailsPage } from "@/pages/app/TagDetailsPage" +import { InitialSetupPage } from "@/pages/auth/InitialSetupPage" import { LoginPage } from "@/pages/auth/LoginPage" import { PasswordRecoveryPage } from "@/pages/auth/PasswordRecoveryPage" import { RegistrationPage } from "@/pages/auth/RegistrationPage" @@ -82,6 +84,7 @@ function AppRoutes() { } /> } /> + } /> } /> } /> } /> @@ -112,6 +115,18 @@ function AppRoutes() { ) } +function InitialSetupHandler() { + const serverInfos = useAppSelector(state => state.server.serverInfos) + const dispatch = useAppDispatch() + useEffect(() => { + if (serverInfos?.initialSetupRequired) { + dispatch(redirectToInitialSetup()) + } + }, [serverInfos, dispatch]) + + return null +} + function RedirectHandler() { const target = useAppSelector(state => state.redirect.to) const dispatch = useAppDispatch() @@ -216,6 +231,7 @@ export function App() { + diff --git a/commafeed-client/src/app/client.ts b/commafeed-client/src/app/client.ts index f124c8f9..46ebc5a6 100644 --- a/commafeed-client/src/app/client.ts +++ b/commafeed-client/src/app/client.ts @@ -12,6 +12,7 @@ import type { FeedModificationRequest, GetEntriesPaginatedRequest, IDRequest, + InitialSetupRequest, LoginRequest, MarkRequest, Metrics, @@ -32,16 +33,17 @@ const axiosInstance = axios.create({ baseURL: "./rest", withCredentials: true }) axiosInstance.interceptors.response.use( response => response, error => { - if (isAuthenticationError(error)) { + if (isAuthenticationError(error) && window.location.hash !== "#/login") { const data = error.response?.data window.location.hash = data?.allowRegistrations ? "/welcome" : "/login" + window.location.reload() } throw error } ) function isAuthenticationError(error: unknown): error is AxiosError { - return axios.isAxiosError(error) && !!error.response && [401, 403].includes(error.response.status) + return axios.isAxiosError(error) && error.response?.status === 401 } export const client = { @@ -93,6 +95,7 @@ export const client = { }) }, register: async (req: RegistrationRequest) => await axiosInstance.post("user/register", req), + initialSetup: async (req: InitialSetupRequest) => await axiosInstance.post("user/initialSetup", req), passwordReset: async (req: PasswordResetRequest) => await axiosInstance.post("user/passwordReset", req), getSettings: async () => await axiosInstance.get("user/settings"), saveSettings: async (settings: Settings) => await axiosInstance.post("user/settings", settings), diff --git a/commafeed-client/src/app/redirect/thunks.ts b/commafeed-client/src/app/redirect/thunks.ts index 9bcb3a9d..25b5144f 100644 --- a/commafeed-client/src/app/redirect/thunks.ts +++ b/commafeed-client/src/app/redirect/thunks.ts @@ -6,6 +6,8 @@ export const redirectToLogin = createAppAsyncThunk("redirect/login", (_, thunkAp export const redirectToRegistration = createAppAsyncThunk("redirect/register", (_, thunkApi) => thunkApi.dispatch(redirectTo("/register"))) +export const redirectToInitialSetup = createAppAsyncThunk("redirect/initialSetup", (_, thunkApi) => thunkApi.dispatch(redirectTo("/setup"))) + export const redirectToApiDocumentation = createAppAsyncThunk("redirect/api", () => { window.location.href = "api-documentation/" }) diff --git a/commafeed-client/src/app/types.ts b/commafeed-client/src/app/types.ts index bd889a5e..89230ccf 100644 --- a/commafeed-client/src/app/types.ts +++ b/commafeed-client/src/app/types.ts @@ -209,6 +209,12 @@ export interface RegistrationRequest { email: string } +export interface InitialSetupRequest { + name: string + password: string + email?: string +} + export interface ServerInfo { announcement?: string version: string @@ -220,6 +226,7 @@ export interface ServerInfo { websocketPingInterval: number treeReloadInterval: number forceRefreshCooldownDuration: number + initialSetupRequired: boolean } export interface SharingSettings { diff --git a/commafeed-client/src/locales/ar/messages.po b/commafeed-client/src/locales/ar/messages.po index fda697fb..9f620b6e 100644 --- a/commafeed-client/src/locales/ar/messages.po +++ b/commafeed-client/src/locales/ar/messages.po @@ -60,6 +60,11 @@ msgstr "إضافة مستخدم" msgid "Admin" msgstr "إداري" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "العودة لتسجيل الدخول" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "تأكيد كلمة المرور" msgid "Cozy" msgstr "دافئ" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "السيطرة" @@ -309,6 +318,8 @@ msgstr "اسحب الرابط إلى شريط الإشارات" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "في العرض الموسع ، التمرير عبر الإدخالات msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "الفئة الأصل" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "إلغاء النجم" msgid "Unsubscribe" msgstr "إلغاء الاشتراك" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "اسم المستخدم" @@ -1060,6 +1081,10 @@ msgstr "تحذير" msgid "Website" msgstr "موقع الكتروني" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/ca/messages.po b/commafeed-client/src/locales/ca/messages.po index afbeb8a1..078738c3 100644 --- a/commafeed-client/src/locales/ca/messages.po +++ b/commafeed-client/src/locales/ca/messages.po @@ -60,6 +60,11 @@ msgstr "Afegeix usuari" msgid "Admin" msgstr "Administrador" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Torna a iniciar sessió" msgid "Blue" msgstr "Blau" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "Extensió del navegador necessària per a Chrome" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "Extensió del navegador" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "Extensió del navegador necessària per a Chrome" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "Pestanya del navegador" @@ -225,6 +230,10 @@ msgstr "Confirmeu la contrasenya" msgid "Cozy" msgstr "Acollidor" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "Ctrl" @@ -285,7 +294,7 @@ msgstr "Detallat" #: src/components/settings/DisplaySettings.tsx msgid "Disable \"Pull to refresh\" browser behavior" -msgstr "Desactiva el comportament \"Arrossega per actualitzar"\ del navegador" +msgstr "Desactiva el comportament \"Arrossega per actualitzar\"\\ del navegador" #: src/components/header/ProfileMenu.tsx #: src/components/settings/DisplaySettings.tsx @@ -309,6 +318,8 @@ msgstr "Arrossegueu l'enllaç a la barra d'adreces d'interès" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "En la vista ampliada, en desplaçar-se per les entrades, es marquen com msgid "Indigo" msgstr "Indi" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Categoria pare" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Desestrellar" msgid "Unsubscribe" msgstr "Donar-se de baixa" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Nom d'usuari" @@ -1060,6 +1081,10 @@ msgstr "Avís" msgid "Website" msgstr "Lloc web" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "Groc" diff --git a/commafeed-client/src/locales/cs/messages.po b/commafeed-client/src/locales/cs/messages.po index b0efd07c..c341a4e9 100644 --- a/commafeed-client/src/locales/cs/messages.po +++ b/commafeed-client/src/locales/cs/messages.po @@ -60,6 +60,11 @@ msgstr "Přidat uživatele" msgid "Admin" msgstr "Správce" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Zpět k přihlášení" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Potvrďte heslo" msgid "Cozy" msgstr "Útulný" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Přetáhněte odkaz na lištu záložek" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "V rozšířeném zobrazení je procházením označíte jako přečtené msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Rodičovská kategorie" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Odstranit hvězdu" msgid "Unsubscribe" msgstr "Odhlásit odběr" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Uživatelské jméno" @@ -1060,6 +1081,10 @@ msgstr "Varování" msgid "Website" msgstr "Webové stránky" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/cy/messages.po b/commafeed-client/src/locales/cy/messages.po index 116094c8..47931420 100644 --- a/commafeed-client/src/locales/cy/messages.po +++ b/commafeed-client/src/locales/cy/messages.po @@ -60,6 +60,11 @@ msgstr "Ychwanegu defnyddiwr" msgid "Admin" msgstr "Gweinyddol" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Yn ôl i fewngofnodi" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Cadarnhau'r cyfrinair" msgid "Cozy" msgstr "clyd" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Llusgwch y ddolen i'r bar nod tudalen" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "Mewn gwedd estynedig, mae sgrolio trwy gofnodion yn nodi eu bod wedi'u d msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Categori Rhiant" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "dad-seren" msgid "Unsubscribe" msgstr "Dad-danysgrifio" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Enw defnyddiwr" @@ -1060,6 +1081,10 @@ msgstr "Rhybudd" msgid "Website" msgstr "Gwefan" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/da/messages.po b/commafeed-client/src/locales/da/messages.po index 9c8322aa..68a6e022 100644 --- a/commafeed-client/src/locales/da/messages.po +++ b/commafeed-client/src/locales/da/messages.po @@ -60,6 +60,11 @@ msgstr "Tilføj bruger" msgid "Admin" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Tilbage for at logge ind" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Bekræft adgangskode" msgid "Cozy" msgstr "Hyggeligt" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Træk linket til bogmærkelinjen" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "I udvidet visning markerer du dem som læst, når du ruller gennem poste msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Forældrekategori" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "" msgid "Unsubscribe" msgstr "Afmeld" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Brugernavn" @@ -1060,6 +1081,10 @@ msgstr "Advarsel" msgid "Website" msgstr "Hjemmeside" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/de/messages.po b/commafeed-client/src/locales/de/messages.po index 754d84a9..64c19f88 100644 --- a/commafeed-client/src/locales/de/messages.po +++ b/commafeed-client/src/locales/de/messages.po @@ -60,6 +60,11 @@ msgstr "Benutzer hinzufügen" msgid "Admin" msgstr "Verwaltung" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Zurück zum Login" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "Browser-Erweiterung für Chrome benötigt" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "Browser-Erweiterung" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "Browser-Erweiterung für Chrome benötigt" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Passwort bestätigen" msgid "Cozy" msgstr "Gemütlich" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "Strg" @@ -309,6 +318,8 @@ msgstr "Link in Lesezeichenleiste ziehen" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "In der erweiterten Ansicht werden Einträge beim Scrollen als gelesen ma msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Übergeordnete Kategorie" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Stern entfernen" msgid "Unsubscribe" msgstr "Abbestellen" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Benutzername" @@ -1060,6 +1081,10 @@ msgstr "Warnung" msgid "Website" msgstr "Webseite" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/en/messages.po b/commafeed-client/src/locales/en/messages.po index 2a521be2..665e8b7d 100644 --- a/commafeed-client/src/locales/en/messages.po +++ b/commafeed-client/src/locales/en/messages.po @@ -60,6 +60,11 @@ msgstr "Add user" msgid "Admin" msgstr "Admin" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "Admin user name" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Back to log in" msgid "Blue" msgstr "Blue" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "Browser extension required for Chrome" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "Browser extension" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "Browser extension required for Chrome" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "Browser tab" @@ -225,6 +230,10 @@ msgstr "Confirm password" msgid "Cozy" msgstr "Cozy" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "Create Admin Account" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "Ctrl" @@ -309,6 +318,8 @@ msgstr "Drag link to bookmark bar" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "In expanded view, scrolling through entries mark them as read" msgid "Indigo" msgstr "Indigo" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "Initial Setup" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Parent Category" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Unstar" msgid "Unsubscribe" msgstr "Unsubscribe" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "User created." + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "User name" @@ -1060,6 +1081,10 @@ msgstr "Warning" msgid "Website" msgstr "Website" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "Yellow" diff --git a/commafeed-client/src/locales/es/messages.po b/commafeed-client/src/locales/es/messages.po index dce50646..5db8f771 100644 --- a/commafeed-client/src/locales/es/messages.po +++ b/commafeed-client/src/locales/es/messages.po @@ -61,6 +61,11 @@ msgstr "Añadir usuario" msgid "Admin" msgstr "Administrador" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -138,14 +143,14 @@ msgstr "Volver a iniciar sesión" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "Se requiere extensión de navegador para Chrome" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "Extensión del navegador" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "Se requiere extensión de navegador para Chrome" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "Pestaña del navegador" @@ -226,6 +231,10 @@ msgstr "Confirmar contraseña" msgid "Cozy" msgstr "Acogedor" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "Ctrl" @@ -310,6 +319,8 @@ msgstr "Arrastra el enlace a la barra de marcadores" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -477,6 +488,10 @@ msgstr "En la vista ampliada, al desplazarse por las entradas marcarlas como le msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -748,6 +763,8 @@ msgid "Parent Category" msgstr "Categoría principal" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1040,6 +1057,10 @@ msgstr "Desmarcar" msgid "Unsubscribe" msgstr "Cancelar suscripción" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Nombre de usuario" @@ -1061,6 +1082,10 @@ msgstr "Advertencia" msgid "Website" msgstr "Sitio web" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/fa/messages.po b/commafeed-client/src/locales/fa/messages.po index edb3ea08..2aea41e9 100644 --- a/commafeed-client/src/locales/fa/messages.po +++ b/commafeed-client/src/locales/fa/messages.po @@ -60,6 +60,11 @@ msgstr "افزودن کاربر" msgid "Admin" msgstr "مدیر" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "بازگشت برای ورود به سیستم" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "رمز عبور را تأیید کنید" msgid "Cozy" msgstr "دنج" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "پیوند را به نوار نشانک بکشید" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "در نمای بازشده، پیمایش در ورودی‌ها، آن msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "دسته والد" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "" msgid "Unsubscribe" msgstr "لغو اشتراک" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "نام کاربری" @@ -1060,6 +1081,10 @@ msgstr "هشدار" msgid "Website" msgstr "وب سایت" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/fi/messages.po b/commafeed-client/src/locales/fi/messages.po index de25a853..3db5e890 100644 --- a/commafeed-client/src/locales/fi/messages.po +++ b/commafeed-client/src/locales/fi/messages.po @@ -60,6 +60,11 @@ msgstr "Lisää käyttäjä" msgid "Admin" msgstr "Järjestelmänvalvoja" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Takaisin sisäänkirjautumiseen" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Vahvista salasana" msgid "Cozy" msgstr "Viihtyisä" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Vedä linkki kirjanmerkkipalkkiin" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "Merkitse ne luetuiksi laajennetussa näkymässä vierittämällä merkin msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Pääluokka" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Poista tähti" msgid "Unsubscribe" msgstr "Peruuta tilaus" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Käyttäjänimi" @@ -1060,6 +1081,10 @@ msgstr "Varoitus" msgid "Website" msgstr "Verkkosivusto" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/fr/messages.po b/commafeed-client/src/locales/fr/messages.po index 545f3ab8..204c1e4f 100644 --- a/commafeed-client/src/locales/fr/messages.po +++ b/commafeed-client/src/locales/fr/messages.po @@ -60,6 +60,11 @@ msgstr "Ajouter un utilisateur" msgid "Admin" msgstr "Administrateur" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Retour à la connexion" msgid "Blue" msgstr "Bleu" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "L'extension navigateur est nécessaire sur Chrome" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "Extension navigateur" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "L'extension navigateur est nécessaire sur Chrome" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "Onglet navigateur" @@ -225,6 +230,10 @@ msgstr "Confirmer le mot de passe" msgid "Cozy" msgstr "Cozy" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "Ctrl" @@ -309,6 +318,8 @@ msgstr "Déplacez le lien vers la barre de favoris" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "En mode de lecture étendu, marquer les éléments comme lus lorsque la msgid "Indigo" msgstr "Indigo" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Catégorie parente" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Retirer des favoris" msgid "Unsubscribe" msgstr "Se désabonner" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Nom" @@ -1060,6 +1081,10 @@ msgstr "Attention" msgid "Website" msgstr "Site web" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "Jaune" diff --git a/commafeed-client/src/locales/gl/messages.po b/commafeed-client/src/locales/gl/messages.po index 81b3909c..71fd61d8 100644 --- a/commafeed-client/src/locales/gl/messages.po +++ b/commafeed-client/src/locales/gl/messages.po @@ -61,6 +61,11 @@ msgstr "Engadir persoa usuaria" msgid "Admin" msgstr "Administración" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -138,14 +143,14 @@ msgstr "Volver para iniciar sesión" msgid "Blue" msgstr "Azul" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "Complemento para o navegador requerido para Chrome" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "Complemento do navegador" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "Complemento para o navegador requerido para Chrome" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "Pestana do navegador" @@ -226,6 +231,10 @@ msgstr "Confirmar contrasinal" msgid "Cozy" msgstr "Acolledor" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "Ctrl" @@ -310,6 +319,8 @@ msgstr "Arrastra a ligazón á barra de marcadores" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -477,6 +488,10 @@ msgstr "Na vista ampliada, ao desprazarse polas entradas márcaas como lidas" msgid "Indigo" msgstr "Índigo" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -748,6 +763,8 @@ msgid "Parent Category" msgstr "Categoría superior" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1040,6 +1057,10 @@ msgstr "Retirar estrela" msgid "Unsubscribe" msgstr "Cancelar a subscrición" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Identificador" @@ -1061,6 +1082,10 @@ msgstr "Aviso" msgid "Website" msgstr "Páxina web" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "Amarelo" diff --git a/commafeed-client/src/locales/hu/messages.po b/commafeed-client/src/locales/hu/messages.po index 526c4168..59755906 100644 --- a/commafeed-client/src/locales/hu/messages.po +++ b/commafeed-client/src/locales/hu/messages.po @@ -60,6 +60,11 @@ msgstr "Felhasználó hozzáadása" msgid "Admin" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Vissza a bejelentkezéshez" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Erősítse meg a jelszót" msgid "Cozy" msgstr "Hangulatos" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Húzza a hivatkozást a könyvjelzősávra" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "Kibontott nézetben a bejegyzések görgetése olvasottként jelöli meg msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Szülő kategória" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "" msgid "Unsubscribe" msgstr "Leiratkozás" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Felhasználónév" @@ -1060,6 +1081,10 @@ msgstr "Figyelem" msgid "Website" msgstr "Webhely" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/id/messages.po b/commafeed-client/src/locales/id/messages.po index 0a539647..4a9a0a70 100644 --- a/commafeed-client/src/locales/id/messages.po +++ b/commafeed-client/src/locales/id/messages.po @@ -60,6 +60,11 @@ msgstr "Tambahkan pengguna" msgid "Admin" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Kembali untuk masuk" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Konfirmasi kata sandi" msgid "Cozy" msgstr "Nyaman" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Seret tautan ke bilah bookmark" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "Dalam tampilan yang diperluas, menggulir entri menandainya sebagai telah msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Kategori Induk" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Hapus bintang" msgid "Unsubscribe" msgstr "Berhenti berlangganan" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Nama pengguna" @@ -1060,6 +1081,10 @@ msgstr "Peringatan" msgid "Website" msgstr "Situs Web" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/it/messages.po b/commafeed-client/src/locales/it/messages.po index ec6214e3..14a4edbb 100644 --- a/commafeed-client/src/locales/it/messages.po +++ b/commafeed-client/src/locales/it/messages.po @@ -60,6 +60,11 @@ msgstr "Aggiungi utente" msgid "Admin" msgstr "Ammin" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Torna per accedere" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Conferma password" msgid "Cozy" msgstr "Accogliente" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "ctrl" @@ -309,6 +318,8 @@ msgstr "Trascina il collegamento sulla barra dei preferiti" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "Nella vista espansa, scorrendo le voci contrassegnale come lette" msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Categoria padre" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Elimina le stelle" msgid "Unsubscribe" msgstr "Annulla iscrizione" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Nome utente" @@ -1060,6 +1081,10 @@ msgstr "Avviso" msgid "Website" msgstr "Sito web" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/ja/messages.po b/commafeed-client/src/locales/ja/messages.po index ff8498d2..31a54b54 100644 --- a/commafeed-client/src/locales/ja/messages.po +++ b/commafeed-client/src/locales/ja/messages.po @@ -60,6 +60,11 @@ msgstr "ユーザー追加" msgid "Admin" msgstr "管理者" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "ログインに戻る" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "Chromeのブラウザー拡張が必要です" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "ブラウザー拡張" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "Chromeのブラウザー拡張が必要です" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "ブラウザータブ" @@ -225,6 +230,10 @@ msgstr "パスワード確認" msgid "Cozy" msgstr "Cozy" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "Ctrl" @@ -309,6 +318,8 @@ msgstr "リンクをブックマークバーにドラッグ" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "展開ビューでエントリーをスクロールすると、それら msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "親カテゴリ" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "スターを外す" msgid "Unsubscribe" msgstr "退会" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "ユーザー名" @@ -1060,6 +1081,10 @@ msgstr "警告" msgid "Website" msgstr "ウェブサイト" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/ko/messages.po b/commafeed-client/src/locales/ko/messages.po index 15335cf3..5b6c5100 100644 --- a/commafeed-client/src/locales/ko/messages.po +++ b/commafeed-client/src/locales/ko/messages.po @@ -60,6 +60,11 @@ msgstr "사용자 추가" msgid "Admin" msgstr "관리자" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "로그인으로 돌아가기" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "비밀번호 확인" msgid "Cozy" msgstr "코지" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "컨트롤" @@ -309,6 +318,8 @@ msgstr "링크를 북마크바로 드래그" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "확장 보기에서 항목을 스크롤하면 읽은 것으로 표시됩 msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "부모 카테고리" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "별표 제거" msgid "Unsubscribe" msgstr "구독 취소" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "사용자 이름" @@ -1060,6 +1081,10 @@ msgstr "경고" msgid "Website" msgstr "웹사이트" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/ms/messages.po b/commafeed-client/src/locales/ms/messages.po index a03b17f0..0ba25395 100644 --- a/commafeed-client/src/locales/ms/messages.po +++ b/commafeed-client/src/locales/ms/messages.po @@ -60,6 +60,11 @@ msgstr "Tambah pengguna" msgid "Admin" msgstr "Pentadbir" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Kembali untuk log masuk" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Sahkan kata laluan" msgid "Cozy" msgstr "Nyaman" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Seret pautan ke bar penanda halaman" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "Dalam paparan yang diperluas, menatal melalui entri menandakannya sebaga msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Kategori Induk" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Nyahbintang" msgid "Unsubscribe" msgstr "Nyahlanggan" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Nama pengguna" @@ -1060,6 +1081,10 @@ msgstr "Amaran" msgid "Website" msgstr "Laman web" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/nb/messages.po b/commafeed-client/src/locales/nb/messages.po index c3a3c01b..24f29335 100644 --- a/commafeed-client/src/locales/nb/messages.po +++ b/commafeed-client/src/locales/nb/messages.po @@ -60,6 +60,11 @@ msgstr "Legg til bruker" msgid "Admin" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Tilbake for å logge inn" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Bekreft passord" msgid "Cozy" msgstr "Koselig" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Dra lenken til bokmerkelinjen" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "I utvidet visning merker du dem som lest ved å rulle gjennom oppføring msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Overordnet kategori" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Fjern stjerne" msgid "Unsubscribe" msgstr "Avslutt abonnementet" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Brukernavn" @@ -1060,6 +1081,10 @@ msgstr "Advarsel" msgid "Website" msgstr "Nettsted" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/nl/messages.po b/commafeed-client/src/locales/nl/messages.po index 87e3913f..f761adc6 100644 --- a/commafeed-client/src/locales/nl/messages.po +++ b/commafeed-client/src/locales/nl/messages.po @@ -60,6 +60,11 @@ msgstr "Gebruiker toevoegen" msgid "Admin" msgstr "Beheerder" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Terug naar inloggen" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Bevestig wachtwoord" msgid "Cozy" msgstr "Gezellig" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Link naar bladwijzerbalk slepen" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "In de uitgevouwen weergave markeert het scrollen door items ze als gelez msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Oudercategorie" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Sterren uit" msgid "Unsubscribe" msgstr "Afmelden" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Gebruikersnaam" @@ -1060,6 +1081,10 @@ msgstr "Waarschuwing" msgid "Website" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/nn/messages.po b/commafeed-client/src/locales/nn/messages.po index 7db902d2..7a96078b 100644 --- a/commafeed-client/src/locales/nn/messages.po +++ b/commafeed-client/src/locales/nn/messages.po @@ -60,6 +60,11 @@ msgstr "Legg til bruker" msgid "Admin" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Tilbake for å logge inn" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Bekreft passord" msgid "Cozy" msgstr "Koselig" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Dra lenken til bokmerkelinjen" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "I utvidet visning merker du dem som lest ved å rulle gjennom oppføring msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Overordnet kategori" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Fjern stjerne" msgid "Unsubscribe" msgstr "Avslutt abonnementet" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Brukernavn" @@ -1060,6 +1081,10 @@ msgstr "Advarsel" msgid "Website" msgstr "Nettsted" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/pl/messages.po b/commafeed-client/src/locales/pl/messages.po index 2d1250df..9008775d 100644 --- a/commafeed-client/src/locales/pl/messages.po +++ b/commafeed-client/src/locales/pl/messages.po @@ -60,6 +60,11 @@ msgstr "Dodaj użytkownika" msgid "Admin" msgstr "Administracja" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Powrót do logowania" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Potwierdź hasło" msgid "Cozy" msgstr "Przytulny" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Przeciągnij link do paska zakładek" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "W widoku rozszerzonym przewijanie wpisów oznacza je jako przeczytane" msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Kategoria nadrzędna" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "" msgid "Unsubscribe" msgstr "Anuluj subskrypcję" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Nazwa użytkownika" @@ -1060,6 +1081,10 @@ msgstr "Ostrzeżenie" msgid "Website" msgstr "Strona internetowa" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/pt/messages.po b/commafeed-client/src/locales/pt/messages.po index 26189c83..078665a0 100644 --- a/commafeed-client/src/locales/pt/messages.po +++ b/commafeed-client/src/locales/pt/messages.po @@ -60,6 +60,11 @@ msgstr "Adicionar usuário" msgid "Admin" msgstr "Administrador" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Voltar para logar" msgid "Blue" msgstr "Azul" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "Extensão para o Chrome necessária" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "Extensão do navegador" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "Extensão para o Chrome necessária" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "Aba do navegador" @@ -225,6 +230,10 @@ msgstr "Confirmar senha" msgid "Cozy" msgstr "Aconchegante" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "Ctrl" @@ -309,6 +318,8 @@ msgstr "Arraste o link para a barra de favoritos" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "Na visualização expandida, rolar pelas entradas marca-as como lidas" msgid "Indigo" msgstr "Índigo" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Categoria Pai" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Desestrelar" msgid "Unsubscribe" msgstr "Cancelar inscrição" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Nome de usuário" @@ -1060,6 +1081,10 @@ msgstr "Aviso" msgid "Website" msgstr "Site" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "Amarelo" diff --git a/commafeed-client/src/locales/ru/messages.po b/commafeed-client/src/locales/ru/messages.po index 8923c6ab..90aad5ee 100644 --- a/commafeed-client/src/locales/ru/messages.po +++ b/commafeed-client/src/locales/ru/messages.po @@ -60,6 +60,11 @@ msgstr "Добавить пользователя" msgid "Admin" msgstr "Админ" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Вернуться к входу" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "Для браузера Chrome требуется расширение" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "Расширение для браузера" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "Для браузера Chrome требуется расширение" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Подтвердить пароль" msgid "Cozy" msgstr "Уютно" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "Ctrl" @@ -309,6 +318,8 @@ msgstr "Перетащите ссылку на панель закладок" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "В развернутом виде прокрутка записей п msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Родительская категория" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Удалить из избранного" msgid "Unsubscribe" msgstr "Отписаться" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Имя пользователя" @@ -1060,6 +1081,10 @@ msgstr "Предупреждение" msgid "Website" msgstr "Веб-сайт" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/sk/messages.po b/commafeed-client/src/locales/sk/messages.po index 7efb5544..a04c9bbb 100644 --- a/commafeed-client/src/locales/sk/messages.po +++ b/commafeed-client/src/locales/sk/messages.po @@ -60,6 +60,11 @@ msgstr "Pridať užívateľa" msgid "Admin" msgstr "Správca" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Späť na prihlásenie" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Potvrďte heslo" msgid "Cozy" msgstr "Útulný" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Presuňte odkaz na lištu so záložkami" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "V rozšírenom zobrazení ich rolovanie cez položky označí ako preč msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Rodičovská kategória" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Odobrať hviezdičku" msgid "Unsubscribe" msgstr "Zrušte odber" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Meno používateľa" @@ -1060,6 +1081,10 @@ msgstr "Varovanie" msgid "Website" msgstr "Webová stránka" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/sv/messages.po b/commafeed-client/src/locales/sv/messages.po index 95764956..c288b6b6 100644 --- a/commafeed-client/src/locales/sv/messages.po +++ b/commafeed-client/src/locales/sv/messages.po @@ -60,6 +60,11 @@ msgstr "Lägg till användare" msgid "Admin" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Tillbaka för att logga in" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Bekräfta lösenord" msgid "Cozy" msgstr "Mysigt" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "" @@ -309,6 +318,8 @@ msgstr "Dra länken till bokmärkesfältet" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "I utökad vy, rullning genom poster markerar dem som lästa" msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Föräldrakategori" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "" msgid "Unsubscribe" msgstr "Avregistrera" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Användarnamn" @@ -1060,6 +1081,10 @@ msgstr "Varning" msgid "Website" msgstr "Webbplats" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/tr/messages.po b/commafeed-client/src/locales/tr/messages.po index 80fa450d..86810a82 100644 --- a/commafeed-client/src/locales/tr/messages.po +++ b/commafeed-client/src/locales/tr/messages.po @@ -60,6 +60,11 @@ msgstr "Kullanıcı ekle" msgid "Admin" msgstr "Yönetici" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "Giriş yapmak için geri dön" msgid "Blue" msgstr "" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "Tarayıcı eklentisi" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "" @@ -225,6 +230,10 @@ msgstr "Şifreyi onayla" msgid "Cozy" msgstr "Rahat" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "Ctrl" @@ -309,6 +318,8 @@ msgstr "Bağlantıyı yer işareti çubuğuna sürükleyin" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "Genişletilmiş görünümde, girişler arasında gezinmek onları okund msgid "Indigo" msgstr "" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "Üst Kategori" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "Yıldızı kaldır" msgid "Unsubscribe" msgstr "Aboneliği iptal et" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "Kullanıcı adı" @@ -1060,6 +1081,10 @@ msgstr "Uyarı" msgid "Website" msgstr "Web sitesi" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "" diff --git a/commafeed-client/src/locales/zh/messages.po b/commafeed-client/src/locales/zh/messages.po index fbb15dc1..e85c7b08 100644 --- a/commafeed-client/src/locales/zh/messages.po +++ b/commafeed-client/src/locales/zh/messages.po @@ -60,6 +60,11 @@ msgstr "添加用户" msgid "Admin" msgstr "管理员" +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +msgid "Admin user name" +msgstr "" + #: src/components/content/add/CategorySelect.tsx #: src/components/header/Header.tsx #: src/components/sidebar/Tree.tsx @@ -137,14 +142,14 @@ msgstr "返回登录" msgid "Blue" msgstr "蓝" -#: src/components/KeyboardShortcutsHelp.tsx -msgid "Browser extension required for Chrome" -msgstr "浏览器扩展" - #: src/pages/app/AboutPage.tsx msgid "Browser extension" msgstr "浏览器扩展" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Browser extension required for Chrome" +msgstr "浏览器扩展" + #: src/components/settings/DisplaySettings.tsx msgid "Browser tab" msgstr "浏览器标签页" @@ -225,6 +230,10 @@ msgstr "确认密码" msgid "Cozy" msgstr "宽松" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Create Admin Account" +msgstr "" + #: src/components/KeyboardShortcutsHelp.tsx msgid "Ctrl" msgstr "Ctrl" @@ -309,6 +318,8 @@ msgstr "拖动链接到书签栏" #: src/components/admin/UserEdit.tsx #: src/components/settings/ProfileSettings.tsx #: src/pages/admin/AdminUsersPage.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx #: src/pages/auth/PasswordRecoveryPage.tsx msgid "E-mail" @@ -476,6 +487,10 @@ msgstr "在展开视图中,滚动条目将它们标记为已读" msgid "Indigo" msgstr "靛蓝" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Initial Setup" +msgstr "" + #: src/components/content/FeedEntryContextMenu.tsx #: src/components/content/FeedEntryFooter.tsx msgid "Keep unread" @@ -747,6 +762,8 @@ msgid "Parent Category" msgstr "父类别" #: src/components/admin/UserEdit.tsx +#: src/pages/auth/InitialSetupPage.tsx +#: src/pages/auth/InitialSetupPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/LoginPage.tsx #: src/pages/auth/RegistrationPage.tsx @@ -1039,6 +1056,10 @@ msgstr "取消星标" msgid "Unsubscribe" msgstr "取消订阅" +#: src/pages/auth/InitialSetupPage.tsx +msgid "User created." +msgstr "" + #: src/components/settings/ProfileSettings.tsx msgid "User name" msgstr "用户名" @@ -1060,6 +1081,10 @@ msgstr "警告" msgid "Website" msgstr "网站" +#: src/pages/auth/InitialSetupPage.tsx +msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started." +msgstr "" + #: src/components/settings/DisplaySettings.tsx msgid "Yellow" msgstr "黄" diff --git a/commafeed-client/src/pages/auth/InitialSetupPage.tsx b/commafeed-client/src/pages/auth/InitialSetupPage.tsx new file mode 100644 index 00000000..8ae83630 --- /dev/null +++ b/commafeed-client/src/pages/auth/InitialSetupPage.tsx @@ -0,0 +1,89 @@ +import { msg } from "@lingui/core/macro" +import { useLingui } from "@lingui/react" +import { Trans } from "@lingui/react/macro" +import { Box, Button, Container, Paper, PasswordInput, Stack, TextInput, Title } from "@mantine/core" +import { useForm } from "@mantine/form" +import { useAsyncCallback } from "react-async-hook" +import { client, errorToStrings } from "@/app/client" +import { redirectToRootCategory } from "@/app/redirect/thunks" +import { useAppDispatch } from "@/app/store" +import type { InitialSetupRequest } from "@/app/types" +import { Alert } from "@/components/Alert" +import { PageTitle } from "@/pages/PageTitle" + +export function InitialSetupPage() { + const dispatch = useAppDispatch() + const { _ } = useLingui() + + const form = useForm({ + initialValues: { + name: "", + password: "", + email: "", + }, + }) + + const login = useAsyncCallback(client.user.login, { + onSuccess: () => { + dispatch(redirectToRootCategory()) + }, + }) + + const setup = useAsyncCallback(client.user.initialSetup, { + onSuccess: () => { + login.execute(form.values) + }, + }) + + return ( + + + + + <Trans>Initial Setup</Trans> + + + + Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get + started. + + + {setup.error && ( + + + + )} +
+ + Admin user name} + placeholder={_(msg`Admin user name`)} + {...form.getInputProps("name")} + size="md" + required + autoCapitalize="off" + /> + Password} + placeholder={_(msg`Password`)} + {...form.getInputProps("password")} + size="md" + required + /> + E-mail} + placeholder={_(msg`E-mail`)} + {...form.getInputProps("email")} + size="md" + /> + + + +
+
+
+ ) +} diff --git a/commafeed-server/src/main/docker/README.md b/commafeed-server/src/main/docker/README.md index 6a755628..20384085 100644 --- a/commafeed-server/src/main/docker/README.md +++ b/commafeed-server/src/main/docker/README.md @@ -4,7 +4,7 @@ Official docker images for https://github.com/Athou/commafeed/ ## Quickstart -Start CommaFeed with a H2 embedded database. Then login as `admin/admin` on http://localhost:8082/ +Start CommaFeed with a H2 embedded database. The app will be accessible on http://localhost:8082/ ### docker diff --git a/commafeed-server/src/main/java/com/commafeed/CommaFeedApplication.java b/commafeed-server/src/main/java/com/commafeed/CommaFeedApplication.java index 109ccacb..9c6331e7 100644 --- a/commafeed-server/src/main/java/com/commafeed/CommaFeedApplication.java +++ b/commafeed-server/src/main/java/com/commafeed/CommaFeedApplication.java @@ -4,7 +4,6 @@ import jakarta.enterprise.event.Observes; import jakarta.inject.Singleton; import com.commafeed.backend.feed.FeedRefreshEngine; -import com.commafeed.backend.service.db.DatabaseStartupService; import com.commafeed.backend.task.TaskScheduler; import com.commafeed.security.password.PasswordConstraintValidator; @@ -16,7 +15,6 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class CommaFeedApplication { - private final DatabaseStartupService databaseStartupService; private final FeedRefreshEngine feedRefreshEngine; private final TaskScheduler taskScheduler; private final CommaFeedConfiguration config; @@ -24,8 +22,6 @@ public class CommaFeedApplication { public void start(@Observes StartupEvent ev) { PasswordConstraintValidator.setStrict(config.users().strictPasswordPolicy()); - databaseStartupService.populateInitialData(); - feedRefreshEngine.start(); taskScheduler.start(); } diff --git a/commafeed-server/src/main/java/com/commafeed/CommaFeedConstants.java b/commafeed-server/src/main/java/com/commafeed/CommaFeedConstants.java index 5cc5ee60..c9c39a32 100644 --- a/commafeed-server/src/main/java/com/commafeed/CommaFeedConstants.java +++ b/commafeed-server/src/main/java/com/commafeed/CommaFeedConstants.java @@ -4,6 +4,5 @@ import lombok.experimental.UtilityClass; @UtilityClass public class CommaFeedConstants { - public static final String USERNAME_ADMIN = "admin"; public static final String USERNAME_DEMO = "demo"; } diff --git a/commafeed-server/src/main/java/com/commafeed/ExceptionMappers.java b/commafeed-server/src/main/java/com/commafeed/ExceptionMappers.java index 4e47eec4..f304fb29 100644 --- a/commafeed-server/src/main/java/com/commafeed/ExceptionMappers.java +++ b/commafeed-server/src/main/java/com/commafeed/ExceptionMappers.java @@ -2,12 +2,16 @@ package com.commafeed; import jakarta.annotation.Priority; import jakarta.validation.ValidationException; +import jakarta.ws.rs.core.NewCookie; import jakarta.ws.rs.ext.Provider; import org.jboss.resteasy.reactive.RestResponse; +import org.jboss.resteasy.reactive.RestResponse.ResponseBuilder; import org.jboss.resteasy.reactive.RestResponse.Status; import org.jboss.resteasy.reactive.server.ServerExceptionMapper; +import com.commafeed.security.CookieService; + import io.quarkus.runtime.annotations.RegisterForReflection; import io.quarkus.security.AuthenticationFailedException; import io.quarkus.security.UnauthorizedException; @@ -18,17 +22,18 @@ import lombok.RequiredArgsConstructor; @Priority(1) public class ExceptionMappers { + private final CookieService cookieService; private final CommaFeedConfiguration config; @ServerExceptionMapper(UnauthorizedException.class) public RestResponse unauthorized(UnauthorizedException e) { - return RestResponse.status(RestResponse.Status.UNAUTHORIZED, - new UnauthorizedResponse(e.getMessage(), config.users().allowRegistrations())); + return RestResponse.status(Status.UNAUTHORIZED, new UnauthorizedResponse(e.getMessage(), config.users().allowRegistrations())); } @ServerExceptionMapper(AuthenticationFailedException.class) public RestResponse authenticationFailed(AuthenticationFailedException e) { - return RestResponse.status(RestResponse.Status.UNAUTHORIZED, new AuthenticationFailed(e.getMessage())); + NewCookie logoutCookie = cookieService.buildLogoutCookie(); + return ResponseBuilder.create(Status.UNAUTHORIZED, new AuthenticationFailed(e.getMessage())).cookie(logoutCookie).build(); } @ServerExceptionMapper(ValidationException.class) diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java index 2831f67e..61ae8030 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/UserRoleDAO.java @@ -32,4 +32,8 @@ public class UserRoleDAO extends GenericDAO { public Set findRoles(User user) { return findAll(user).stream().map(UserRole::getRole).collect(Collectors.toSet()); } + + public long countAdmins() { + return query().select(ROLE.count()).from(ROLE).where(ROLE.role.eq(Role.ADMIN)).fetchOne(); + } } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/service/UserService.java b/commafeed-server/src/main/java/com/commafeed/backend/service/UserService.java index 182f85f2..0d1c3f4a 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/service/UserService.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/service/UserService.java @@ -1,7 +1,6 @@ package com.commafeed.backend.service; import java.time.Instant; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Optional; @@ -139,10 +138,6 @@ public class UserService { return user; } - public void createAdminUser() { - register(CommaFeedConstants.USERNAME_ADMIN, "admin", "admin@commafeed.com", Arrays.asList(Role.ADMIN, Role.USER), true); - } - public void createDemoUser() { register(CommaFeedConstants.USERNAME_DEMO, "demo", "demo@commafeed.com", Collections.singletonList(Role.USER), true); } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/service/db/DatabaseStartupService.java b/commafeed-server/src/main/java/com/commafeed/backend/service/db/DatabaseStartupService.java index 8f363ab7..e97370e8 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/service/db/DatabaseStartupService.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/service/db/DatabaseStartupService.java @@ -25,23 +25,8 @@ public class DatabaseStartupService { private final UserService userService; private final CommaFeedConfiguration config; - public void populateInitialData() { - long count = unitOfWork.call(userDAO::count); - if (count == 0) { - unitOfWork.run(this::initialData); - } - } - - private void initialData() { - log.info("populating database with default values"); - try { - userService.createAdminUser(); - if (config.users().createDemoAccount()) { - userService.createDemoUser(); - } - } catch (Exception e) { - log.error(e.getMessage(), e); - } + public boolean isInitialSetupRequired() { + return unitOfWork.call(userDAO::count) == 0; } /** diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/ServerInfo.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/ServerInfo.java index 484a9d4f..2a136d96 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/model/ServerInfo.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/ServerInfo.java @@ -43,4 +43,7 @@ public class ServerInfo implements Serializable { @Schema(required = true) private long forceRefreshCooldownDuration; + @Schema(required = true) + private boolean initialSetupRequired; + } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/model/request/InitialSetupRequest.java b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/InitialSetupRequest.java new file mode 100644 index 00000000..a16182eb --- /dev/null +++ b/commafeed-server/src/main/java/com/commafeed/frontend/model/request/InitialSetupRequest.java @@ -0,0 +1,25 @@ +package com.commafeed.frontend.model.request; + +import java.io.Serializable; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import com.commafeed.security.password.ValidPassword; + +import lombok.Data; + +@SuppressWarnings("serial") +@Schema(description = "Initial admin account setup request") +@Data +public class InitialSetupRequest implements Serializable { + + @Schema(description = "admin username", required = true) + private String name; + + @Schema(description = "admin password", required = true) + @ValidPassword + private String password; + + @Schema(description = "admin email") + private String email; +} diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/AdminREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/AdminREST.java index e077d115..25f0c871 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/AdminREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/AdminREST.java @@ -26,7 +26,6 @@ import org.eclipse.microprofile.openapi.annotations.parameters.Parameter; import org.eclipse.microprofile.openapi.annotations.tags.Tag; import com.codahale.metrics.MetricRegistry; -import com.commafeed.CommaFeedConstants; import com.commafeed.backend.dao.UserDAO; import com.commafeed.backend.dao.UserRoleDAO; import com.commafeed.backend.model.User; @@ -101,8 +100,8 @@ public class AdminREST { if (req.isAdmin() && !roles.contains(Role.ADMIN)) { userRoleDAO.persist(new UserRole(u, Role.ADMIN)); } else if (!req.isAdmin() && roles.contains(Role.ADMIN)) { - if (CommaFeedConstants.USERNAME_ADMIN.equals(u.getName())) { - return Response.status(Status.FORBIDDEN).entity("You cannot remove the admin role from the admin user.").build(); + if (userRoleDAO.countAdmins() == 1) { + return Response.status(Status.FORBIDDEN).entity("You cannot remove the admin role from the last admin user.").build(); } for (UserRole userRole : userRoleDAO.findAll(u)) { if (userRole.getRole() == Role.ADMIN) { diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/ServerREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/ServerREST.java index 6bb3b839..5f01855f 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/ServerREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/ServerREST.java @@ -22,6 +22,7 @@ import com.commafeed.CommaFeedVersion; import com.commafeed.backend.HttpGetter; import com.commafeed.backend.HttpGetter.HttpResult; import com.commafeed.backend.feed.ImageProxyUrl; +import com.commafeed.backend.service.db.DatabaseStartupService; import com.commafeed.frontend.model.ServerInfo; import com.commafeed.security.Roles; @@ -39,6 +40,7 @@ public class ServerREST { private final HttpGetter httpGetter; private final CommaFeedConfiguration config; private final CommaFeedVersion version; + private final DatabaseStartupService databaseStartupService; @Path("/get") @GET @@ -57,6 +59,7 @@ public class ServerREST { infos.setWebsocketPingInterval(config.websocket().pingInterval().toMillis()); infos.setTreeReloadInterval(config.websocket().treeReloadInterval().toMillis()); infos.setForceRefreshCooldownDuration(config.feedRefresh().forceRefreshCooldownDuration().toMillis()); + infos.setInitialSetupRequired(databaseStartupService.isInitialSetupRequired()); return infos; } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java index e8177758..80ff0e0b 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java @@ -5,7 +5,9 @@ import java.net.URISyntaxException; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Collections; +import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.UUID; import jakarta.annotation.security.PermitAll; @@ -36,6 +38,7 @@ import com.commafeed.CommaFeedConfiguration; import com.commafeed.CommaFeedConstants; import com.commafeed.backend.Digests; import com.commafeed.backend.Urls; +import com.commafeed.backend.dao.UnitOfWork; import com.commafeed.backend.dao.UserDAO; import com.commafeed.backend.dao.UserRoleDAO; import com.commafeed.backend.dao.UserSettingsDAO; @@ -50,8 +53,10 @@ import com.commafeed.backend.model.UserSettings.ScrollMode; import com.commafeed.backend.service.MailService; import com.commafeed.backend.service.PasswordEncryptionService; import com.commafeed.backend.service.UserService; +import com.commafeed.backend.service.db.DatabaseStartupService; import com.commafeed.frontend.model.Settings; import com.commafeed.frontend.model.UserModel; +import com.commafeed.frontend.model.request.InitialSetupRequest; import com.commafeed.frontend.model.request.PasswordResetRequest; import com.commafeed.frontend.model.request.ProfileModificationRequest; import com.commafeed.frontend.model.request.RegistrationRequest; @@ -78,9 +83,11 @@ public class UserREST { private final UserSettingsDAO userSettingsDAO; private final UserService userService; private final PasswordEncryptionService encryptionService; + private final DatabaseStartupService databaseStartupService; private final MailService mailService; private final CommaFeedConfiguration config; private final UriInfo uri; + private final UnitOfWork unitOfWork; @Path("/settings") @GET @@ -231,7 +238,7 @@ public class UserREST { public Response saveUserProfile(@Valid @Parameter(required = true) ProfileModificationRequest request) { User user = authenticationContext.getCurrentUser(); if (CommaFeedConstants.USERNAME_DEMO.equals(user.getName())) { - return Response.status(Status.FORBIDDEN).build(); + return Response.status(Status.FORBIDDEN).entity("the profile of the demo account cannot be modified").build(); } Optional login = userService.login(user.getName(), request.getCurrentPassword()); @@ -276,6 +283,31 @@ public class UserREST { } } + @Path("/initialSetup") + @PermitAll + @POST + @Transactional + @Operation( + summary = "Create the initial admin account", + description = "This endpoint is only available when no users exist in the database") + public Response initialSetup(@Valid @Parameter(required = true) InitialSetupRequest req) { + boolean initialSetupRequired = databaseStartupService.isInitialSetupRequired(); + if (!initialSetupRequired) { + return Response.status(Status.BAD_REQUEST).entity("Initial setup has already been completed").build(); + } + + userService.register(req.getName(), req.getPassword(), req.getEmail(), List.of(Role.ADMIN, Role.USER), true); + + if (config.users().createDemoAccount()) { + User demo = userDAO.findByName(CommaFeedConstants.USERNAME_DEMO); + if (demo == null) { + userService.createDemoUser(); + } + } + + return Response.ok().build(); + } + @Path("/passwordReset") @PermitAll @POST @@ -361,9 +393,15 @@ public class UserREST { @Operation(summary = "Delete the user account") public Response deleteUser() { User user = authenticationContext.getCurrentUser(); - if (CommaFeedConstants.USERNAME_ADMIN.equals(user.getName()) || CommaFeedConstants.USERNAME_DEMO.equals(user.getName())) { - return Response.status(Status.FORBIDDEN).build(); + if (CommaFeedConstants.USERNAME_DEMO.equals(user.getName())) { + return Response.status(Status.FORBIDDEN).entity("the demo account cannot be deleted").build(); } + + Set roles = userRoleDAO.findRoles(user); + if (roles.contains(Role.ADMIN) && userRoleDAO.countAdmins() == 1) { + return Response.status(Status.FORBIDDEN).entity("The last admin account cannot be deleted").build(); + } + userService.unregister(userDAO.findById(user.getId())); return Response.ok().build(); } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java index c2fe7ddc..a6167cd7 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java @@ -1,8 +1,5 @@ package com.commafeed.frontend.servlet; -import java.time.Instant; -import java.util.Date; - import jakarta.annotation.security.PermitAll; import jakarta.inject.Singleton; import jakarta.ws.rs.GET; @@ -11,26 +8,25 @@ import jakarta.ws.rs.core.NewCookie; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.UriInfo; -import org.eclipse.microprofile.config.inject.ConfigProperty; import org.eclipse.microprofile.openapi.annotations.Operation; +import com.commafeed.security.CookieService; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor @Path("/logout") @PermitAll @Singleton public class LogoutServlet { private final UriInfo uri; - private final String cookieName; - - public LogoutServlet(UriInfo uri, @ConfigProperty(name = "quarkus.http.auth.form.cookie-name") String cookieName) { - this.uri = uri; - this.cookieName = cookieName; - } + private final CookieService cookieService; @GET @Operation(hidden = true) public Response get() { - NewCookie removeCookie = new NewCookie.Builder(cookieName).maxAge(0).expiry(Date.from(Instant.EPOCH)).path("/").build(); + NewCookie removeCookie = cookieService.buildLogoutCookie(); return Response.temporaryRedirect(uri.getBaseUri()).cookie(removeCookie).build(); } } diff --git a/commafeed-server/src/main/java/com/commafeed/security/CookieService.java b/commafeed-server/src/main/java/com/commafeed/security/CookieService.java new file mode 100644 index 00000000..84235e74 --- /dev/null +++ b/commafeed-server/src/main/java/com/commafeed/security/CookieService.java @@ -0,0 +1,24 @@ +package com.commafeed.security; + +import java.time.Instant; +import java.util.Date; + +import jakarta.inject.Singleton; +import jakarta.ws.rs.core.NewCookie; + +import io.quarkus.vertx.http.runtime.VertxHttpConfig; + +@Singleton +public class CookieService { + + private final String cookieName; + + public CookieService(VertxHttpConfig config) { + this.cookieName = config.auth().form().cookieName(); + } + + public NewCookie buildLogoutCookie() { + return new NewCookie.Builder(cookieName).maxAge(0).expiry(Date.from(Instant.EPOCH)).path("/").build(); + } + +} diff --git a/commafeed-server/src/test/java/com/commafeed/DatabaseReset.java b/commafeed-server/src/test/java/com/commafeed/DatabaseReset.java index 356ef85d..a8776931 100644 --- a/commafeed-server/src/test/java/com/commafeed/DatabaseReset.java +++ b/commafeed-server/src/test/java/com/commafeed/DatabaseReset.java @@ -6,8 +6,6 @@ import jakarta.persistence.EntityManager; import org.hibernate.Session; import org.kohsuke.MetaInfServices; -import com.commafeed.backend.service.db.DatabaseStartupService; - import io.quarkus.test.junit.callback.QuarkusTestBeforeEachCallback; import io.quarkus.test.junit.callback.QuarkusTestMethodContext; @@ -26,7 +24,5 @@ public class DatabaseReset implements QuarkusTestBeforeEachCallback { .getSessionFactory() .getSchemaManager() .truncateMappedObjects(); - - CDI.current().select(DatabaseStartupService.class).get().populateInitialData(); } } diff --git a/commafeed-server/src/test/java/com/commafeed/TestConstants.java b/commafeed-server/src/test/java/com/commafeed/TestConstants.java new file mode 100644 index 00000000..27404d19 --- /dev/null +++ b/commafeed-server/src/test/java/com/commafeed/TestConstants.java @@ -0,0 +1,6 @@ +package com.commafeed; + +public class TestConstants { + public static final String ADMIN_USERNAME = "admin"; + public static final String ADMIN_PASSWORD = "!Admin1234"; +} diff --git a/commafeed-server/src/test/java/com/commafeed/e2e/AuthentificationIT.java b/commafeed-server/src/test/java/com/commafeed/e2e/AuthentificationIT.java index 56ac792e..b648b280 100644 --- a/commafeed-server/src/test/java/com/commafeed/e2e/AuthentificationIT.java +++ b/commafeed-server/src/test/java/com/commafeed/e2e/AuthentificationIT.java @@ -1,8 +1,10 @@ package com.commafeed.e2e; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.commafeed.TestConstants; import com.microsoft.playwright.BrowserContext; import com.microsoft.playwright.Locator; import com.microsoft.playwright.Page; @@ -20,6 +22,11 @@ class AuthentificationIT { @InjectPlaywright private BrowserContext context; + @BeforeEach + void setup() { + PlaywrightTestUtils.initialSetup(); + } + @AfterEach void cleanup() { context.clearCookies(); @@ -29,7 +36,7 @@ class AuthentificationIT { void loginFail() { Page page = context.newPage(); page.navigate(getLoginPageUrl()); - PlaywrightTestUtils.login(page, "admin", "wrong_password"); + PlaywrightTestUtils.login(page, TestConstants.ADMIN_USERNAME, "wrong_password"); PlaywrightAssertions.assertThat(page.getByRole(AriaRole.ALERT)).containsText("wrong username or password"); } diff --git a/commafeed-server/src/test/java/com/commafeed/e2e/InitialSetupIT.java b/commafeed-server/src/test/java/com/commafeed/e2e/InitialSetupIT.java new file mode 100644 index 00000000..69b6879c --- /dev/null +++ b/commafeed-server/src/test/java/com/commafeed/e2e/InitialSetupIT.java @@ -0,0 +1,33 @@ +package com.commafeed.e2e; + +import org.junit.jupiter.api.Test; + +import com.commafeed.TestConstants; +import com.microsoft.playwright.BrowserContext; +import com.microsoft.playwright.Page; +import com.microsoft.playwright.assertions.PlaywrightAssertions; +import com.microsoft.playwright.options.AriaRole; + +import io.quarkiverse.playwright.InjectPlaywright; +import io.quarkiverse.playwright.WithPlaywright; +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +@WithPlaywright +class InitialSetupIT { + + @InjectPlaywright + private BrowserContext context; + + @Test + void createAdminAccount() { + Page page = context.newPage(); + page.navigate("http://localhost:8085"); + + page.getByPlaceholder("Admin User Name").fill(TestConstants.ADMIN_USERNAME); + page.getByPlaceholder("Password").fill(TestConstants.ADMIN_PASSWORD); + page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Create Admin Account")).click(); + + PlaywrightAssertions.assertThat(page).hasURL("http://localhost:8085/#/app/category/all"); + } +} diff --git a/commafeed-server/src/test/java/com/commafeed/e2e/PlaywrightTestUtils.java b/commafeed-server/src/test/java/com/commafeed/e2e/PlaywrightTestUtils.java index 6e7c6a5f..fc4e276f 100644 --- a/commafeed-server/src/test/java/com/commafeed/e2e/PlaywrightTestUtils.java +++ b/commafeed-server/src/test/java/com/commafeed/e2e/PlaywrightTestUtils.java @@ -1,16 +1,28 @@ package com.commafeed.e2e; +import com.commafeed.TestConstants; +import com.commafeed.frontend.model.request.InitialSetupRequest; import com.microsoft.playwright.Page; import com.microsoft.playwright.Page.GetByRoleOptions; import com.microsoft.playwright.options.AriaRole; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; import lombok.experimental.UtilityClass; @UtilityClass public class PlaywrightTestUtils { + public static void initialSetup() { + InitialSetupRequest req = new InitialSetupRequest(); + req.setName(TestConstants.ADMIN_USERNAME); + req.setPassword(TestConstants.ADMIN_PASSWORD); + + RestAssured.given().body(req).contentType(ContentType.JSON).post("rest/user/initialSetup").then().statusCode(200); + } + public static void login(Page page) { - login(page, "admin", "admin"); + login(page, TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); } public static void login(Page page, String username, String password) { diff --git a/commafeed-server/src/test/java/com/commafeed/e2e/ReadingIT.java b/commafeed-server/src/test/java/com/commafeed/e2e/ReadingIT.java index 6e22c40c..1eef3793 100644 --- a/commafeed-server/src/test/java/com/commafeed/e2e/ReadingIT.java +++ b/commafeed-server/src/test/java/com/commafeed/e2e/ReadingIT.java @@ -16,6 +16,7 @@ import org.mockserver.integration.ClientAndServer; import org.mockserver.model.HttpRequest; import org.mockserver.model.HttpResponse; +import com.commafeed.TestConstants; import com.commafeed.frontend.model.Entries; import com.microsoft.playwright.BrowserContext; import com.microsoft.playwright.Locator; @@ -45,7 +46,8 @@ class ReadingIT { .withBody(IOUtils.toString(getClass().getResource("/feed/rss.xml"), StandardCharsets.UTF_8)) .withDelay(TimeUnit.MILLISECONDS, 100)); - RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); + PlaywrightTestUtils.initialSetup(); + RestAssured.authentication = RestAssured.preemptive().basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); } @AfterEach diff --git a/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java b/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java index 8f6dae18..8dbaaf90 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/BaseIT.java @@ -21,10 +21,12 @@ import org.mockserver.integration.ClientAndServer; import org.mockserver.model.HttpRequest; import org.mockserver.model.HttpResponse; +import com.commafeed.TestConstants; import com.commafeed.frontend.model.Category; import com.commafeed.frontend.model.Entries; import com.commafeed.frontend.model.Subscription; import com.commafeed.frontend.model.request.AddCategoryRequest; +import com.commafeed.frontend.model.request.InitialSetupRequest; import com.commafeed.frontend.model.request.SubscribeRequest; import io.restassured.RestAssured; @@ -76,11 +78,20 @@ public abstract class BaseIT { mockServerClient.when(FEED_REQUEST).respond(HttpResponse.response().withBody(IOUtils.toString(resource, StandardCharsets.UTF_8))); } + protected void initialSetup(String userName, String password) { + InitialSetupRequest req = new InitialSetupRequest(); + req.setName(userName); + req.setPassword(password); + req.setEmail(userName + "@commafeed.com"); + + RestAssured.given().body(req).contentType(ContentType.JSON).post("rest/user/initialSetup").then().statusCode(200); + } + protected List login() { List
setCookieHeaders = RestAssured.given() .auth() .none() - .formParams("j_username", "admin", "j_password", "admin") + .formParams("j_username", TestConstants.ADMIN_USERNAME, "j_password", TestConstants.ADMIN_PASSWORD) .post("j_security_check") .then() .statusCode(HttpStatus.SC_OK) diff --git a/commafeed-server/src/test/java/com/commafeed/integration/SecurityIT.java b/commafeed-server/src/test/java/com/commafeed/integration/SecurityIT.java index 5a12d810..fe17da63 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/SecurityIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/SecurityIT.java @@ -8,9 +8,11 @@ import jakarta.ws.rs.core.HttpHeaders; import org.apache.hc.core5.http.HttpStatus; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.commafeed.ExceptionMappers.UnauthorizedResponse; +import com.commafeed.TestConstants; import com.commafeed.frontend.model.Entries; import com.commafeed.frontend.model.UserModel; import com.commafeed.frontend.model.request.MarkRequest; @@ -24,6 +26,11 @@ import io.restassured.http.ContentType; @QuarkusTest class SecurityIT extends BaseIT { + @BeforeEach + void setup() { + initialSetup(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); + } + @Test void notLoggedIn() { UnauthorizedResponse info = RestAssured.given() @@ -49,7 +56,13 @@ class SecurityIT extends BaseIT { @Test void basicAuthLogin() { - RestAssured.given().auth().preemptive().basic("admin", "admin").get("rest/user/profile").then().statusCode(HttpStatus.SC_OK); + RestAssured.given() + .auth() + .preemptive() + .basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD) + .get("rest/user/profile") + .then() + .statusCode(HttpStatus.SC_OK); } @Test @@ -57,7 +70,7 @@ class SecurityIT extends BaseIT { RestAssured.given() .auth() .preemptive() - .basic("admin", "wrong-password") + .basic(TestConstants.ADMIN_USERNAME, "wrong-password") .get("rest/user/profile") .then() .statusCode(HttpStatus.SC_UNAUTHORIZED); @@ -72,12 +85,12 @@ class SecurityIT extends BaseIT { void apiKey() { // create api key ProfileModificationRequest req = new ProfileModificationRequest(); - req.setCurrentPassword("admin"); + req.setCurrentPassword(TestConstants.ADMIN_PASSWORD); req.setNewApiKey(true); RestAssured.given() .auth() .preemptive() - .basic("admin", "admin") + .basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD) .body(req) .contentType(ContentType.JSON) .post("rest/user/profile") @@ -88,7 +101,7 @@ class SecurityIT extends BaseIT { String apiKey = RestAssured.given() .auth() .preemptive() - .basic("admin", "admin") + .basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD) .get("rest/user/profile") .then() .statusCode(HttpStatus.SC_OK) @@ -103,7 +116,7 @@ class SecurityIT extends BaseIT { long subscriptionId = RestAssured.given() .auth() .preemptive() - .basic("admin", "admin") + .basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD) .body(subscribeRequest) .contentType(ContentType.JSON) .post("rest/feed/subscribe") diff --git a/commafeed-server/src/test/java/com/commafeed/integration/WebSocketIT.java b/commafeed-server/src/test/java/com/commafeed/integration/WebSocketIT.java index a1e84327..7425c91c 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/WebSocketIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/WebSocketIT.java @@ -27,6 +27,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.commafeed.TestConstants; import com.commafeed.frontend.model.request.FeedModificationRequest; import io.quarkus.test.junit.QuarkusTest; @@ -40,7 +41,8 @@ class WebSocketIT extends BaseIT { @BeforeEach void setup() { - RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); + initialSetup(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); + RestAssured.authentication = RestAssured.preemptive().basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); } @AfterEach diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/AdminIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/AdminIT.java index c596cc25..a3d47890 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/AdminIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/AdminIT.java @@ -9,6 +9,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import com.commafeed.TestConstants; import com.commafeed.frontend.model.UserModel; import com.commafeed.frontend.model.request.AdminSaveUserRequest; import com.commafeed.frontend.model.request.IDRequest; @@ -23,7 +24,8 @@ class AdminIT extends BaseIT { @BeforeEach void setup() { - RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); + initialSetup(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); + RestAssured.authentication = RestAssured.preemptive().basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); } @AfterEach diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/CategoryIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/CategoryIT.java index 3ec99277..7aa7b5f0 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/CategoryIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/CategoryIT.java @@ -11,6 +11,7 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.xml.sax.InputSource; +import com.commafeed.TestConstants; import com.commafeed.frontend.model.Category; import com.commafeed.frontend.model.Entries; import com.commafeed.frontend.model.Entry; @@ -35,7 +36,8 @@ import io.restassured.http.ContentType; class CategoryIT extends BaseIT { @BeforeEach void setup() { - RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); + initialSetup(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); + RestAssured.authentication = RestAssured.preemptive().basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); } @AfterEach diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeedIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeedIT.java index 495a317e..2b8e0c39 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeedIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeedIT.java @@ -22,6 +22,7 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.xml.sax.InputSource; +import com.commafeed.TestConstants; import com.commafeed.frontend.model.Entry; import com.commafeed.frontend.model.FeedInfo; import com.commafeed.frontend.model.Subscription; @@ -43,7 +44,8 @@ class FeedIT extends BaseIT { @BeforeEach void setup() { - RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); + initialSetup(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); + RestAssured.authentication = RestAssured.preemptive().basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); } @AfterEach diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java index ea13f7e9..1e0bedc1 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.commafeed.TestConstants; import com.commafeed.backend.Digests; import com.commafeed.frontend.model.Entry; import com.commafeed.frontend.model.UserModel; @@ -28,11 +29,12 @@ class FeverIT extends BaseIT { @BeforeEach void setup() { - RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); + initialSetup(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); + RestAssured.authentication = RestAssured.preemptive().basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); // create api key ProfileModificationRequest req = new ProfileModificationRequest(); - req.setCurrentPassword("admin"); + req.setCurrentPassword(TestConstants.ADMIN_PASSWORD); req.setNewApiKey(true); RestAssured.given().body(req).contentType(ContentType.JSON).post("rest/user/profile").then().statusCode(HttpStatus.SC_OK); diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java index 59168d4c..aa3d266e 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java @@ -11,6 +11,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.commafeed.TestConstants; import com.commafeed.frontend.model.Settings; import com.commafeed.frontend.model.request.PasswordResetRequest; import com.commafeed.integration.BaseIT; @@ -29,7 +30,8 @@ class UserIT extends BaseIT { @BeforeEach void setup() { - RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); + initialSetup(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); + RestAssured.authentication = RestAssured.preemptive().basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); mailbox.clear(); } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/servlet/CustomCodeIT.java b/commafeed-server/src/test/java/com/commafeed/integration/servlet/CustomCodeIT.java index d7220e05..4b168bc2 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/servlet/CustomCodeIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/servlet/CustomCodeIT.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.commafeed.TestConstants; import com.commafeed.frontend.model.Settings; import com.commafeed.integration.BaseIT; @@ -18,7 +19,8 @@ class CustomCodeIT extends BaseIT { @BeforeEach void setup() { - RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); + initialSetup(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); + RestAssured.authentication = RestAssured.preemptive().basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); } @AfterEach diff --git a/commafeed-server/src/test/java/com/commafeed/integration/servlet/LogoutIT.java b/commafeed-server/src/test/java/com/commafeed/integration/servlet/LogoutIT.java index d9cebad6..72b283dc 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/servlet/LogoutIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/servlet/LogoutIT.java @@ -8,8 +8,10 @@ import jakarta.ws.rs.core.HttpHeaders; import org.apache.hc.core5.http.HttpStatus; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.commafeed.TestConstants; import com.commafeed.integration.BaseIT; import io.quarkus.test.junit.QuarkusTest; @@ -19,6 +21,11 @@ import io.restassured.http.Headers; @QuarkusTest class LogoutIT extends BaseIT { + @BeforeEach + void setup() { + initialSetup(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); + } + @Test void test() { List cookies = login(); diff --git a/commafeed-server/src/test/java/com/commafeed/integration/servlet/NextUnreadIT.java b/commafeed-server/src/test/java/com/commafeed/integration/servlet/NextUnreadIT.java index 338ccbb0..89e5d2f8 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/servlet/NextUnreadIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/servlet/NextUnreadIT.java @@ -7,6 +7,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.commafeed.TestConstants; import com.commafeed.integration.BaseIT; import io.quarkus.test.junit.QuarkusTest; @@ -17,7 +18,8 @@ class NextUnreadIT extends BaseIT { @BeforeEach void setup() { - RestAssured.authentication = RestAssured.preemptive().basic("admin", "admin"); + initialSetup(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); + RestAssured.authentication = RestAssured.preemptive().basic(TestConstants.ADMIN_USERNAME, TestConstants.ADMIN_PASSWORD); } @AfterEach