Merge branch 'staging' into c

pull/1/head
yflory 4 years ago
commit 6cbeb9c28f

@ -56,6 +56,10 @@
* refactor /assert/ * refactor /assert/
* introduce /checkup/ page for detecting incorrect instance configuration * introduce /checkup/ page for detecting incorrect instance configuration
* fix tippy popper color * fix tippy popper color
* loss of access to shared folders
* related to access lists and the offline cache
* remove old and unused translations
* fix plaintext colors in file app
# 4.1.0 (B) # 4.1.0 (B)

@ -0,0 +1,57 @@
@import (reference) "../include/colortheme-all.less";
@import (reference) "../include/font.less";
//@import (reference) "../include/forms.less";
@import (reference) "../include/alertify.less";
html, body {
.font_main();
.alertify_main();
height: 100%;
margin: 0px;
padding: 0px;
background-color: @cp_static-bg !important;
color: @cryptpad_text_col;
font-family: "IBM Plex Mono";
.report {
font-size: 30px;
max-width: 50%;
margin: auto;
padding-top: 15px;
}
.success {
border: 1px solid green;
}
.failure {
border: 1px solid red;
}
.error {
border: 1px solid red;
}
.hidden {
display: none;
}
.failures div.error, .summary {
padding: 15px;
}
table {
td {
padding: 5px;
border: 1px solid white;
}
}
.advisory-text {
display: inline-block;
word-break: break-all;
padding: 5px;
//font-size: 16px;
border: 1px solid red;
background-color: @cp_alerts-danger-bg;
color: @cp_alerts-danger-text;
}
}

@ -4,26 +4,6 @@
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<script data-bootload="main.js" data-main="/common/boot.js" src="/bower_components/requirejs/require.js"></script> <script data-bootload="main.js" data-main="/common/boot.js" src="/bower_components/requirejs/require.js"></script>
<style>
.report {
font-size: 40px;
}
.success {
border: 3px solid green;
}
.failure {
border: 3px solid red;
}
.error {
border: 1px solid red;
}
.hidden {
display: none;
}
</style>
</head> </head>
<body> <body>

@ -4,25 +4,74 @@ define([
'/assert/assertions.js', '/assert/assertions.js',
'/common/hyperscript.js', '/common/hyperscript.js',
'/customize/messages.js', '/customize/messages.js',
'/common/sframe-common-outer.js',
'/bower_components/tweetnacl/nacl-fast.min.js', '/bower_components/tweetnacl/nacl-fast.min.js',
'less!/customize/src/less2/pages/page-assert.less', 'less!/customize/src/less2/pages/page-checkup.less',
], function ($, ApiConfig, Assertions, h, Messages) { ], function ($, ApiConfig, Assertions, h, Messages, SFCommonO) {
var assert = Assertions(); var assert = Assertions();
var trimSlashes = function (s) {
if (typeof(s) !== 'string') { return s; }
return s.replace(/\/+$/, '');
};
var _alert = function (content) {
return h('span.advisory-text', content);
};
var trimmedSafe = trimSlashes(ApiConfig.httpSafeOrigin);
var trimmedUnsafe = trimSlashes(ApiConfig.httpUnsafeOrigin);
assert(function (cb) { assert(function (cb) {
var c = ApiConfig; //console.error(trimmedSafe, trimmedUnsafe);
cb(Boolean(c.httpUnsafeOrigin && c.httpSafeOrigin)); cb(Boolean(trimmedSafe && trimmedUnsafe));
}, "Sandbox configuration: ensure that both httpUnsafeOrigin and httpSafeOrigin are defined"); // XXX }, _alert("Sandbox configuration: ensure that both httpUnsafeOrigin and httpSafeOrigin are defined"));
assert(function (cb) { assert(function (cb) {
var c = ApiConfig; return void cb(trimmedSafe !== trimmedUnsafe);
return void cb(c.httpUnsafeOrigin !== c.httpSafeOrigin); }, _alert('Sandbox configuration: httpUnsafeOrigin !== httpSafeOrigin'));
}, 'Sandbox configuration: httpUnsafeOrigin !== httpSafeOrigin'); // XXX
assert(function (cb) { assert(function (cb) {
cb((window.location.origin + '/') === ApiConfig.httpUnsafeOrigin); cb((window.location.origin + '/') === ApiConfig.httpUnsafeOrigin);
}, 'Sandbox configuration: loading via httpUnsafeOrigin'); // XXX }, _alert('Sandbox configuration: loading via httpUnsafeOrigin'));
var checkAvailability = function (url, cb) {
$.ajax({
url: url,
date: {},
complete: function (xhr) {
cb(xhr.status === 200);
},
});
};
assert(function (cb) {
checkAvailability(trimmedUnsafe, cb);
}, _alert("Main domain is not available"));
assert(function (cb) {
console.log(trimmedSafe);
checkAvailability(trimmedSafe, cb);
}, _alert("Sandbox domain is not available")); // XXX Blocked by CSP. try loading it via sframe ?
var row = function (cells) {
return h('tr', cells.map(function (cell) {
return h('td', cell);
}));
};
var failureReport = function (obj) {
return h('div.error', [
h('h5', obj.message),
h('table', [
row(["Failed test number", obj.test + 1]),
row(["Returned value", obj.output]),
]),
]);
};
assert.run(function (state) { assert.run(function (state) {
var errors = state.errors; var errors = state.errors;
@ -31,19 +80,20 @@ define([
Messages.assert_numberOfTestsPassed = "{0} / {1} tests passed."; Messages.assert_numberOfTestsPassed = "{0} / {1} tests passed.";
var statusClass = failed? 'failure': 'success'; var statusClass = failed? 'failure': 'success';
$('body').prepend(h('div.report.' + statusClass, [
Messages._getKey('assert_numberOfTestsPassed', [ var summary = h('div.summary.' + statusClass, [
h('p', Messages._getKey('assert_numberOfTestsPassed', [
state.passed, state.passed,
state.total state.total
]), ])),
h('div.failures', errors.map(function (obj) { h('p', "Details found below"),
return h('p.error', [ ]);
h('p', "Test number: " + obj.test),
h('p', "Error message: " + obj.message), var report = h('div.report', [
h('p', "Returned value: " + obj.output), summary,
h('br'), h('div.failures', errors.map(failureReport)),
]); ]);
})),
])); $('body').prepend(report);
}); });
}); });

@ -67,6 +67,8 @@ define([
modules: {} modules: {}
}; };
Store.onReadyEvt = onReadyEvt;
var getStore = function (teamId) { var getStore = function (teamId) {
if (!teamId) { return store; } if (!teamId) { return store; }
try { try {
@ -2247,6 +2249,7 @@ define([
isNew: isNew, isNew: isNew,
network: store.network || store.networkPromise, network: store.network || store.networkPromise,
store: s, store: s,
Store: Store,
isNewChannel: Store.isNewChannel isNewChannel: Store.isNewChannel
}, id, data, cb); }, id, data, cb);
}; };

@ -164,6 +164,16 @@ define([
readOnly: !Boolean(secondaryKey) readOnly: !Boolean(secondaryKey)
}; };
// If there is an allow list and we're offline, try again when we're synced
var onRejected = function (allowed, _cb) {
var cb = Util.once(Util.mkAsync(_cb));
if (store.offline && config.Store) {
config.Store.onReadyEvt.reg(cb);
return;
}
cb('ERESTRICTED');
};
var owners = data.owners; var owners = data.owners;
var listmapConfig = { var listmapConfig = {
data: {}, data: {},
@ -179,7 +189,8 @@ define([
metadata: { metadata: {
validateKey: secret.keys.validateKey || undefined, validateKey: secret.keys.validateKey || undefined,
owners: owners owners: owners
} },
onRejected: onRejected
}; };
var rt = sf.rt = Listmap.create(listmapConfig); var rt = sf.rt = Listmap.create(listmapConfig);
rt.proxy.on('cacheready', function () { rt.proxy.on('cacheready', function () {
@ -246,8 +257,6 @@ define([
return void cb(); return void cb();
} }
if (info.error === "ERESTRICTED" ) { if (info.error === "ERESTRICTED" ) {
// This shouldn't happen: allow list are disabled for shared folders
// but call "cb" to make sure we won't block the initial "waitFor"
sf.teams.forEach(function (obj) { sf.teams.forEach(function (obj) {
obj.store.manager.restrictedProxy(obj.id, secret.channel); obj.store.manager.restrictedProxy(obj.id, secret.channel);
}); });
@ -326,6 +335,7 @@ define([
network: network, network: network,
store: s, store: s,
updatePassword: true, updatePassword: true,
Store: Store,
isNewChannel: Store.isNewChannel isNewChannel: Store.isNewChannel
}, sfId, sf, waitFor()); }, sfId, sf, waitFor());
if (!s.rpc) { return; } if (!s.rpc) { return; }
@ -356,6 +366,7 @@ define([
SF.load({ SF.load({
network: network, network: network,
store: store, store: store,
Store: Store,
isNewChannel: Store.isNewChannel isNewChannel: Store.isNewChannel
}, id, sf, waitFor(function () { }, id, sf, waitFor(function () {
progress({ progress({

@ -277,7 +277,8 @@ define([
isNew: isNew, isNew: isNew,
network: ctx.store.network || ctx.store.networkPromise, network: ctx.store.network || ctx.store.networkPromise,
store: team, store: team,
isNewChannel: ctx.Store.isNewChannel isNewChannel: ctx.Store.isNewChannel,
Store: ctx.Store
}, id, data, cb); }, id, data, cb);
}; };
var teamData = ctx.store.proxy.teams[team.id]; var teamData = ctx.store.proxy.teams[team.id];

@ -58,8 +58,8 @@
width: 90vw; width: 90vw;
height: 100%; height: 100%;
padding: 2em; padding: 2em;
background-color: @cp_mediatag-text-bg; background-color: @cp_markdown-block-bg;
color: @cp_mediatag-text-fg; color: @cp_markdown-block-fg;
overflow-y: auto; overflow-y: auto;
word-wrap: break-word; word-wrap: break-word;
white-space: pre-wrap; white-space: pre-wrap;

Loading…
Cancel
Save