From cd51b1de99ee2cc5c386bdd4f65f468887c121f1 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 12 May 2024 07:44:24 +0200 Subject: [PATCH 01/23] Translated using Weblate (Polish) Currently translated at 100.0% (1763 of 1763 strings) Translated using Weblate (Polish) Currently translated at 100.0% (1763 of 1763 strings) Translated using Weblate (Polish) Currently translated at 100.0% (1763 of 1763 strings) Translated using Weblate (Polish) Currently translated at 100.0% (1763 of 1763 strings) Translated using Weblate (Polish) Currently translated at 100.0% (1763 of 1763 strings) Translated using Weblate (Polish) Currently translated at 100.0% (1763 of 1763 strings) Co-authored-by: Magpie Co-authored-by: Weblate Translate-URL: https://weblate.cryptpad.org/projects/cryptpad/app/pl/ Translation: CryptPad/App --- www/common/translations/messages.pl.json | 179 ++++++++++++++++------- 1 file changed, 126 insertions(+), 53 deletions(-) diff --git a/www/common/translations/messages.pl.json b/www/common/translations/messages.pl.json index eade0f43f..096f45276 100644 --- a/www/common/translations/messages.pl.json +++ b/www/common/translations/messages.pl.json @@ -4,19 +4,19 @@ "pad": "Pad", "code": "Kod", "poll": "Balot", - "slide": "Prezentacja Markdown", + "slide": "Slajdy Markdown", "contacts": "Kontakty", "file": "Plik", "kanban": "Kanban", "presentation": "Prezentacja", "doc": "Dokument", "form": "Formularz", - "teams": "Grupy", + "teams": "Zespoły", "sheet": "Arkusz", "todo": "Do zrobienia", "media": "Media", "whiteboard": "Tablica", - "drive": "CryptDrive", + "drive": "Dysk", "diagram": "Diagram" }, "disconnected": "Rozłączony", @@ -55,7 +55,7 @@ "upgradeAccount": "Ulepsz swoje konto", "upgrade": "Ulepsz", "language": "Język", - "userlist_offline": "Jesteś w trybie offline, lista użytkowników nie jest dostępna.", + "userlist_offline": "Nie masz obecnie dostępu do internetu, lista użytkowników nie jest dostępna.", "errorState": "Błąd krytyczny: {0}", "forgotten": "Przeniesiono do kosza", "initializing": "Inicjalizacja...", @@ -63,7 +63,7 @@ "realtime_unrecoverableError": "Wystąpił nieodwracalny błąd. Wciśnij OK, aby odświeżyć stronę.", "disabledApp": "Ta aplikacja nie jest dostępna. Skontaktuj się z administratorem, aby uzyskać więcej informacji.", "mustLogin": "Musisz być zalogowany/a aby otrzymać dostęp do tej strony", - "deletedFromServer": "Dokument zniszczony", + "deletedFromServer": "Dokument został zniszczony", "deleted": "Usunięto", "saved": "Zapisano", "error": "Błąd", @@ -74,8 +74,8 @@ "invalidHashError": "Dokument, który chcesz zobaczyć ma błędny adres URL.", "chainpadError": "Podczas aktualizacji zawartości wystąpił krytyczny błąd. Dokument wyświetlany jest w trybie tylko do odczytu, aby umożliwić zachowanie wyników pracy.
Wciśnij klawisz Esc aby wyświetlić dokument lub odśwież stronę, by spróbować wrócić do trybu edycji.", "inactiveError": "Ten dokument został usunięty z powodu braku aktywności. Wciśnij klawisz Esc, aby stworzyć nowy dokument.", - "deletedError": "Ten dokument został usunięty i nie jest już dostępny.", - "expiredError": "Ten dokument został zniszczony i nie jest już dostępny.", + "deletedError": "Dokument został usunięty i nie jest już dostępny.", + "expiredError": "Dokument wygasł i nie jest już dostępny.", "anonymousStoreDisabled": "Administrator tej instancji wyłączył zapisywanie danych dla niezalogowanych użytkowników. Zaloguj się, aby otrzymać dostęp do aplikacji.", "padNotPinnedVariable": "Dokument zostanie usunięty po {4} dniach braku aktywności, {0}zaloguj się{1} lub {2}zarejestruj{3} aby go zachować.", "padNotPinned": "Ten dokument zostanie usunięty po 3 miesiącach braku aktywności, {0}zaloguj się{1} lub {2}zarejestruj{3} aby go zachować.", @@ -357,7 +357,7 @@ "settings_cat_pad": "Tekst sformatowany", "settings_cat_code": "Kod", "settings_cat_cursor": "Kursor", - "settings_cat_drive": "CryptDrive", + "settings_cat_drive": "Dysk", "settings_cat_account": "Konto", "register_emailWarning3": "Jeśli to rozumiesz i chcesz używać swojego adresu e-mail jako nazwy użytkownika, kliknij OK.", "register_emailWarning2": "Nie będziesz mógł zresetować swojego hasła za pomocą swojego e-maila, tak jak można to zrobić w przypadku innych usług.", @@ -438,14 +438,14 @@ "support_close": "Zamknij zgłoszenie", "support_answer": "Odpowiedz", "support_listHint": "Oto lista zgłoszeń wysłanych do administratorów i ich odpowiedzi. Zamknięte zgłoszenie nie może być ponownie otwarte, ale możesz utworzyć nowe. Możesz ukryć zgłoszenia, które zostały zamknięte.", - "support_listTitle": "Zgłoszenia wsparcia technicznego", + "support_listTitle": "Zgłoszenia pomocy technicznej", "support_cat_tickets": "Aktualne zgłoszenia", "support_formMessage": "Wpisz swoją wiadomość…", "support_formContentError": "Błąd: treść jest pusta", "support_formTitleError": "Błąd: tytuł jest pusty", "support_formButton": "Wyślij", "support_formHint": "Użyj tego formularza, aby bezpiecznie skontaktować się z administratorami.
Proszę zauważyć, że niektóre kwestie/pytania mogą być już poruszone w Podręczniku użytkownika programu CryptPad. Prosimy nie tworzyć nowego zgłoszenia, jeśli masz już otwarte zgłoszenie dotyczące tego samego problemu. Zamiast tego odpowiedz na oryginalną wiadomość, podając dodatkowe informacje.", - "support_formTitle": "Nowe zgłoszenie", + "support_formTitle": "Nowe Zgłoszenie", "support_cat_new": "Nowe zgłoszenie", "support_disabledHint": "Ta instancja CryptPad nie jest jeszcze skonfigurowana do korzystania z formularza pomocy technicznej.", "support_disabledTitle": "Wsparcie nie jest włączone", @@ -457,8 +457,8 @@ "admin_supportAddKey": "Dodaj klucz prywatny", "admin_supportInitPrivate": "Twoja instancja CryptPad ma skonfigurowany adres wsparcia technicznego, ale Twoje konto nie ma poprawnego klucza prywatnego, aby uzyskać do niej dostęp. Użyj poniższego formularza, aby dodać lub zaktualizować klucz prywatny do swojego konta.", "admin_supportInitHelp": "Twój serwer nie jest jeszcze skonfigurowany do używania skrzynki pocztowej służącej do udzielania pomocy technicznej. Jeśli chcesz, aby skrzynka pocztowa służąca do udzielania pomocy technicznej otrzymywała wiadomości od Twoich użytkowników, powinieneś poprosić administratora serwera o uruchomienie skryptu znajdującego się w \"./scripts/generate-admin-keys.js\", a następnie zapisanie klucza publicznego w pliku \"config.js\" i przesłanie Ci klucza prywatnego.", - "admin_cat_support": "Pomoc", - "supportPage": "Pomoc", + "admin_cat_support": "Wsparcie", + "supportPage": "Wsparcie", "fm_info_sharedFolderHistory": "To jest tylko historia Twojego folderu współdzielonego: {0}
Twój CryptDrive pozostanie w trybie tylko do odczytu podczas nawigacji.", "notifications_dismiss": "Odrzuć", "share_withFriends": "Udostępnij", @@ -499,7 +499,7 @@ "contact_devHint": "Na prośby o funkcje, poprawę użyteczności lub podziękowania.", "contact_dev": "Skontaktuj się z twórcami", "contact_adminHint": "W przypadku jakichkolwiek problemów związanych z kontem użytkownika, limitem pamięci lub dostępnością usługi.\n", - "contact_admin": "Skontaktuj się z administratorami w celu: {0}", + "contact_admin": "Skontaktuj się z administratorami: {0}", "footer_donate": "Przekaż darowiznę", "admin_flushCacheDone": "Pamięć podręczna wyczyszczona pomyślnie", "admin_flushCacheButton": "Wyczyść pamięć podręczną", @@ -516,7 +516,7 @@ "admin_activeSessionsHint": "Liczba aktywnych połączeń websocket (i połączonych unikalnych adresów IP)", "admin_activeSessionsTitle": "Aktywne połączenia", "adminPage": "Administracja", - "admin_cat_stats": "Statystyka", + "admin_cat_stats": "Statystyki", "admin_cat_general": "Ogólne", "admin_authError": "Tylko administratorzy mogą mieć dostęp do tej strony", "fm_expirablePad": "Traci ważność: {0}", @@ -558,7 +558,7 @@ "share_linkCopy": "Kopiuj link", "share_linkOpen": "Otwórz link", "share_linkPresent": "Obecny", - "share_linkView": "Pokaż", + "share_linkView": "Podgląd", "share_linkEdit": "Edytuj", "share_linkAccess": "Prawa dostępu do danych", "share_linkCategory": "Link", @@ -642,7 +642,7 @@ "about": "O stronie", "main_catch_phrase": "Pakiet do współpracy
end-to-end szyfrowany i oparty na otwartym kodzie źródłowym", "home_host": "To jest niezależna wersja społecznościowa CryptPada.", - "mdToolbar_toc": "Spis treści", + "mdToolbar_toc": "Spis Treści", "mdToolbar_code": "Kod", "mdToolbar_check": "Lista zadań", "mdToolbar_list": "Lista punktowana", @@ -843,7 +843,7 @@ "form_type_md": "Opis", "form_sort_hint": "Proszę przeciągnąć te pozycje od najbardziej (1) do najmniej ({0}) preferowanych.", "form_type_sort": "Lista uporządkowana", - "form_type_poll": "Sonda", + "form_type_poll": "Ankieta", "form_type_multiradio": "Macierz wyboru", "form_type_multicheck": "Macierz pól wyboru", "form_type_checkbox": "Pole wyboru", @@ -963,8 +963,8 @@ "pad_settings_width_large": "Pełna szerokość", "pad_settings_width_small": "Tryb strony", "pad_settings_info": "Domyślne ustawienia dla tego dokumentu. Zostaną one zastosowane, gdy nowi użytkownicy będą odwiedzać ten dokument.", - "pad_settings_title": "Ustawienia dokumentu", - "settings_colorthemeTitle": "Motyw kolorystyczny", + "pad_settings_title": "Ustawienia Dokumentu", + "settings_colorthemeTitle": "Kolor motywu", "settings_colorthemeHint": "Zmień kolory CryptPada na tym urządzeniu.", "settings_colortheme_default": "Domyślne ustawienie systemowe ({0})", "settings_colortheme_light": "Jasny", @@ -993,8 +993,8 @@ "offlineError": "Nie można zsynchronizować najnowszych danych, ta strona nie może zostać wyświetlona w tej chwili. Ładowanie będzie kontynuowane po przywróceniu połączenia z serwisem.", "share_noContactsOffline": "Jesteś obecnie w trybie offline. Kontakty nie są dostępne.", "access_offline": "Jesteś obecnie w trybie offline. Zarządzanie dostępem nie jest dostępne.", - "admin_support_last": "Zaktualizowany w dniu: ", - "admin_support_first": "Utworzony w dniu: ", + "admin_support_last": "Zaktualizowano: ", + "admin_support_first": "Utworzono: ", "admin_support_collapse": "Zwiń", "admin_support_open": "Pokaż", "admin_support_closed": "Zamknięte zgłoszenia:", @@ -1005,7 +1005,7 @@ "history_trimPrompt": "Ten dokument ma zapisaną {0} historię, która może spowolnić czas ładowania. Rozważ usunięcie historii, jeśli nie jest ona potrzebna.", "mediatag_loadButton": "Wczytaj załącznik", "settings_mediatagSizeHint": "Maksymalny rozmiar w megabajtach (MB) dla automatycznie ładowanych elementów multimedialnych (obrazy, wideo, pdf) osadzonych w dokumentach. Elementy większe niż podany rozmiar mogą zostać załadowane ręcznie. Użyj \"-1\", aby zawsze ładować elementy multimedialne automatycznie.", - "settings_mediatagSizeTitle": "Automatyczny limit pobierania", + "settings_mediatagSizeTitle": "Automatyczny limit pobrań", "mediatag_notReady": "Proszę dokończyć pobieranie", "pad_mediatagOpen": "Otwórz plik", "pad_mediatagShare": "Udostępnij plik", @@ -1014,11 +1014,11 @@ "download_zip_file": "Plik {0}/{1}", "download_zip": "Tworzenie pliku ZIP…", "fileTableHeader": "Pobrane i przesłane dane", - "allowNotifications": "Zezwól na powiadomienia", - "archivedFromServer": "Zarchiwizowany dokument", + "allowNotifications": "Wszystkie powiadomienia", + "archivedFromServer": "Dokument zarchiwizowany", "restoredFromServer": "Przywrócony dokument", - "admin_archiveInput2": "Hasło do dokumentu", - "admin_archiveInput": "Adres URL dokumentu", + "admin_archiveInput2": "Hasło dokumentu", + "admin_archiveInput": "URL dokumentu", "admin_unarchiveButton": "Przywróc", "admin_unarchiveHint": "Przywróć dokument, który został wcześniej zarchiwizowany", "admin_archiveButton": "Archiwizuj", @@ -1058,10 +1058,10 @@ "admin_defaultlimitTitle": "Maksymalny limit przechowywania danych (MB)", "admin_registrationTitle": "Zamknij rejestrację", "admin_registrationHint": "Nie zezwalaj nowym użytkownikom na rejestrację", - "snapshots_cantMake": "Nie można utworzyć zrzutu obrazu. Jesteś rozłączony.", - "snapshots_notFound": "Ten zrzut obrazu już nie istnieje, ponieważ historia tego dokumentu została usunięta.", - "snapshot_error_exists": "Istnieje już zrzut tej wersji", - "snapshots_ooPickVersion": "Przed utworzeniem zrzutu obrazu należy wybrać wersję", + "snapshots_cantMake": "Nie można utworzyć obrazu. Jesteś rozłączony.", + "snapshots_notFound": "Ten obraz już nie istnieje, ponieważ historia tego dokumentu została usunięta.", + "snapshot_error_exists": "Istnieje już obraz tej wersji", + "snapshots_ooPickVersion": "Przed utworzeniem obrazu należy wybrać wersję", "oo_version": "Wersja: ", "oo_version_latest": "Najnowsza", "snapshots_delete": "Usuń", @@ -1069,10 +1069,10 @@ "snapshots_close": "Zamknij", "snapshots_restore": "Przywróć", "snapshots_open": "Otwórz", - "snapshots_placeholder": "Tytuł zrzutu obrazu", - "snapshots_new": "Nowy zrzut obrazu", - "snapshots_button": "Zrzuty obrazów", - "snaphot_title": "Zrzut obrazu", + "snapshots_placeholder": "Nazwa obrazu", + "snapshots_new": "Nowy obraz", + "snapshots_button": "Obrazy dokumentu", + "snaphot_title": "Obraz dokumentu", "infobar_versionHash": "Obecnie przeglądasz poprzednią wersję tego dokumentu ({0}).", "history_restoreDriveDone": "CryptDrive przywrócony", "history_restoreDrivePrompt": "Czy na pewno chcesz zastąpić aktualną wersję CryptDrive wyświetloną wersją?", @@ -1198,7 +1198,7 @@ "form_answerWarning": "Niepotwierdzona tożsamość", "form_answerName": "Odpowiedź od {0} na {1}", "form_backButton": "Wstecz", - "form_viewButton": "Pokaż", + "form_viewButton": "Podgląd", "form_answerAnonymous": "Odpowiedź anonimowa w dniu {0}", "form_showSummary": "Pokaż podsumowanie", "form_showIndividual": "Pokaż poszczególne odpowiedzi", @@ -1433,7 +1433,7 @@ "admin_noticeTitle": "Ogłoszenie na stronie głównej", "admin_noticeHint": "Opcjonalny komunikat wyświetlany na stronie głównej", "ui_true": "prawda", - "admin_usersTitle": "Katalog Użytkownika", + "admin_usersTitle": "Katalog użytkowników", "home_location": "Zaszyfrowane dane znajdują się w {0}", "home_morestorage": "By uzyskać więcej miejsca:", "register_instance": "Tworzenie nowego konta na {0}", @@ -1452,7 +1452,7 @@ "admin_documentSize": "Rozmiar dokumentu", "admin_documentMetadata": "Aktualne metadane", "admin_documentCreationTime": "Stworzono", - "admin_channelArchived": "Zarchiwizowano", + "admin_channelArchived": "Archiwalny", "admin_documentMetadataPlaceholder": "ID lub adres URL dokumentu", "admin_currentlyOnline": "Obecnie dostępni", "admin_storageUsage": "Przechowywane dane", @@ -1464,7 +1464,7 @@ "admin_planlimit": "Limit pamięci", "admin_getRawMetadata": "Historia metadanych", "og_teamDrive": "Dysk grupowy", - "admin_cat_users": "Katalog Użytkownika", + "admin_cat_users": "Katalog użytkowników", "admin_archiveReason": "Podaj powód archiwizacji i potwierdź, że chcesz kontynuować", "admin_accountMetadataPlaceholder": "ID Użytkownika (klucz publiczny)", "footer_website": "Strona Projektu", @@ -1482,7 +1482,7 @@ "admin_planName": "Nazwa planu", "admin_note": "Adnotacja planu", "admin_archiveBlock": "Zarchiwizuj segment", - "admin_restoreBlock": "Przywróć segment", + "admin_restoreBlock": "Przywróć archiwalny segment", "og_login": "Zaloguj się do {0}", "og_register": "Zarejestruj konto w {0}", "og_contact": "{0} Kontakt", @@ -1491,10 +1491,10 @@ "ui_jsRequired": "JavaScript musi być włączony, aby wykonać szyfrowanie w przeglądarce", "og_encryptedAppType": "Zaszyfrowany {0}", "admin_documentConflict": "Zarchiwizuj/przywróć", - "admin_conflictExplanation": "Istnieją dwie wersje tego dokumentu. Przywrócenie zarchiwizowanej wersji spowoduje nadpisanie obecnej wersji. Archiwizacja obecnej wersji spowoduje nadpisanie wersji zarchiwizowanej. Nie będzie możliwe cofnięcie żadnej z tych czynności.", + "admin_conflictExplanation": "Istnieją dwie wersje tego dokumentu. Przywrócenie wersji archiwalnej spowoduje nadpisanie obecnej. Archiwizacja obecnej wersji spowoduje nadpisanie archiwalnej. Nie będzie możliwe cofnięcie żadnej z tych czynności.", "fm_filterBy": "Filtr", "fm_rmFilter": "Wyłącz filtr", - "calendar_rec": "Powtórz", + "calendar_rec": "Powtarzaj", "calendar_rec_no": "Raz", "calendar_rec_daily": "Codziennie", "calendar_rec_stop": "Zatrzymaj powtarzanie", @@ -1504,16 +1504,16 @@ "calendar_rec_edit_from": "Edytuj przyszłe wydarzenia", "calendar_rec_edit_one": "Edytuj tylko to wydarzenie", "calendar_rec_weekend": "Codziennie w weekendy", - "calendar_rec_updated": "Zasada zmieniona w {0}", + "calendar_rec_updated": "Zasada zmieniona {0}", "calendar_rec_yearly": "Raz na rok, w {2}", "admin_blockAvailable": "Segment dostępny", - "admin_blockArchived": "Segment zarchiwizowany", + "admin_blockArchived": "Segment został zarchiwizowany", "admin_firstPinTime": "Data najstarszej pinezki", "admin_lastPinTime": "Data najnowszej pinezki", "admin_pinLogAvailable": "Dostępny log pinezek", - "admin_pinLogArchived": "Log pinezek jest zarchiwizowany", + "admin_pinLogArchived": "Log pinezek został zarchiwizowany", "admin_getPinList": "Lista obecnych pinezek", - "og_default": "CryptPad: end-to-end szyfrowany pakiet narzędzi do współpracy", + "og_default": "CryptPad: szyfrowany end-to-end pakiet narzędzi do współpracy", "calendar_rec_edit": "Powtarzające się wydarzenie", "calendar_str_filter_day": "Dni: {0}", "calendar_rec_weekdays": "Codziennie w weekendy", @@ -1588,7 +1588,7 @@ "duplicate": "Duplikat", "mfa_revoke_label": "Aby wyłączyć 2FA, na początku wprowadź swoje hasło", "mfa_revoke_button": "Potwierdź wyłączenie 2FA", - "team_nameAlreadySet": "Zespół już nazywa się {0}", + "team_nameAlreadySet": "{0} jest już nazwą zespołu", "selectLanguage": "Wybierz język", "dph_reason": "Powód: {0}", "dph_sf_destroyed_team": "Folder współdzielony {0} na dysku zespołowym {1} został zniszczony przez właściciela", @@ -1642,11 +1642,11 @@ "recovery_mfa_error": "Nieznany błąd. Odśwież i spróbuj ponownie.", "recovery_mfa_disabled": "Uwierzytelnianie dwuetapowe jest już wyłączone dla tego konta.", "recovery_mfa_secret_ph": "Kod odzyskiwania", - "admin_invitationTitle": "Linki do zaproszeń", - "admin_invitationCreate": "Stwórz link do zaproszenia", - "admin_invitationEmail": "Adres email użytkownika", + "admin_invitationTitle": "Zaproszenia", + "admin_invitationCreate": "Stwórz zaproszenie", + "admin_invitationEmail": "Email użytkownika", "admin_usersRemove": "Usuń", - "register_invalidToken": "Link zaproszenia jest nieprawidłowy", + "register_invalidToken": "Zaproszenie jest nieprawidłowe", "label_logo": "Logo CryptPad", "recovery_mfa_secret": "Wprowadź swój kod odzyskiwania aby wyłączyć 2FA dla swojego konta:", "login_notFilledUser": "Wprowadź nazwę użytkownika", @@ -1668,12 +1668,12 @@ "loading_recover": "Nie możesz zdobyć kodu? Przywróć swoje konto", "goLeft": "Lewo", "ssoauth_header": "Hasło CryptPad", - "ssoauth_form_hint_login": "Wprowadź swoje konto CryptPad", + "ssoauth_form_hint_login": "Wprowadź swoje hasło CryptPad", "kanban_showTags": "Wszystkie tagi", "kanban_hideTags": "Mniej tagów", "admin_forcemfaTitle": "Wymagaj Uwierzytelniania Dwuetapowego", "admin_forcemfaHint": "Wszyscy użytkownicy tej instancji zostaną poproszeni o skonfigurowanie uwierzytelniania dwuetapowego, aby zalogować się do swojego konta.", - "support_recordedContent": "Zawartość", + "support_recordedContent": "Treść", "support_legacyDump": "Wyeksportuj wszystko", "support_legacyClear": "Usuń to konto", "mfa_disable": "Wyłącz 2FA", @@ -1690,5 +1690,78 @@ "recovery_forgot_text": "Skopiuj następujące informacje i prześlij je administratorom swojej instancji", "goRight": "Prawo", "loading_mfa_required": "Uwierzytelnianie dwuetapowe jest wymagane na tej instancji. Uaktualnij swoje kono z użyciem aplikacji uwierzytelniającej i poniższego formularza.", - "admin_invitationLink": "Link do zaproszenia" + "admin_invitationLink": "Zaproszenie", + "admin_registrationSsoTitle": "Zamknij rejestrację SSO", + "admin_usersAdd": "Dodaj istniejącego użytkownika", + "admin_storeInvitedLabel": "Automatycznie dodaj zaproszonych użytkowników", + "admin_usersRemoveConfirm": "Czy na pewno chcesz usunąć użytkownika z katalogu? Nadal będą mieć dostęp do i będą w stanie używać swojego konta.", + "ssoauth_form_hint_register": "Dodaj hasło CryptPad aby zwiększyć poziom zabezpieczenia, lub pozostaw puste i kontynuuj. Jeśli nie dodasz hasła, klucze chroniące Twoje dane będą dostępne dla administratorów instancji.", + "label_viewMode": "Włącz tryb podglądu", + "team_nameTooLong": "Zbyt długa nazwa zespołu (maks. 50 znaków)", + "context_menu": "Akcje folderów", + "admin_accountReport": "Raport archiwizacji konta", + "admin_accountReportFull": "Pobierz raport szczegółowy", + "admin_channelPlaceholder": "Zastępstwo zniszczonego dokumentu", + "status": "Status strony", + "admin_diskUsageWarning": "Uwaga! W zależności od ilości danych przechowywanych w tej instancji, wygenerowanie raportu może pochłonąć całą pamięć dostępną na serwerze i spowodować awarię.", + "calendar_rec_change": "Przenoszenie powtarzającego się wydarzenia do innego kalendarza. Zmiana może zostać zrobiona tylko dla tego wydarzenia, lub dla wszystkich jego powtórzeń.", + "calendar_rec_change_first": "Przenoszenie pierwszego powtarzającego się wydarzenia do innego kalendarza. Powtórzenia również zostaną przeniesione.", + "admin_cat_security": "Bezpieczeństwo", + "admin_cat_customize": "Dostosuj", + "admin_colorTitle": "Kolor akcentu", + "admin_logoTitle": "Własne logo", + "admin_supportAdd": "Dodaj kontakt do zespołu pomocy technicznej", + "admin_logoHint": "SVG, PNG lub JPG, maksymalny rozmiar 200KB", + "admin_logoButton": "Prześlij nowe", + "admin_logoRemoveButton": "Przywróć domyślne", + "admin_colorHint": "Zmień kolor akcentu Twojej instancji CryptPad. Dopilnuj, żeby tekst i przyciski były czytelne i posiadały wystarczający kontrast zarówno dla jasnego jak i ciemnego motywu.", + "admin_colorCurrent": "Obecny kolor akcentu", + "admin_colorChange": "Zmień kolor", + "admin_colorPick": "Wybierz kolor", + "admin_colorPreview": "Podgląd koloru", + "admin_supportSetupTitle": "Inicjalizuj pomoc", + "admin_supportEnabled": "System pomocy jest włączony.", + "admin_supportConfirm": "Jesteś pewien? Usuniesz wszystkie istniejące zgłoszenia i zablokujesz dostęp wszystkim moderatorom.", + "admin_supportDisabled": "System pomocy jest wyłączony.", + "admin_supportDelete": "Wyłącz pomoc", + "admin_supportMembers": "Zespół pomocy technicznej", + "support_cat_search": "Szukaj", + "support_cat_settings": "Ustawienia", + "support_cat_closed": "Zamknięte", + "support_cat_open": "Skrzynka odbiorcza", + "support_openTicketTitle": "Otwórz zgłoszenie dla użytkownika", + "support_cat_legacy": "Poprzednie", + "support_pending": "Zgłoszenia archiwalne:", + "support_pending_tag": "Archiwalne", + "support_active_tag": "Skrzynka odbiorcza", + "support_closed_tag": "Zamknięte", + "support_privacyTitle": "Odpowiedz anonimowo", + "support_privacyHint": "Zaznacz tę opcję żeby odpowiedzieć jako 'Zespół Pomocy Technicznej' zamiast własną nazwą użytkownika", + "support_notificationsTitle": "Wyłącz powiadomienia", + "support_userChannel": "ID kanału powiadomień użytkownika", + "support_openTicketHint": "Skopiuj dane użytkownika odbiorcy z ich profilu lub z istniejącego zgłoszenia. Otrzymają powiadomienie o wiadomości.", + "support_recordedId": "ID formatki (unikalny)", + "support_userKey": "Klucz publiczny użytkownika", + "support_invalChan": "Nieprawidłowy kanał powiadomień", + "support_recordedTitle": "Formatki", + "admin_supportTeamTitle": "Zarządzaj zespołem pomocy technicznej", + "admin_supportTeamHint": "Dodaj lub usuń osoby z zespołu pomocy technicznej tej instancji", + "support_pasteUserData": "Wklej tu dane użytkownika", + "support_legacyButton": "Pokaż aktywne zgłoszenia", + "support_recordedHint": "Zdefiniuj często używane fragmenty tekstu, które będzie można potem wstawić do wiadomości jednym kliknięciem.", + "support_recordedEmpty": "Brak formatek", + "support_legacyTitle": "Zobacz stare dane pomocy", + "support_searchLabel": "Znajdź (tytuł lub ID zgłoszenia)", + "support_legacyHint": "Zobacz zgłoszenia z poprzedniego systemu pomocy technicznej i odtwórz je w nowym.", + "admin_supportOpen": "Otwórz helpdesk", + "admin_supportInit": "Inicjalizuj helpdesk na tej instancji", + "moderationPage": "Helpdesk", + "support_userNotification": "Nowe zgłoszenie lub odpowiedź: {0}", + "admin_invitationHint": "Każde zaproszenie stworzy jedno konto, nawet jeśli rejestracja jest zamknięta. Nazwa użytkownika i email są wyłącznie poglądowe. CryptPad nie wyśle zaproszenia (czy czegokolwiek innego) mailem, skopiuj link i prześlij go za pomocą wybranego bezpiecznego kanału.", + "admin_storeSsoLabel": "Automatycznie dodaj użytkowników SSO", + "admin_usersBlock": "URL bloku logowania użytkownika (opcjonalne)", + "admin_usersHint": "Lista znanych Ci kont na tej instancji. Zaznacz poniżej aby dodać konta automatycznie, lub wprowadź informacje ręcznie za pomocą formularza.", + "admin_supportSetupHint": "Stwórz lub aktualizuj klucze pomocy.", + "admin_supportRotateNotify": "Uwaga: nowe klucze zostały wygenerowane, ale nieoczekiwany błąd nie pozwolił systemowi wysłać ich moderatorom. Usuń i dodaj ponownie członków zespołu", + "support_notificationsHint": "Zaznacz tę opcję, żeby wyłączyć powiadomienia o nowych zgłoszeniach i odpowiedziach" } From 101b6ccc54415b1088cab2c8b8c05a31794f0313 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 12 May 2024 07:44:24 +0200 Subject: [PATCH 02/23] Translated using Weblate (French) Currently translated at 100.0% (1763 of 1763 strings) Co-authored-by: Mathilde Co-authored-by: Weblate Translate-URL: https://weblate.cryptpad.org/projects/cryptpad/app/fr/ Translation: CryptPad/App --- www/common/translations/messages.fr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/common/translations/messages.fr.json b/www/common/translations/messages.fr.json index 58d4a3f96..3e36950f8 100644 --- a/www/common/translations/messages.fr.json +++ b/www/common/translations/messages.fr.json @@ -1249,8 +1249,8 @@ "form_makePublic": "Publier les réponses", "form_invalidQuestion": "Questions {0}", "form_invalidWarning": "Certaines réponses contiennent des erreurs :", - "form_input_ph_url": "https://exemple.fr", - "form_input_ph_email": "courriel@exemple.fr", + "form_input_ph_url": "https://example.net/exemple", + "form_input_ph_email": "courriel_exemple@example.net", "form_notAnswered": "{0} réponses vides", "form_answerWarning": "Identité non confirmée", "form_answerName": "Réponse de {0} le {1}", From 51ca397d1367e2638b893ce21e4258366ba0e5ba Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 12 May 2024 07:44:24 +0200 Subject: [PATCH 03/23] Translated using Weblate (Bulgarian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 23.0% (407 of 1763 strings) Translated using Weblate (Bulgarian) Currently translated at 22.2% (392 of 1763 strings) Co-authored-by: Weblate Co-authored-by: Мария Рангелова Translate-URL: https://weblate.cryptpad.org/projects/cryptpad/app/bg/ Translation: CryptPad/App --- www/common/translations/messages.bg.json | 43 +++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/www/common/translations/messages.bg.json b/www/common/translations/messages.bg.json index 09a74f589..5216cce93 100644 --- a/www/common/translations/messages.bg.json +++ b/www/common/translations/messages.bg.json @@ -366,5 +366,46 @@ "login_invalUser": "Изисква се потребителско име", "login_confirm": "Потвърдете паролата", "login_unhandledError": "Възникна неочаквана грешка :(", - "settings_exportWarning": "Забележка: този инструмент все още е в бета версия и може да има проблеми с мащабируемостта. За по-добра производителност се препоръчва да оставите този раздел на фокус - без превключване на друг раздел." + "settings_exportWarning": "Забележка: този инструмент все още е в бета версия и може да има проблеми с мащабируемостта. За по-добра производителност се препоръчва да оставите този раздел на фокус - без превключване на друг раздел.", + "settings_export_reading": "Четене от вашият CryptDrive...", + "settings_export_download": "Изтегляне и декриптиране на вашите документи...", + "settings_export_compressing": "Данните се компресират...", + "settings_exportError": "Вижте грешките", + "settings_exportErrorEmpty": "Този документ не може да бъде експортиран (липсващо или невалидно съдържание).", + "settings_exportErrorOther": "Възникна грешка при опит за експортиране на този документ: {0}", + "settings_resetNewTitle": "Почистване на CryptDrive", + "settings_resetButton": "Премахване", + "settings_resetDone": "Вашият диск вече е празен!", + "settings_resetError": "Неправилен текст за потвърждение. Вашият CryptDrive не е променен.", + "settings_resetTipsAction": "Нулиране", + "settings_resetTips": "Съвети", + "settings_resetTipsButton": "Нулиране на наличните съвети в CryptDrive", + "settings_resetTipsDone": "Всички съвети вече са видими отново.", + "settings_thumbnails": "Миниатюри", + "settings_disableThumbnailsAction": "Деактивиране на създаването на миниатюри във вашия CryptDrive", + "settings_resetThumbnailsAction": "Почистване", + "settings_resetThumbnailsDescription": "Почистване на всички миниатюри на документи, съхранени във вашия браузър.", + "settings_resetThumbnailsDone": "Всички миниатюри са изтрити.", + "settings_importTitle": "Импортиране на последните документи в браузъра във вашия CryptDrive", + "settings_export_done": "Вашето сваляне приключи!", + "settings_exportErrorDescription": "Не успяхме да добавим следните документи в експортирания файл:", + "settings_exportErrorMissing": "Този документ липсва на нашите сървъри (изтекъл му е срокът на съхранение или е изтрит от собственика му)", + "settings_reset": "Премахване на всички файлове и папки от вашия CryptDrive", + "settings_resetPrompt": "С това действие ще премахне всички документи от вашето устройство.
Сигурни ли сте, че искате да продължите?
Напишете “Обичам CryptPad”, за да потвърдите.", + "settings_disableThumbnailsDescription": "Миниатюрите се създават автоматично и се съхраняват във вашия браузър, когато влезете в нов документ. Можете да деактивирате тази функция тук.", + "settings_autostoreTitle": "Съхранение на документи в CryptDrive", + "settings_import": "Импортиране", + "settings_importConfirm": "Сигурни ли сте, че искате да импортирате последните документи от този браузър в CryptDrive във потребителския ви акаунт?", + "settings_importDone": "Импортирането завърши", + "settings_autostoreHint": "Автоматично Всички документи, които ползвате, се съхраняват във вашия CryptDrive.
Ръчно (винаги се иска потвърждаване) Ако все още не сте съхранили документ, ще бъдете попитани дали искате, да ги съхранявате във вашия CryptDrive.
Ръчно (никога не се иска потвърждаване) Документите не се съхраняват автоматично във вашия CryptDrive. Опцията за съхраняването им ще бъде скрита.", + "settings_autostoreYes": "Автоматично", + "settings_autostoreNo": "Ръчно (никога не се иска потвърждаване)", + "settings_autostoreMaybe": "Ръчно (вининаги се иска потвърждаване)", + "settings_userFeedbackTitle": "Обратна връзка", + "settings_userFeedbackHint1": "CryptPad предоставя обратна връзка на сървъра, за да ни уведоми как да подобрим вашия опит. ", + "settings_userFeedbackHint2": "Съдържанието на вашите документи никога няма да бъде споделено със сървъра.", + "settings_userFeedback": "Активиране на обратната връзка с потребителя", + "settings_deleteTitle": "Изтриване на акаунта", + "settings_deleteHint": "Изтриването на акаунта е окончателно. Вашият CryptDrive и вашият списък с документи ще бъдат изтрити от сървъра. Останалите ви документи ще бъдат изтрити след 90 дни, ако никой друг не ги е съхранил в своя CryptDrive.", + "settings_deleteButton": "Изтриване на акаунта си" } From 4a34a0157e3cb126a75199c14a22aa2f1cecdc11 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 12 May 2024 07:44:25 +0200 Subject: [PATCH 04/23] Translated using Weblate (Hungarian) Currently translated at 23.7% (419 of 1763 strings) Translated using Weblate (Hungarian) Currently translated at 23.7% (419 of 1763 strings) Translated using Weblate (Hungarian) Currently translated at 19.1% (337 of 1763 strings) Translated using Weblate (Hungarian) Currently translated at 19.1% (337 of 1763 strings) Co-authored-by: Bence Kocsi Co-authored-by: Veszpremi Gabor Co-authored-by: Weblate Translate-URL: https://weblate.cryptpad.org/projects/cryptpad/app/hu/ Translation: CryptPad/App --- www/common/translations/messages.hu.json | 92 +++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/www/common/translations/messages.hu.json b/www/common/translations/messages.hu.json index ebb4b3c7b..a6957d7e4 100644 --- a/www/common/translations/messages.hu.json +++ b/www/common/translations/messages.hu.json @@ -331,5 +331,95 @@ "status": "Állapotlap", "access_passwordUsed": "Ennek a dokumentumnak ez már volt jelszava . Nem használható többször.", "admin_diskUsageWarning": "Figyelem! A példányon tárolt adatmennyiségtől függően ez a riport elhasználhatja akár a server teljes memóriáját és lefagyáshoz vezethet.", - "poll_comment_disabled": "A ✓ gommbal tudod a kérdőívet publikálni, ezután lehet kommentálni." + "poll_comment_disabled": "A ✓ gommbal tudod a kérdőívet publikálni, ezután lehet kommentálni.", + "fm_removePermanentlyDialog": "Tuti kiakarod törtölni ezt a Driveból? Ez a fájl megmarad a többi felhasználok számára akik eltárolták.", + "fm_contextMenuError": "Nem tudtuk megnyitni a menüt ehez. Ha továbbra is fennmarad ez a probléma, frissítse az oldalt.", + "fm_removeSeveralPermanentlyDialog": "Biztosan akarod törölni ezt a {0} elemet a tárhelyedről? De továbbra is megmaradnak a többi felhasználó tárhelyén, akik szintén tárolták ezeket.", + "fm_deleteOwnedPads": "Biztos vagy benne hogy véglegesen megsemmisíted ezt a fájlt?", + "fm_restoreDialog": "Biztosan helyreállitja a/az {0}-t az eredeti helyére?", + "fm_unknownFolderError": "A kiválasztott vagy legutóbb megtekintett mappa már nem létezik. Szülő-mappa megnyitása...", + "fm_selectError": "Nem lehet kiválasztani a célzott elemet. Ha a probléma továbbra is fennáll, próbálja újratölteni az oldalt.", + "fm_categoryError": "Nem lehet megnyitni a kiválasztott kategóriát, a gyökérmappát mutatjuk.", + "fm_info_root": "Tetszőleges mélységű mapparendszert hozhatsz létre a fájljaid rendezésére.", + "fm_info_template": "Ezek a dokumentumok sablonként vannak tárolva. Új dokumentumok létrehozásához lehet őket használni.", + "fm_info_recent": "Ezelet a dokumentumokat a közelmúltban megnyitották vagy módosították (Te, vagy a közreműködők).", + "fm_info_trash": "Ürítsd ki a Kukát a CryptDrive tárhelyed felszabadításához.", + "fm_info_sharedFolder": "Ez egy megosztott mappa. Nem vagy bejelentkezve, ezért Számodra ez csak olvasható.
Regisztrálj, vagy Jelentkezz be, hogy importálhas a CryptDrive-odra, és szerkeszthesd a tartalmát.", + "fm_info_anonymous": "Nem vagy bejelentkezve, így a dokumentumaid {0} nap múlva lejárnak. Ha törlődik a böngésződ gyorsítótára, elvesznek.
Regisztrálj (nincs szükség személyes adatok megadására) vagy Jelentkezz be, hogy tárolhasd őket hosszabb távon. Tudj meg többet a a regisztrált CryptPad-fiókokról!.", + "fm_renamedPad": "Egyéni nevet állított be ehhez a dokumentumhoz. A neve:
{0}", + "fm_canBeShared": "Ez a mappa megosztható", + "fm_prop_tagsList": "Címkék", + "fm_burnThisDriveButton": "Törölje a CryptPad által tárolt összes információt a böngészőből", + "fm_burnThisDrive": "Biztos, hogy el akar távolítani mindent, amit a CryptPad tárol a böngészőjében?
Ez eltávolítja a CryptDrive-ot és annak előzményeit a böngészőjéből, de a dokumentumai továbbra is létezni fognak (titkosítva) a szerverünkön.", + "fm_padIsOwned": "Ön ennek a dokumentumnak a tulajdonosa", + "fm_padIsOwnedOther": "Ez a dokumentum egy másik felhasználó tulajdonában van", + "fm_tags_name": "Címke neve", + "fm_tags_used": "Felhasználások száma", + "fm_restoreDrive": "A meghajtó visszaállítása egy korábbi állapotba. A legjobb eredmény elérése érdekében ne végezzen változtatásokat a meghajtón, amíg ez a folyamat be nem fejeződött.", + "fc_newfolder": "Új mappa", + "fc_rename": "Átnevezés", + "fc_color": "Szín megváltoztatása", + "fc_open": "Megnyitás", + "fc_open_ro": "Megnyitás (csak olvasás)", + "fc_expandAll": "Minden kinyitása", + "fc_delete": "Kukába helyezés", + "fc_delete_owned": "Megsemmisítés", + "fc_restore": "Visszaállítás", + "fc_remove": "Kitörlés", + "fc_remove_sharedfolder": "Eltávolitás", + "fc_empty": "Kuka kiürítése", + "fc_prop": "Tulajdonságok", + "fc_hashtag": "Címkék", + "settingsButton": "Beállítások", + "login_username": "Felhasználónév", + "login_password": "Jelszó", + "register_header": "Regisztrálás", + "register_cancel": "Mégse", + "settings_cat_account": "Fiók", + "settings_cat_drive": "Drive", + "settings_cat_code": "Kód", + "settings_cat_subscription": "Feliratkozás", + "settings_title": "Beállitások", + "settings_save": "Mentés", + "settings_restore": "Helyreállítás", + "settings_resetButton": "Eltávolitás", + "settings_resetTipsAction": "Visszaállítás", + "settings_resetTips": "Tippek", + "settings_resetThumbnailsAction": "Törlés", + "settings_autostoreYes": "Automatikus", + "settings_userFeedbackTitle": "Visszajelzés", + "upload_cancelled": "Megszakított", + "upload_size": "Méret", + "download_mt_button": "Letöltése", + "download_dl": "Letöltés", + "download_step1": "Letöltés", + "download_step2": "Visszatitkósitás", + "todo_title": "CryptTodo", + "mdToolbar_help": "Segítség", + "mdToolbar_bold": "Vastag", + "mdToolbar_italic": "Döltbető", + "mdToolbar_strikethrough": "Áthúzott", + "mdToolbar_link": "Link", + "mdToolbar_quote": "Idézés", + "mdToolbar_code": "Kód", + "about": "Rólunk", + "features_anon": "Vendég", + "features_registered": "Regisztrált", + "features_premium": "Premium", + "edit": "Szerkesztés", + "view": "Megtekintés", + "fm_deletedPads": "Ezek a dokumentumok már nem léteznek a szerveren, eltávolításra kerültek a CryptDrive-ról: {0}", + "fc_collapseAll": "Minden bezárása", + "register_warning": "Figyelmeztetés", + "mdToolbar_tutorial": "https://www.markdowntutorial.com/", + "fm_info_owned": "Ön a tulajdonosa az itt megjelenített dokumentumoknak. Ez azt jelenti, hogy bármikor véglegesen eltávolíthatja őket a szerverről. Ha ezt megteszi, más felhasználók többé nem férhetnek hozzá hozzájuk.", + "fm_moveNestedSF": "Egy megosztott mappát nem helyezhet el egy másik mappán belül. A {0} mappa nem lett áthelyezve.", + "fm_passwordProtected": "Jelszóvédett", + "fc_newsharedfolder": "Új megosztott mappa", + "settings_cat_cursor": "Egérmutató", + "settings_thumbnails": "Előnézet", + "settings_import": "Importálás", + "upload_pending": "Függöben lévő", + "upload_up": "Feltöltés", + "features_f_subscribe": "Feliratkozás" } From b075e638035c63c32566cdb45bc63a6538cb6b2f Mon Sep 17 00:00:00 2001 From: Weblate Date: Sun, 12 May 2024 07:44:25 +0200 Subject: [PATCH 05/23] Translated using Weblate (Basque) Currently translated at 98.2% (1732 of 1763 strings) Translated using Weblate (Basque) Currently translated at 97.5% (1720 of 1763 strings) Co-authored-by: Alexander Gabilondo Co-authored-by: Weblate Translate-URL: https://weblate.cryptpad.org/projects/cryptpad/app/eu/ Translation: CryptPad/App --- www/common/translations/messages.eu.json | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/www/common/translations/messages.eu.json b/www/common/translations/messages.eu.json index d2506ccbd..a1d0b0af1 100644 --- a/www/common/translations/messages.eu.json +++ b/www/common/translations/messages.eu.json @@ -1717,5 +1717,21 @@ "admin_supportEnabled": "Laguntza-sistema gaituta dago.", "admin_supportDisabled": "Laguntza-sistema desgaituta dago.", "admin_supportDelete": "Desgaitu laguntza", - "admin_colorHint": "Aldatu zure CryptPad instantziaren nabarmentze kolorea. Ziurtatu testua eta botoiak kontraste nahikoarekin irakur daitezkeela gai argietan zein ilunetan." + "admin_colorHint": "Aldatu zure CryptPad instantziaren nabarmentze kolorea. Ziurtatu testua eta botoiak kontraste nahikoarekin irakur daitezkeela gai argietan zein ilunetan.", + "admin_supportAdd": "Gehitu kontaktu bat laguntza-taldeari", + "admin_supportConfirm": "Ziur zaude? Honek lehendik dauden sarrera guztiak ezabatuko ditu eta moderatzaile guztien sarbidea blokeatuko da.", + "admin_supportMembers": "Laguntza taldea", + "admin_supportRotateNotify": "Abisua: gako berriak sortu dira baina ustekabeko errore batek sistemak moderatzaileei bidaltzea eragotzi du. Mesedez, kendu eta gehitu berriro laguntza-taldeko kide guztiak", + "support_cat_settings": "Ezarpenak", + "support_cat_search": "Bilatu", + "support_cat_closed": "Itxita", + "support_cat_open": "Sarrera-ontzia", + "support_cat_legacy": "Zaharra", + "support_pending": "Artxibatutako sarrerak:", + "support_pending_tag": "Artxibatuta", + "support_active_tag": "Sarrera-ontzia", + "support_closed_tag": "Itxita", + "support_privacyTitle": "Erantzun anonimoki", + "moderationPage": "Laguntza mahaia", + "admin_supportInit": "Hasieratu laguntza mahaia instantzia honetan" } From 615c1ab52315c35c16dcd621e9896f33904cccf3 Mon Sep 17 00:00:00 2001 From: Wolfgang Ginolas Date: Wed, 22 May 2024 14:23:34 +0200 Subject: [PATCH 06/23] Workarounds for missing OnlyOffice methods https://github.com/cryptpad/cryptpad/issues/1489 --- install-onlyoffice.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install-onlyoffice.sh b/install-onlyoffice.sh index 67f2343a9..cebb80343 100755 --- a/install-onlyoffice.sh +++ b/install-onlyoffice.sh @@ -33,7 +33,7 @@ main () { install_version v4 6ebc6938 install_version v5 88a356f0 install_version v6 abd8a309 - install_version v7 9d8b914a + install_version v7 ba82142f rm -rf "$BUILDS_DIR" if command -v rdfind &> /dev/null; then From 88fbf530084d547e45a43b99567d14fbc4205c97 Mon Sep 17 00:00:00 2001 From: mathilde-cryptpad <156299270+mathilde-cryptpad@users.noreply.github.com> Date: Fri, 17 May 2024 10:26:35 +0200 Subject: [PATCH 07/23] remove 3001 expose port from Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ad9ffcfdf..e46137658 100644 --- a/Dockerfile +++ b/Dockerfile @@ -59,7 +59,7 @@ ENTRYPOINT ["/bin/bash", "/cryptpad/docker-entrypoint.sh"] HEALTHCHECK --interval=1m CMD wget --no-verbose --tries=1 http://localhost:3000/ -q -O /dev/null || exit 1 # Ports -EXPOSE 3000 3001 3003 +EXPOSE 3000 3003 # Run cryptpad on startup CMD ["npm", "start"] From c96594aa6dfe7a23039972ebb3d98b9f011fafcc Mon Sep 17 00:00:00 2001 From: mathilde-cryptpad <156299270+mathilde-cryptpad@users.noreply.github.com> Date: Fri, 17 May 2024 10:26:51 +0200 Subject: [PATCH 08/23] remove 3001 ports from docker-compose.yml --- docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index f959124ea..b5da86df0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -30,7 +30,6 @@ services: ports: - "3000:3000" - - "3001:3001" - "3003:3003" ulimits: From 9a5de41ae5275b13803ecba2eb57615992c088f8 Mon Sep 17 00:00:00 2001 From: mathilde-cryptpad <156299270+mathilde-cryptpad@users.noreply.github.com> Date: Thu, 18 Apr 2024 11:26:13 +0200 Subject: [PATCH 09/23] change 'inactive' to 'archived' in the config.example.js file --- config/config.example.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.example.js b/config/config.example.js index d6ebb4a50..7c0c9ff24 100644 --- a/config/config.example.js +++ b/config/config.example.js @@ -192,7 +192,7 @@ module.exports = { * This archived data still takes up space and so you'll probably still want to * remove these files after a brief period. * - * cryptpad/scripts/evict-inactive.js is intended to be run daily + * cryptpad/scripts/evict-archived.js is intended to be run daily * from a crontab or similar scheduling service. * * The intent with this feature is to provide a safety net in case of accidental From c9600c12ab1c4d332fd0f56d5ba462337e9f4521 Mon Sep 17 00:00:00 2001 From: mathilde-cryptpad <156299270+mathilde-cryptpad@users.noreply.github.com> Date: Fri, 17 May 2024 10:34:51 +0200 Subject: [PATCH 10/23] add a location block dedicated to the websocket to improve performances --- docs/example.nginx.conf | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/example.nginx.conf b/docs/example.nginx.conf index 8bd4fc3a1..89c3cbeff 100644 --- a/docs/example.nginx.conf +++ b/docs/example.nginx.conf @@ -70,4 +70,15 @@ server { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } + + location ^~ /cryptpad_websocket { + proxy_pass http://localhost:3003; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection upgrade; + } } From 1260f2517da3152ea7a388ac394aa881ca51d18b Mon Sep 17 00:00:00 2001 From: David Benque Date: Wed, 22 May 2024 14:31:28 +0100 Subject: [PATCH 11/23] Bump version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d8e177a61..1560a01d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cryptpad", - "version": "5.7.0", + "version": "2024.3.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cryptpad", - "version": "5.7.0", + "version": "2024.3.1", "license": "AGPL-3.0+", "dependencies": { "@mcrowe/minibloom": "^0.2.0", diff --git a/package.json b/package.json index 7212e1465..acd163d19 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "cryptpad", "description": "realtime collaborative visual editor with zero knowledge server", - "version": "2024.3.0", + "version": "2024.3.1", "license": "AGPL-3.0+", "repository": { "type": "git", From fc31c2906090ecc0c07080247334cacb1afe65be Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 22 May 2024 15:41:03 +0200 Subject: [PATCH 12/23] Translated using Weblate (Italian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 98.3% (1734 of 1763 strings) Co-authored-by: David Benqué Translate-URL: https://weblate.cryptpad.org/projects/cryptpad/app/it/ Translation: CryptPad/App --- www/common/translations/messages.it.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/common/translations/messages.it.json b/www/common/translations/messages.it.json index f764e2779..895e05b53 100644 --- a/www/common/translations/messages.it.json +++ b/www/common/translations/messages.it.json @@ -879,7 +879,7 @@ "team_inviteButton": "Invita membri", "owner_request": "{0} propone tu sia proprietario/a di {1}", "team_cat_general": "Informazioni", - "properties_passwordWarning": "La password è stata modificata con successo ma non è stato possibile aggiornare il tuo CryptDrive con i nuovi dati. Potrebbe essere necessario rimuovere la vecchia versione del documento manualmente. Premi OK per ricaricare e aggiornare i tuoi diritti d'accesso.", + "properties_passwordWarning": "La password è stata modificata con successo ma non è stato possibile aggiornare il tuo CryptDrive con i nuovi dati. Potrebbe essere necessario rimuovere la vecchia versione del documento manualmente.
Premi OK per ricaricare e aggiornare i tuoi diritti d'accesso.", "share_embedCategory": "Incorpora", "chrome68": "Sembra tu stia usando il browser Chrome o Chromium versione 68. Questa versione contiene un errore che fa sì che la pagina diventi completamente bianca dopo alcuni secondi o che la pagina non risponda ai clic. Per risolvere il problema puoi passare ad un'altra scheda e poi tornare a questa, oppure puoi provare a scorrere la pagina. Questo problema sarà risolto nella prossima versione del tuo browser.", "crowdfunding_popup_text": "

Abbiamo bisogno del tuo aiuto!

Per garantire lo sviluppo attivo di CryptPad, valuta di sostenere il progetto tramite la nostra pagina Open Collective, dove potrai vedere il nostro Cronoprogramma e gli obiettivi di finanziamento.", From 069452751c13eccdfbd7eea6d95f62ce4732dc45 Mon Sep 17 00:00:00 2001 From: David Benque Date: Thu, 23 May 2024 09:34:17 +0100 Subject: [PATCH 13/23] Update changelog --- CHANGELOG.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bf5d7b6b..11d6e2045 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,48 @@ SPDX-FileCopyrightText: 2023 XWiki CryptPad Team and cont SPDX-License-Identifier: AGPL-3.0-or-later --> +# 2024.3.1 + +## Goals +This minor release introduces a workaround to recover corrupted OnlyOffice documents alongside other fixes, with some improvements. + +## Fixes +- Workarounds for missing OnlyOffice methods: [#1492](https://github.com/cryptpad/cryptpad/pull/1492) +- Fix HTTP server issue with NodeJs >= v20.13.0: [4483b84](https://github.com/cryptpad/cryptpad/commit/4483b848ff2ba23176cb05dacf073f3e0581ba7b) +- Fix merge issues with `package.json`: [7f45d59](https://github.com/cryptpad/cryptpad/commit/7f45d598cbf230002863bbd84004c38252b97031) +- Fix Docker ports: [#1485](https://github.com/cryptpad/cryptpad/pull/1485) +- Change _inactive_ to _archived_ in `config.example.js` file: [#1474](https://github.com/cryptpad/cryptpad/pull/1474) + +## Improvements +- New translations from our Weblate contributors: [#1491](https://github.com/cryptpad/cryptpad/pull/1491) + - Polish + - French + - Bulgarian + - Hungarian + - Basque +- Optimize default Nginx example config: [#1486](https://github.com/cryptpad/cryptpad/pull/1486) +- Add `.mjs` support in HTTPd example config: [#1471](https://github.com/cryptpad/cryptpad/pull/1471) + +## Upgrade notes +If you are upgrading from a version older than `2024.3.0` please read the upgrade notes of all versions between yours and `2024.3.1` to avoid configuration issues. + +To upgrade: + +1. Stop your server +2. Get the latest code with git + +```bash +git fetch origin --tags +git checkout 2024.3.1 +npm ci +npm run install:components +./install-onlyoffice.sh +``` + +3. Restart your server +4. Review your instance's checkup page to ensure that you are passing all tests + + # 2024.3.0 ## Goals From 75dcfd9db2c14fc44543592544ff944ef4056782 Mon Sep 17 00:00:00 2001 From: Fabrice Mouhartem Date: Thu, 23 May 2024 11:42:17 +0200 Subject: [PATCH 14/23] readme: refresh intro - Related to #1493 --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index e290cbb82..c7ac82aea 100644 --- a/readme.md +++ b/readme.md @@ -6,7 +6,7 @@ SPDX-License-Identifier: AGPL-3.0-or-later # CryptPad -CryptPad is a collaboration suite that is end-to-end-encrypted and open-source. It is built to enable collaboration, synchronizing changes to documents in real time. Because all data is encrypted, the service and its administrators have no way of seeing the content being edited and stored. +CryptPad is a collaboration suite that is end-to-end-encrypted and open-source. It is built to enable collaboration, synchronizing changes to documents in real time. Because all data are encrypted, in the eventuality of a breach, attackers have no way of seeing the stored content. Moreover, if the administators don’t alter the code, they and the service also cannot infer any piece of information about the users' content. ![Drive screenshot](screenshot.png "preview of the CryptDrive") From 50e757797699c831d1a64ce2cf05c114db2b1d0d Mon Sep 17 00:00:00 2001 From: Fabrice Mouhartem Date: Thu, 23 May 2024 11:50:43 +0200 Subject: [PATCH 15/23] readme: update release cycle + link to instances directory - Related to #1493 --- readme.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index c7ac82aea..0b942b191 100644 --- a/readme.md +++ b/readme.md @@ -56,9 +56,10 @@ A correctly configured instance has safeguards to prevent collaborators from doi nasty things like injecting scripts into collaborative documents or uploads. The project is actively maintained and bugs that our safeguards don't catch tend to get fixed quickly. For this reason it is best to only use instances that are running the most recent version, -which is currently on a three-week release cycle. It is difficult for a non-expert to +which is currently on a three-month release cycle. It is difficult for a non-expert to determine whether an instance is otherwise configured correctly, so we are actively -working on allowing administrators to opt in to a public directory of servers that +working on allowing administrators to opt in to a [public directory of +ervers](https://cryptpad.org/instances/) that meet our strict criteria for safety. # Translations From a85abbe0bfbf473a641ab3c4564b9a380a2a4adb Mon Sep 17 00:00:00 2001 From: Fabrice Mouhartem Date: Thu, 23 May 2024 11:57:17 +0200 Subject: [PATCH 16/23] readme: link to best practices blogpost - related to #1493 --- readme.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/readme.md b/readme.md index 0b942b191..abcedf696 100644 --- a/readme.md +++ b/readme.md @@ -62,6 +62,11 @@ working on allowing administrators to opt in to a [public directory of ervers](https://cryptpad.org/instances/) that meet our strict criteria for safety. +For end-users, a [guide](https://blog.cryptpad.org/2024/03/14/Most-Secure-CryptPad-Usage/) +is provided in our blog to help understanding the security of CryptPad. This blog post +also explains and show the best practices when using CryptPad and clarify what end-to-end +encryption entails and not. + # Translations CryptPad can be translated with nothing more than a web browser via our From 841a2d5f72c0249e4111229571383f3ea7158513 Mon Sep 17 00:00:00 2001 From: Fabrice Mouhartem Date: Thu, 23 May 2024 13:10:24 +0200 Subject: [PATCH 17/23] readme: some proofreading - related to #1493 --- readme.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/readme.md b/readme.md index abcedf696..822747b3d 100644 --- a/readme.md +++ b/readme.md @@ -36,7 +36,7 @@ Previously, Docker images were community maintained, had their own repository an CryptPad offers a variety of collaborative tools that encrypt your data in your browser before it is sent to the server and your collaborators. In the event that the server is -compromized the database holds encrypted data that is not of much value to attackers. +compromized, the database holds encrypted data that is not of much value to attackers. The code which performs the encryption is still loaded from the host server like any other web page, so you still need to trust the administrator to keep their server secure @@ -44,13 +44,13 @@ and to send you the right code. An expert can download code from the server and that it isn't doing anything malicious like leaking your encryption keys, which is why this is considered an [active attack]. -The platform is designed to minimize what data is exposed to its operators. User registration -and account access is based on a cryptographic key that is derived from your username -and password so the server never needs to see either and you don't need to worry about -whether they are being stored securely. It is impossible to verify whether a server's -operators are logging your IP or other activity, so if you consider this information -sensitive it is safest to assume it is being recorded and access your preferred instance -via [Tor browser]. +The platform is designed to minimize what data is exposed to its operators. User +registration and account access are based on cryptographic keys that are derived from your +username and password. Hence, the server never needs to see either, and you don't need to +worry about whether they are being stored securely. It is impossible to verify whether a +server's operators are logging your IP or other activity, so if you consider this +information sensitive it is safest to assume it is being recorded and access your +preferred instance via [Tor browser]. A correctly configured instance has safeguards to prevent collaborators from doing some nasty things like injecting scripts into collaborative documents or uploads. The project @@ -62,7 +62,7 @@ working on allowing administrators to opt in to a [public directory of ervers](https://cryptpad.org/instances/) that meet our strict criteria for safety. -For end-users, a [guide](https://blog.cryptpad.org/2024/03/14/Most-Secure-CryptPad-Usage/) +For end users, a [guide](https://blog.cryptpad.org/2024/03/14/Most-Secure-CryptPad-Usage/) is provided in our blog to help understanding the security of CryptPad. This blog post also explains and show the best practices when using CryptPad and clarify what end-to-end encryption entails and not. From 37ea668cf89f9494443a50067cb89dfcb3083694 Mon Sep 17 00:00:00 2001 From: David Benque Date: Thu, 23 May 2024 13:37:05 +0100 Subject: [PATCH 18/23] Edit link to "here" --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 822747b3d..eb626ad39 100644 --- a/readme.md +++ b/readme.md @@ -24,7 +24,7 @@ Configuring CryptPad for production requires a little more work, but the process ## Current version -The most recent version and all past release notes can be found [here](https://github.com/cryptpad/cryptpad/releases/). +The most recent version and all past release notes can be found on the [releases page on GitHub](https://github.com/cryptpad/cryptpad/releases/). ## Setup using Docker From ef24b121c0203340bdd02814301743752d6a0acf Mon Sep 17 00:00:00 2001 From: mathilde-cryptpad <156299270+mathilde-cryptpad@users.noreply.github.com> Date: Thu, 23 May 2024 16:20:30 +0200 Subject: [PATCH 19/23] upgrade the release number on docker-compose.yml --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index b5da86df0..d1b040cba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,7 @@ version: '3.8' services: cryptpad: - image: "cryptpad/cryptpad:version-2024.3.0" + image: "cryptpad/cryptpad:version-2024.3.1" hostname: cryptpad environment: From 1f31751bace43a643bd6a00605c2930d5f8cb72a Mon Sep 17 00:00:00 2001 From: Fabrice Mouhartem Date: Thu, 23 May 2024 17:45:25 +0200 Subject: [PATCH 20/23] readme: typo - Missing letter in `servers` --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index eb626ad39..5707b4d71 100644 --- a/readme.md +++ b/readme.md @@ -59,7 +59,7 @@ For this reason it is best to only use instances that are running the most recen which is currently on a three-month release cycle. It is difficult for a non-expert to determine whether an instance is otherwise configured correctly, so we are actively working on allowing administrators to opt in to a [public directory of -ervers](https://cryptpad.org/instances/) that +servers](https://cryptpad.org/instances/) that meet our strict criteria for safety. For end users, a [guide](https://blog.cryptpad.org/2024/03/14/Most-Secure-CryptPad-Usage/) From bcaccab0296922febfd97754febfa38c4ee3626a Mon Sep 17 00:00:00 2001 From: nisbet-hubbard <87453615+nisbet-hubbard@users.noreply.github.com> Date: Sat, 25 May 2024 11:09:10 +0800 Subject: [PATCH 21/23] add a location block dedicated to the websocket to improve performances --- docs/example.httpd.conf | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/example.httpd.conf b/docs/example.httpd.conf index 67127424c..d22648181 100644 --- a/docs/example.httpd.conf +++ b/docs/example.httpd.conf @@ -33,8 +33,14 @@ SSLStaplingCache "shmcb:logs/ssl_stapling(32768)" nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 Protocols h2 http/1.1 - LimitRequestBody 157286400 AddType application/javascript mjs - ProxyPass / http://localhost:3000/ upgrade=websocket - ProxyPassReverse / http://localhost:3000/ + + LimitRequestBody 157286400 + ProxyPass http://localhost:3000/ upgrade=websocket + ProxyPassReverse http://localhost:3000/ + + + ProxyPassMatch http://localhost:3003/ upgrade=websocket + ProxyPassReverse http://localhost:3003/ + From 7dbec1bd25b46e514ba82adad209961627410025 Mon Sep 17 00:00:00 2001 From: Wolfgang Ginolas Date: Wed, 29 May 2024 08:28:31 +0200 Subject: [PATCH 22/23] Add the latest version to GitHubs issue template --- .github/ISSUE_TEMPLATE/bug_resolution.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_resolution.yml b/.github/ISSUE_TEMPLATE/bug_resolution.yml index 9016f70eb..02e34b47e 100644 --- a/.github/ISSUE_TEMPLATE/bug_resolution.yml +++ b/.github/ISSUE_TEMPLATE/bug_resolution.yml @@ -89,6 +89,7 @@ body: label: Version description: What version of CryptPad are you running? options: + - 2024.3.1 - 2024.3.0 - 5.7.0 - 5.6.0 From fd774282c9f1e9fdf39b3391605a74b9fc53085f Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 11 Jun 2024 18:14:45 +0200 Subject: [PATCH 23/23] Add aggregated stats for instances that opted-in --- lib/api.js | 61 ++++++++++++++++++++- lib/commands/admin-rpc.js | 31 +++++++++-- lib/commands/quota.js | 110 ++++++++++++++++++++++++++------------ lib/stats.js | 1 + www/admin/inner.js | 6 ++- 5 files changed, 169 insertions(+), 40 deletions(-) diff --git a/lib/api.js b/lib/api.js index 220e954d8..91ae1598b 100644 --- a/lib/api.js +++ b/lib/api.js @@ -61,7 +61,7 @@ nThen(function (w) { }; // spawn ws server and attach netflux event handlers - NetfluxSrv.create(new WebSocketServer({ server: Env.httpServer})) + let Server = NetfluxSrv.create(new WebSocketServer({ server: Env.httpServer})) .on('channelClose', historyKeeper.channelClose) .on('channelMessage', historyKeeper.channelMessage) .on('channelOpen', historyKeeper.channelOpen) @@ -90,6 +90,65 @@ nThen(function (w) { }); }) .register(historyKeeper.id, historyKeeper.directMessage); + // Store max active WS during the last day (reset when sending ping if enabled) + setInterval(() => { + try { + // Concurrent usage data + let oldWs = Env.maxConcurrentWs || 0; + let oldUniqueWs = Env.maxConcurrentUniqueWs || 0; + let oldChans = Env.maxActiveChannels || 0; + let oldUsers = Env.maxConcurrentRegUsers || 0; + let stats = Server.getSessionStats(); + let chans = Server.getActiveChannelCount(); + let reg = 0; + let regKeys = []; + Object.keys(Env.netfluxUsers).forEach(id => { + let keys = Env.netfluxUsers[id]; + let key = Object.keys(keys || {})[0]; + if (!key) { return; } + if (regKeys.includes(key)) { return; } + reg++; + regKeys.push(key); + }); + Env.maxConcurrentWs = Math.max(oldWs, stats.total); + Env.maxConcurrentUniqueWs = Math.max(oldUniqueWs, stats.unique); + Env.maxConcurrentRegUsers = Math.max(oldUsers, reg); + Env.maxActiveChannels = Math.max(oldChans, chans); + } catch (e) {} + }, 10000); + // Clean up active registered users and channels (possible memory leak) + setInterval(() => { + try { + let users = Env.netfluxUsers || {}; + let online = Server.getOnlineUsers() || []; + let removed = 0; + Object.keys(users).forEach(id => { + if (!online.includes(id)) { + delete users[id]; + removed++; + } + }); + if (removed) { + Env.Log.info("CLEANED_ACTIVE_USERS_MAP", {removed}); + } + } catch (e) {} + try { + let HK = require('./hk-utils'); + let chans = Env.channel_cache || {}; + let active = Server.getActiveChannels() || []; + let removed = 0; + Object.keys(chans).forEach(id => { + if (!active.includes(id)) { + HK.dropChannel(Env, id); + removed++; + } + }); + if (removed) { + Env.Log.info("CLEANED_ACTIVE_CHANNELS_MAP", {removed}); + } + } catch (e) {} + }, 30000); + }); }); diff --git a/lib/commands/admin-rpc.js b/lib/commands/admin-rpc.js index 954c1c4c1..6661bd25b 100644 --- a/lib/commands/admin-rpc.js +++ b/lib/commands/admin-rpc.js @@ -102,11 +102,13 @@ var shutdown = function (Env, Server, cb) { // and allow system functionality to restart the server }; -var getRegisteredUsers = function (Env, Server, cb) { +var getRegisteredUsers = Admin.getRegisteredUsers = function (Env, Server, cb) { Env.batchRegisteredUsers('', cb, function (done) { var dir = Env.paths.pin; - var folders; + var dirB = Env.paths.block; + var folders, foldersB; var users = 0; + var blocks = 0; nThen(function (waitFor) { Fs.readdir(dir, waitFor(function (err, list) { if (err) { @@ -115,16 +117,39 @@ var getRegisteredUsers = function (Env, Server, cb) { } folders = list; })); + Fs.readdir(dirB, waitFor(function (err, list) { + if (err) { + waitFor.abort(); + return void done(err); + } + foldersB = list; + })); }).nThen(function (waitFor) { folders.forEach(function (f) { var dir = Env.paths.pin + '/' + f; Fs.readdir(dir, waitFor(function (err, list) { if (err) { return; } + // Don't count placeholders + list = list.filter(name => { + return !/\.placeholder$/.test(name); + }); users += list.length; })); }); + }).nThen(function (waitFor) { + foldersB.forEach(function (f) { + var dir = Env.paths.block + '/' + f; + Fs.readdir(dir, waitFor(function (err, list) { + if (err) { return; } + // Don't count placeholders + list = list.filter(name => { + return !/\.placeholder$/.test(name); + }); + blocks += list.length; + })); + }); }).nThen(function () { - done(void 0, users); + done(void 0, {users, blocks}); }); }); }; diff --git a/lib/commands/quota.js b/lib/commands/quota.js index 7a92dbda9..e53779b5d 100644 --- a/lib/commands/quota.js +++ b/lib/commands/quota.js @@ -11,6 +11,8 @@ const Https = require("https"); const Http = require("http"); const Util = require("../common-util"); const Stats = require("../stats"); +const Admin = require("./admin-rpc.js"); +const nThen = require('nthen'); var validLimitFields = ['limit', 'plan', 'note', 'users', 'origin']; @@ -112,45 +114,85 @@ var queryAccountServer = function (Env, cb) { var done = Util.once(Util.mkAsync(cb)); var rawBody = Stats.instanceData(Env); - Env.Log.info("SERVER_TELEMETRY", rawBody); - var body = JSON.stringify(rawBody); - var options = { - host: 'accounts.cryptpad.fr', - path: '/api/getauthorized', - method: 'POST', - headers: { - "Content-Type": "application/json", - "Content-Length": Buffer.byteLength(body) - } + let send = () => { + Env.Log.info("SERVER_TELEMETRY", rawBody); + var body = JSON.stringify(rawBody); + + var options = { + host: 'accounts.cryptpad.fr', + path: '/api/getauthorized', + method: 'POST', + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.byteLength(body) + } + }; + + var req = Https.request(options, function (response) { + if (!('' + response.statusCode).match(/^2\d\d$/)) { + return void cb('SERVER ERROR ' + response.statusCode); + } + var str = ''; + + response.on('data', function (chunk) { + str += chunk; + }); + + response.on('end', function () { + try { + var json = JSON.parse(str); + checkUpdateAvailability(Env, json); + done(void 0, json); + } catch (e) { + done(e); + } + }); + }); + + req.on('error', function () { + done(); + }); + + req.end(body); }; - var req = Https.request(options, function (response) { - if (!('' + response.statusCode).match(/^2\d\d$/)) { - return void cb('SERVER ERROR ' + response.statusCode); - } - var str = ''; - - response.on('data', function (chunk) { - str += chunk; - }); - - response.on('end', function () { - try { - var json = JSON.parse(str); - checkUpdateAvailability(Env, json); - done(void 0, json); - } catch (e) { - done(e); + if (Env.provideAggregateStatistics) { + let stats = {}; + nThen(waitFor => { + Admin.getRegisteredUsers(Env, null, waitFor((err, data) => { + if (err) { return; } + stats.registered = data.blocks; + if (Env.lastPingRegisteredUsers) { + stats.usersDiff = stats.registered - Env.lastPingRegisteredUsers; + } + Env.lastPingRegisteredUsers = stats.registered; + let teams = (data.users - data.blocks); + if (teams > 0) { stats.teams = teams; } + })); + }).nThen(() => { + if (Env.maxConcurrentWs) { + stats.maxConcurrentWs = Env.maxConcurrentWs; + Env.maxConcurrentWs = 0; } + if (Env.maxConcurrentUniqueWs) { + stats.maxConcurrentUniqueIPs = Env.maxConcurrentUniqueWs; + Env.maxConcurrentUniqueWs = 0; + } + if (Env.maxConcurrentRegUsers) { + stats.maxConcurrentRegUsers = Env.maxConcurrentRegUsers; + Env.maxConcurrentRegUsers = 0; + } + if (Env.maxActiveChannels) { + stats.maxConcurrentChannels = Env.maxActiveChannels; + Env.maxActiveChannels = 0; + } + rawBody.statistics = stats; + send(); }); - }); - - req.on('error', function () { - done(); - }); - - req.end(body); + return; + } + send(); }; Quota.shouldContactServer = function (Env) { return !(Env.blockDailyCheck === true || diff --git a/lib/stats.js b/lib/stats.js index d67a2ee71..d8d1d00ba 100644 --- a/lib/stats.js +++ b/lib/stats.js @@ -81,6 +81,7 @@ Stats.instanceData = function (Env) { if (Env.provideAggregateStatistics) { // check how many instances provide stats before we put more work into it data.providesAggregateStatistics = true; + data.statistics = {}; // Filled in lib/commands/quota.js because of async calls } return data; diff --git a/www/admin/inner.js b/www/admin/inner.js index cd1360d9c..bb930e247 100644 --- a/www/admin/inner.js +++ b/www/admin/inner.js @@ -2647,9 +2647,11 @@ define([ var onRefresh = function () { sFrameChan.query('Q_ADMIN_RPC', { cmd: 'REGISTERED_USERS', - }, function (e, data) { + }, function (e, arr) { pre.innerText = ''; - pre.append(String(data)); + let data = arr[0]; + pre.append(String(data.blocks)); + pre.append(' (old value including teams: ' + String(data.users) + ')'); // XXX }); }; onRefresh();