diff --git a/CHANGELOG.md b/CHANGELOG.md
index 03beab596..81918d5dd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,15 @@
+# 4.2.1
+
+This minor release addresses a few bugs discovered after deploying 4.2.0:
+
+* The 4.2.0 release included major improvements to the sheet application. This introduced breaking changes to the "lock" system in the application. Existing spreadsheets (before 4.2.0) that were closed by a user without "unlocking" all cells first became impossible to open after the 4.2.0 changes. This has been fixed.
+* Team owners can now properly upload a team avatar.
+* We've improved the file upload script to better recognize markdown files.
+* We've fixed a few issues resulting in an error screen:
+ * New users were unable to create a drive without registering first.
+ * Snapshots in the sheet application couldn't be loaded.
+ * Loading an existing drive as an unregistered user could fail.
+
# 4.2.0 (C)
## Goals
diff --git a/customize.dist/pages.js b/customize.dist/pages.js
index 708041915..3ea9606d6 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 = "v4.2.0";
+ Pages.versionString = "v4.2.1";
// used for the about menu
Pages.imprintLink = AppConfig.imprint ? footLink(imprintUrl, 'imprint') : undefined;
diff --git a/lib/hk-util.js b/lib/hk-util.js
index b66e7e0b9..8780addcd 100644
--- a/lib/hk-util.js
+++ b/lib/hk-util.js
@@ -893,6 +893,7 @@ HK.onChannelMessage = function (Env, Server, channel, msgStruct, cb) {
// more straightforward and reliable.
if (Array.isArray(id) && id[2] && id[2] === channel.lastSavedCp) {
// Reject duplicate checkpoints
+ // XXX not an error? the checkpoint is already here so we can assume it's stored
return void cb('DUPLICATE');
}
}
diff --git a/www/common/outer/async-store.js b/www/common/outer/async-store.js
index bc857be7f..d4cfb6f4f 100644
--- a/www/common/outer/async-store.js
+++ b/www/common/outer/async-store.js
@@ -2636,7 +2636,7 @@ define([
loadUniversal(Messenger, 'messenger', waitFor);
store.messenger = store.modules['messenger'];
loadUniversal(Profile, 'profile', waitFor);
- store.modules['team'].onReady(waitFor);
+ if (store.modules['team']) { store.modules['team'].onReady(waitFor); }
loadUniversal(History, 'history', waitFor);
}).nThen(function () {
var requestLogin = function () {
diff --git a/www/common/outer/team.js b/www/common/outer/team.js
index f959ee11b..31785e26b 100644
--- a/www/common/outer/team.js
+++ b/www/common/outer/team.js
@@ -1046,6 +1046,7 @@ define([
if (!team) { return void cb ({error: 'ENOENT'}); }
if (team.offline) { return void cb({error: 'OFFLINE'}); }
if (!team.roster) { return void cb({error: 'NO_ROSTER'}); }
+ if (data.metadata) { delete data.metadata.offline; }
team.roster.metadata(data.metadata, function (err) {
if (err) { return void cb({error: err}); }
var localTeam = ctx.store.proxy.teams[teamId];
diff --git a/www/common/sframe-common-outer.js b/www/common/sframe-common-outer.js
index 39a53d9c5..d511d32df 100644
--- a/www/common/sframe-common-outer.js
+++ b/www/common/sframe-common-outer.js
@@ -1741,7 +1741,7 @@ define([
var cpNfCfg = {
sframeChan: sframeChan,
channel: secret.channel,
- versionHash: parsed.hashData && parsed.hashData.versionHash,
+ versionHash: cfg.type !== 'oo' && parsed.hashData && parsed.hashData.versionHash,
padRpc: Cryptpad.padRpc,
validateKey: secret.keys.validateKey || undefined,
isNewHash: isNewHash,
diff --git a/www/common/translations/messages.fr.json b/www/common/translations/messages.fr.json
index 1d244ca74..3def9c46e 100644
--- a/www/common/translations/messages.fr.json
+++ b/www/common/translations/messages.fr.json
@@ -493,7 +493,7 @@
"mdToolbar_check": "Liste de tâches",
"mdToolbar_code": "Code",
"home_host": "Ceci est une instance communautaire et indépendante de CryptPad.",
- "main_catch_phrase": "Outils collaboratifs,
chiffrés et open source",
+ "main_catch_phrase": "Outils collaboratifs
chiffrés de bout en bout et open source",
"footer_aboutUs": "À propos",
"about": "À propos",
"privacy": "Charte de confidentialité",
diff --git a/www/common/translations/messages.json b/www/common/translations/messages.json
index 876dc26a6..fd4a746d0 100644
--- a/www/common/translations/messages.json
+++ b/www/common/translations/messages.json
@@ -508,7 +508,7 @@
"mdToolbar_code": "Code",
"mdToolbar_toc": "Table of Contents",
"home_host": "This is an independent community instance of CryptPad.",
- "main_catch_phrase": "Collaboration suite,
encrypted and open-source",
+ "main_catch_phrase": "Collaboration suite
end-to-end encrypted and open-source",
"footer_aboutUs": "About us",
"about": "About",
"privacy": "Privacy Policy",