add a setup landing page instead of creating a default admin account

This commit is contained in:
Athou
2026-01-10 17:14:04 +01:00
parent ab3d41508f
commit a080ede15b
64 changed files with 1178 additions and 186 deletions

View File

@@ -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() {
<Routes>
<Route path="/" element={<Navigate to={`/app/category/${Constants.categories.all.id}`} replace />} />
<Route path="welcome" element={<WelcomePage />} />
<Route path="setup" element={<InitialSetupPage />} />
<Route path="login" element={<LoginPage />} />
<Route path="register" element={<RegistrationPage />} />
<Route path="passwordRecovery" element={<PasswordRecoveryPage />} />
@@ -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() {
<DisablePullToRefresh enabled={disablePullToRefresh} />
<HashRouter>
<InitialSetupHandler />
<RedirectHandler />
<AppRoutes />
</HashRouter>

View File

@@ -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<AuthenticationError> {
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<Settings>("user/settings"),
saveSettings: async (settings: Settings) => await axiosInstance.post("user/settings", settings),

View File

@@ -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/"
})

View File

@@ -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 {

View File

@@ -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 ""

View File

@@ -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"

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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"

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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"

View File

@@ -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"

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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"

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 ""

View File

@@ -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 "黄"

View File

@@ -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<InitialSetupRequest>({
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 (
<Container size="xs">
<PageTitle />
<Paper>
<Title order={2} mb="md">
<Trans>Initial Setup</Trans>
</Title>
<Box mb="md">
<Trans>
Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get
started.
</Trans>
</Box>
{setup.error && (
<Box mb="md">
<Alert messages={errorToStrings(setup.error)} />
</Box>
)}
<form onSubmit={form.onSubmit(setup.execute)}>
<Stack>
<TextInput
label={<Trans>Admin user name</Trans>}
placeholder={_(msg`Admin user name`)}
{...form.getInputProps("name")}
size="md"
required
autoCapitalize="off"
/>
<PasswordInput
label={<Trans>Password</Trans>}
placeholder={_(msg`Password`)}
{...form.getInputProps("password")}
size="md"
required
/>
<TextInput
type="email"
label={<Trans>E-mail</Trans>}
placeholder={_(msg`E-mail`)}
{...form.getInputProps("email")}
size="md"
/>
<Button type="submit" loading={setup.loading}>
<Trans>Create Admin Account</Trans>
</Button>
</Stack>
</form>
</Paper>
</Container>
)
}

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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";
}

View File

@@ -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<UnauthorizedResponse> 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> 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)

View File

@@ -32,4 +32,8 @@ public class UserRoleDAO extends GenericDAO<UserRole> {
public Set<Role> 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();
}
}

View File

@@ -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);
}

View File

@@ -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;
}
/**

View File

@@ -43,4 +43,7 @@ public class ServerInfo implements Serializable {
@Schema(required = true)
private long forceRefreshCooldownDuration;
@Schema(required = true)
private boolean initialSetupRequired;
}

View File

@@ -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;
}

View File

@@ -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) {

View File

@@ -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;
}

View File

@@ -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<User> 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<Role> 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();
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -0,0 +1,6 @@
package com.commafeed;
public class TestConstants {
public static final String ADMIN_USERNAME = "admin";
public static final String ADMIN_PASSWORD = "!Admin1234";
}

View File

@@ -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");
}

View File

@@ -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");
}
}

View File

@@ -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) {

View File

@@ -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

View File

@@ -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<HttpCookie> login() {
List<Header> 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)

View File

@@ -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")

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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<HttpCookie> cookies = login();

View File

@@ -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