From a10ed3198c1cf3970d39d2a2237a019d22edd107 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 8 Dec 2020 11:51:54 +0100 Subject: [PATCH 01/16] Translated using Weblate (German) Currently translated at 100.0% (1398 of 1398 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/de/ --- www/common/translations/messages.de.json | 29 +++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/www/common/translations/messages.de.json b/www/common/translations/messages.de.json index f7e9ce178..105e710ba 100644 --- a/www/common/translations/messages.de.json +++ b/www/common/translations/messages.de.json @@ -40,7 +40,7 @@ "saved": "Gespeichert", "synced": "Alles gespeichert", "deleted": "Gelöscht", - "deletedFromServer": "Pad wurde vom Server gelöscht", + "deletedFromServer": "Dokument zerstört", "mustLogin": "Du musst angemeldet sein, um auf diese Seite zuzugreifen", "disabledApp": "Diese Anwendung wurde deaktiviert. Kontaktiere den Administrator dieses CryptPads, um mehr Informationen zu erhalten.", "realtime_unrecoverableError": "Es ist ein nicht reparierbarer Fehler aufgetreten. Klicke auf OK, um neu zu laden.", @@ -547,7 +547,7 @@ "upload_notEnoughSpace": "Der verfügbare Speicherplatz in deinem CryptDrive reicht leider nicht für diese Datei.", "upload_notEnoughSpaceBrief": "Unzureichender Speicherplatz", "upload_tooLarge": "Diese Datei überschreitet die für deinen Account erlaubte maximale Größe.", - "upload_tooLargeBrief": "Datei zu groß", + "upload_tooLargeBrief": "Datei überschreitet die maximale Größe von {0} MB", "upload_choose": "Eine Datei wählen", "upload_pending": "In der Warteschlange", "upload_cancelled": "Abgebrochen", @@ -1471,5 +1471,28 @@ "error_unhelpfulScriptError": "Skriptfehler: Siehe Konsole im Browser für Details", "documentID": "Kennung des Dokuments", "errorPopupBlocked": "Für die Funktionsweise von CryptPad ist es erforderlich, dass neue Tabs geöffnet werden können. Bitte erlaube Pop-up-Fenster in der Adressleiste deines Browsers. Diese Fenster werden niemals dafür verwendet, dir Werbung anzuzeigen.", - "unableToDisplay": "Das Dokument kann nicht angezeigt werden. Drücke ESC, um die Seite neu zu laden." + "unableToDisplay": "Das Dokument kann nicht angezeigt werden. Drücke ESC, um die Seite neu zu laden. Wenn das Problem weiterhin besteht, kontaktiere bitte den Support.", + "mediatag_notReady": "Bitte schließe den Download ab", + "settings_mediatagSizeTitle": "Limit für automatisches Herunterladen", + "admin_archiveHint": "Ein Dokument unzugänglich machen, ohne es endgültig zu löschen. Es wird in einem Verzeichnis \"archive\" abgelegt und nach einigen Tagen gelöscht (konfigurierbar in der Konfigurationsdatei des Servers).", + "mediatag_loadButton": "Anhang laden", + "settings_mediatagSizeHint": "Maximale Größe in Megabytes (MB) für das automatische Laden von Medienelementen (Bilder, Videos, PDFs), die in Dokumenten eingebettet sind. Größere Elemente können manuell geladen werden. Gib \"-1\" ein, um Medienelemente immer automatisch zu laden.", + "mediatag_saveButton": "Speichern", + "admin_archiveInput2": "Passwort für das Dokument", + "admin_archiveInput": "URL des Dokuments", + "admin_archiveButton": "Archivieren", + "Offline": "Offline", + "download_zip": "ZIP-Datei erstellen...", + "fileTableHeader": "Downloads und Uploads", + "allowNotifications": "Benachrichtigungen erlauben", + "admin_unarchiveHint": "Ein zuvor archiviertes Dokument wiederherstellen", + "pad_mediatagOpen": "Datei öffnen", + "pad_mediatagShare": "Datei teilen", + "download_zip_file": "Datei {0}/{1}", + "archivedFromServer": "Dokument archiviert", + "restoredFromServer": "Dokument wiederhergestellt", + "admin_archiveInval": "Ungültiges Dokument", + "admin_unarchiveButton": "Wiederherstellen", + "admin_unarchiveTitle": "Dokumente wiederherstellen", + "admin_archiveTitle": "Dokumente archivieren" } From 30f59472e1daf540a549365f9ea2b7f03701634b Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 8 Dec 2020 17:16:27 +0100 Subject: [PATCH 02/16] Translated using Weblate (English) Currently translated at 100.0% (1399 of 1399 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ --- www/common/translations/messages.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/common/translations/messages.json b/www/common/translations/messages.json index f5acaa6c8..179c0a296 100644 --- a/www/common/translations/messages.json +++ b/www/common/translations/messages.json @@ -1494,5 +1494,6 @@ "mediatag_notReady": "Please complete the download", "settings_mediatagSizeTitle": "Automatic download limit", "settings_mediatagSizeHint": "Maximum size in megabytes (MB) for automatically loading media elements (images, videos, pdf) embedded into documents. Elements bigger than the specified size can be loaded manually. Use \"-1\" to always load the media elements automatically.", - "mediatag_loadButton": "Load attachment" + "mediatag_loadButton": "Load attachment", + "history_trimPrompt": "This document has accumulated {0} of history that may slow down loading time. Consider deleting the history if it is not needed." } From 1aaefb8f5093e0562d4d56caa42b61cb9026214b Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 8 Dec 2020 17:16:27 +0100 Subject: [PATCH 03/16] Translated using Weblate (French) Currently translated at 100.0% (1399 of 1399 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/fr/ --- www/common/translations/messages.fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/common/translations/messages.fr.json b/www/common/translations/messages.fr.json index 47980ee0d..b1dccaf48 100644 --- a/www/common/translations/messages.fr.json +++ b/www/common/translations/messages.fr.json @@ -1494,5 +1494,6 @@ "admin_archiveButton": "Archiver", "admin_archiveHint": "Rendre un document indisponible sans le supprimer définitivement. Il sera placé dans un répertoire \"archive\" et supprimé après quelques jours (configurable dans le fichier de configuration du serveur).", "admin_archiveTitle": "Archiver les documents", - "mediatag_loadButton": "Charger la pièce jointe" + "mediatag_loadButton": "Charger la pièce jointe", + "history_trimPrompt": "Ce document a accumulé {0} d'historique qui peut ralentir le temps de chargement. Envisagez de supprimer l'historique s'il n'est pas nécessaire." } From 7bc39b39e1a619c4522a958dba2ab24b3470b5b7 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 8 Dec 2020 17:16:27 +0100 Subject: [PATCH 04/16] Translated using Weblate (German) Currently translated at 100.0% (1399 of 1399 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/de/ --- www/common/translations/messages.de.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/common/translations/messages.de.json b/www/common/translations/messages.de.json index 105e710ba..eb2e4abcb 100644 --- a/www/common/translations/messages.de.json +++ b/www/common/translations/messages.de.json @@ -1494,5 +1494,6 @@ "admin_archiveInval": "Ungültiges Dokument", "admin_unarchiveButton": "Wiederherstellen", "admin_unarchiveTitle": "Dokumente wiederherstellen", - "admin_archiveTitle": "Dokumente archivieren" + "admin_archiveTitle": "Dokumente archivieren", + "history_trimPrompt": "Dieses Dokument hat einen Verlauf von {0} angesammelt, was das Laden verlangsamen kann. Ziehe in Betracht, den Verlauf zu löschen, sofern er nicht benötigt wird." } From dad7a16135cae4e304a3e0cad000a2e6c2e5932d Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 11 Dec 2020 16:44:32 +0530 Subject: [PATCH 05/16] add some uncommitted notes as code review --- www/common/common-hash.js | 2 +- www/common/media-tag.js | 2 +- www/common/outer/local-store.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/www/common/common-hash.js b/www/common/common-hash.js index 4f7290b81..c5133fae0 100644 --- a/www/common/common-hash.js +++ b/www/common/common-hash.js @@ -465,7 +465,7 @@ Version 4: Data URL when not a realtime link yet (new pad or "static" app) if (!/^https*:\/\//.test(href)) { // If it doesn't start with http(s), it should be a relative href - if (!/^\//.test(href)) { return ret; } + if (!/^\//.test(href)) { return ret; } // XXX this will allow protocol relative URLs idx = href.indexOf('/#'); ret.type = href.slice(1, idx); if (idx === -1) { return ret; } diff --git a/www/common/media-tag.js b/www/common/media-tag.js index 6755df5a2..02b61cee8 100644 --- a/www/common/media-tag.js +++ b/www/common/media-tag.js @@ -408,7 +408,7 @@ var factory = function () { if (err || !u8) { return void fetch(); } var size = Decrypt.decodePrefix(u8.subarray(0,2)); - console.error(size); + console.error(size); // XXX noise cb(null, u8.subarray(0, size+2)); }); diff --git a/www/common/outer/local-store.js b/www/common/outer/local-store.js index 645493de5..c6d937e94 100644 --- a/www/common/outer/local-store.js +++ b/www/common/outer/local-store.js @@ -123,7 +123,7 @@ define([ cb = cb || function () {}; try { - Cache.clear(cb); + Cache.clear(cb); // XXX might call back twice in extreme circumstances? } catch (e) { console.error(e); cb(); From 860b5a33cb1f7998aa7bcb548147bd6275529ce6 Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 11 Dec 2020 16:57:09 +0530 Subject: [PATCH 06/16] remove hardcoded translation --- www/common/common-ui-elements.js | 1 - 1 file changed, 1 deletion(-) diff --git a/www/common/common-ui-elements.js b/www/common/common-ui-elements.js index bd9cb784a..81b202ee0 100644 --- a/www/common/common-ui-elements.js +++ b/www/common/common-ui-elements.js @@ -2687,7 +2687,6 @@ define([ }; - Messages.history_trimPrompt = "This document's history is very large ({0}) and it may impact the loading time. You can delete the unnecessary history."; UIElements.displayTrimHistoryPrompt = function (common, data) { var mb = Util.bytesToMegabytes(data.size); var text = Messages._getKey('history_trimPrompt', [ From 08606e26a3df92e4c52a80a9de561d18f5b7bfe8 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 11 Dec 2020 12:27:47 +0100 Subject: [PATCH 07/16] Translated using Weblate (English) Currently translated at 100.0% (1400 of 1400 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/en/ --- www/common/translations/messages.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/common/translations/messages.json b/www/common/translations/messages.json index 179c0a296..f07dab3e0 100644 --- a/www/common/translations/messages.json +++ b/www/common/translations/messages.json @@ -1495,5 +1495,6 @@ "settings_mediatagSizeTitle": "Automatic download limit", "settings_mediatagSizeHint": "Maximum size in megabytes (MB) for automatically loading media elements (images, videos, pdf) embedded into documents. Elements bigger than the specified size can be loaded manually. Use \"-1\" to always load the media elements automatically.", "mediatag_loadButton": "Load attachment", - "history_trimPrompt": "This document has accumulated {0} of history that may slow down loading time. Consider deleting the history if it is not needed." + "history_trimPrompt": "This document has accumulated {0} of history that may slow down loading time. Consider deleting the history if it is not needed.", + "contacts_confirmCancel": "Are you sure you want to cancel your contact request with {0}?" } From 18d4d498a7e839a1717cee2947907d30d569b919 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 11 Dec 2020 12:27:48 +0100 Subject: [PATCH 08/16] Translated using Weblate (French) Currently translated at 100.0% (1400 of 1400 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/fr/ --- www/common/translations/messages.fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/common/translations/messages.fr.json b/www/common/translations/messages.fr.json index b1dccaf48..72a3fad90 100644 --- a/www/common/translations/messages.fr.json +++ b/www/common/translations/messages.fr.json @@ -1495,5 +1495,6 @@ "admin_archiveHint": "Rendre un document indisponible sans le supprimer définitivement. Il sera placé dans un répertoire \"archive\" et supprimé après quelques jours (configurable dans le fichier de configuration du serveur).", "admin_archiveTitle": "Archiver les documents", "mediatag_loadButton": "Charger la pièce jointe", - "history_trimPrompt": "Ce document a accumulé {0} d'historique qui peut ralentir le temps de chargement. Envisagez de supprimer l'historique s'il n'est pas nécessaire." + "history_trimPrompt": "Ce document a accumulé {0} d'historique qui peut ralentir le temps de chargement. Envisagez de supprimer l'historique s'il n'est pas nécessaire.", + "contacts_confirmCancel": "Êtes-vous sûr de vouloir annuler votre demande de contact avec {0} ?" } From d0df2f58407edc9365b1ae35275227561383eacb Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 11 Dec 2020 17:03:48 +0530 Subject: [PATCH 09/16] log when archiving content via the admin panel --- lib/commands/admin-rpc.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/commands/admin-rpc.js b/lib/commands/admin-rpc.js index 5c64b6086..8d2f172df 100644 --- a/lib/commands/admin-rpc.js +++ b/lib/commands/admin-rpc.js @@ -160,9 +160,19 @@ var archiveDocument = function (Env, Server, cb, data) { switch (id.length) { case 32: // TODO disconnect users from active sessions - return void Env.msgStore.archiveChannel(id, cb); + return void Env.msgStore.archiveChannel(id, Util.both(cb, function (err) { + Env.Log.info("ARCHIVAL_CHANNEL_BY_ADMIN_RPC", { + channelId: id, + status: err? String(err): "SUCCESS", + }); + })); case 48: - return void Env.blobStore.archive.blob(id, cb); + return void Env.blobStore.archive.blob(id, Util.both(cb, function (err) { + Env.Log.info("ARCHIVAL_BLOB_BY_ADMIN_RPC", { + id: id, + status: err? String(err): "SUCCESS", + }); + })); default: return void cb("INVALID_ID_LENGTH"); } From 4a3ac980f482cd9611fd01cf18d1108414652763 Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 11 Dec 2020 17:04:57 +0530 Subject: [PATCH 10/16] remove unnecessary console.log --- www/common/media-tag.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/www/common/media-tag.js b/www/common/media-tag.js index 02b61cee8..86a5a8659 100644 --- a/www/common/media-tag.js +++ b/www/common/media-tag.js @@ -406,10 +406,7 @@ var factory = function () { getBlobCache(cacheKey, function (err, u8) { if (err || !u8) { return void fetch(); } - var size = Decrypt.decodePrefix(u8.subarray(0,2)); - console.error(size); // XXX noise - cb(null, u8.subarray(0, size+2)); }); }; From b307b989269f7cc7abc119b85ece1312e240baac Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 11 Dec 2020 17:05:43 +0530 Subject: [PATCH 11/16] remove hardcoded translation from /profile/ --- www/profile/inner.js | 1 - 1 file changed, 1 deletion(-) diff --git a/www/profile/inner.js b/www/profile/inner.js index 3917e2b2a..375f9588c 100644 --- a/www/profile/inner.js +++ b/www/profile/inner.js @@ -243,7 +243,6 @@ define([ return; } - Messages.contacts_confirmCancel = "Are you sure you want to cancel your contact request with {0}?"; // XXX var addCancel = function () { var cancelButton = h('button.btn.btn-danger.cp-app-profile-friend-request', [ h('i.fa.fa-user-times'), From e9033d8b0aa2cd151e32584ff2fb82ed64f9448b Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 11 Dec 2020 17:06:37 +0530 Subject: [PATCH 12/16] rule out double-callbacks when clearing cache --- www/common/outer/local-store.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/www/common/outer/local-store.js b/www/common/outer/local-store.js index c6d937e94..95a3bd88b 100644 --- a/www/common/outer/local-store.js +++ b/www/common/outer/local-store.js @@ -4,7 +4,8 @@ define([ '/common/outer/cache-store.js', '/bower_components/localforage/dist/localforage.min.js', '/customize/application_config.js', -], function (Constants, Hash, Cache, localForage, AppConfig) { + '/common/common-util.js', +], function (Constants, Hash, Cache, localForage, AppConfig, Util) { var LocalStore = {}; LocalStore.setThumbnail = function (key, value, cb) { @@ -120,10 +121,10 @@ define([ return void AppConfig.customizeLogout(cb); } - cb = cb || function () {}; + cb = Util.once(cb || function () {}); try { - Cache.clear(cb); // XXX might call back twice in extreme circumstances? + Cache.clear(cb); } catch (e) { console.error(e); cb(); From 255527cc2376ff3e7e5e825ffde30b91e510b1aa Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 11 Dec 2020 17:48:15 +0530 Subject: [PATCH 13/16] reject protocol-relative URLs in 'parsePadURL' --- www/assert/main.js | 12 +++++++++--- www/common/common-hash.js | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/www/assert/main.js b/www/assert/main.js index c29b3bfa3..a467bfc67 100644 --- a/www/assert/main.js +++ b/www/assert/main.js @@ -334,6 +334,12 @@ define([ !secret.hashData.present); }, "test support for ugly tracking query paramaters in url"); + assert(function (cb) { + var url = '//cryptpad.fr/pad/#/2/pad/edit/oRE0oLCtEXusRDyin7GyLGcS/'; + var parsed = Hash.isValidHref(url); + cb(!parsed); + }, "test that protocol relative URLs are rejected"); + assert(function (cb) { var keys = Block.genkeys(Nacl.randomBytes(64)); var hash = Block.getBlockHash(keys); @@ -349,7 +355,7 @@ define([ var v3 = Hash.isValidHref('/pad'); var v4 = Hash.isValidHref('/pad/'); - var res = v1 && v2 && v3 && v4; + var res = Boolean(v1 && v2 && v3 && v4); cb(res); if (!res) { console.log(v1, v2, v3, v4); @@ -361,7 +367,7 @@ define([ var v3 = Hash.isValidHref('/pad#'); // Invalid var v4 = Hash.isValidHref('/pad/#'); - var res = v1 && v2 && v3 && v4; + var res = Boolean(v1 && v2 && v3 && v4); cb(res); if (!res) { console.log(v1, v2, v3, v4); @@ -373,7 +379,7 @@ define([ var v3 = Hash.isValidHref('https://cryptpad.fr/pad/#67b8385b07352be53e40746d2be6ccd7XAYSuJYYqa9NfmInyHci7LNy'); var v4 = Hash.isValidHref('/pad/#/2/pad/edit/HGu0tK2od-2BBnwAz2ZNS-t4/p/embed'); - var res = v1 && v2 && v3 && v4; + var res = Boolean(v1 && v2 && v3 && v4); cb(res); if (!res) { console.log(v1, v2, v3, v4); diff --git a/www/common/common-hash.js b/www/common/common-hash.js index c5133fae0..afdecbf57 100644 --- a/www/common/common-hash.js +++ b/www/common/common-hash.js @@ -465,7 +465,7 @@ Version 4: Data URL when not a realtime link yet (new pad or "static" app) if (!/^https*:\/\//.test(href)) { // If it doesn't start with http(s), it should be a relative href - if (!/^\//.test(href)) { return ret; } // XXX this will allow protocol relative URLs + if (!/^\/($|[^\/])/.test(href)) { return ret; } idx = href.indexOf('/#'); ret.type = href.slice(1, idx); if (idx === -1) { return ret; } From 4c7f7e271e9f112ab83948e440537d1aac3c40fc Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 11 Dec 2020 17:57:42 +0530 Subject: [PATCH 14/16] remove an XXX note, log when restoring docs by admin rpc --- lib/commands/admin-rpc.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/commands/admin-rpc.js b/lib/commands/admin-rpc.js index 8d2f172df..595b4c6dc 100644 --- a/lib/commands/admin-rpc.js +++ b/lib/commands/admin-rpc.js @@ -188,10 +188,21 @@ var restoreArchivedDocument = function (Env, Server, cb, data) { switch (id.length) { case 32: - return void Env.msgStore.restoreArchivedChannel(id, cb); + return void Env.msgStore.restoreArchivedChannel(id, Util.both(cb, function (err) { + Env.Log.info("RESTORATION_CHANNEL_BY_ADMIN_RPC", { + id: id, + status: err? String(err): 'SUCCESS', + }); + })); case 48: - // Env.blobStore.restore.proof(userSafekey, id, cb) // XXX .... - return void Env.blobStore.restore.blob(id, cb); + // FIXME this does not yet restore blob ownership + // Env.blobStore.restore.proof(userSafekey, id, cb) + return void Env.blobStore.restore.blob(id, Util.both(cb, function (err) { + Env.Log.info("RESTORATION_BLOB_BY_ADMIN_RPC", { + id: id, + status: err? String(err): 'SUCCESS', + }); + })); default: return void cb("INVALID_ID_LENGTH"); } From de90949e3e52002bf8f82b5f657f8bbde84f5528 Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 11 Dec 2020 20:12:36 +0530 Subject: [PATCH 15/16] suppress ENOENT on metadata when restoring archived files --- lib/storage/file.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/storage/file.js b/lib/storage/file.js index 4fbb52b52..d890cb0b9 100644 --- a/lib/storage/file.js +++ b/lib/storage/file.js @@ -722,9 +722,9 @@ var unarchiveChannel = function (env, channelName, cb) { // restore the metadata log Fse.move(archiveMetadataPath, metadataPath, w(function (err) { // if there's nothing to move, you're done. - /*if (err && err.code === 'ENOENT') { + if (err && err.code === 'ENOENT') { return CB(); - }*/ // XXX make sure removing this part won't break anything + } // call back with an error if something goes wrong if (err) { w.abort(); From d0ade0d1178490e5083a93b1858113ad2a200609 Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 11 Dec 2020 20:13:02 +0530 Subject: [PATCH 16/16] update version string for 3.25.0 --- customize.dist/pages.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/customize.dist/pages.js b/customize.dist/pages.js index 74c46c4ec..4eef2aa8f 100644 --- a/customize.dist/pages.js +++ b/customize.dist/pages.js @@ -62,7 +62,7 @@ define([ var imprintUrl = AppConfig.imprint && (typeof(AppConfig.imprint) === "boolean" ? '/imprint.html' : AppConfig.imprint); - Pages.versionString = "CryptPad v3.24.0 (YunnanLakeNewt)"; + Pages.versionString = "CryptPad v3.25.0 (ZyzomysPedunculatus)"; // used for the about menu Pages.imprintLink = AppConfig.imprint ? footLink(imprintUrl, 'imprint') : undefined;