Shift to M_RESOURCE_LIMIT_EXCEEDED errors

With support for admin_contact and limit_type fields

For https://github.com/vector-im/riot-web/issues/7091
pull/21833/head
David Baker 2018-08-15 17:03:54 +01:00
parent 4c69c8d0f1
commit 9bde468e30
6 changed files with 111 additions and 31 deletions

View File

@ -434,17 +434,21 @@ const LoggedInView = React.createClass({
}
const mauLimitEvent = this.state.serverNoticeEvents.find((e) => {
return e && e.getType() === 'm.server_notice.usage_limit_reached' &&
e.getContent().limit_type &&
e.getContent().limit_type === 'monthly_active_user'
return e && e.getType() === 'm.server_notice.usage_limit_reached';
});
let topBar;
const isGuest = this.props.matrixClient.isGuest();
if (this.state.syncErrorData && this.state.syncErrorData.error.errcode === 'M_MAU_LIMIT_EXCEEDED') {
topBar = <ServerLimitBar kind='hard' />;
if (this.state.syncErrorData && this.state.syncErrorData.error.errcode === 'M_RESOURCE_LIMIT_EXCEEDED') {
topBar = <ServerLimitBar kind='hard'
adminContact={this.state.syncErrorData.error.data.admin_contact}
limitType={this.state.syncErrorData.error.data.limit_type}
/>;
} else if (mauLimitEvent) {
topBar = <ServerLimitBar kind='soft' adminContact={mauLimitEvent.getContent().admin_contact} />;
topBar = <ServerLimitBar kind='soft'
adminContact={mauLimitEvent.getContent().admin_contact}
limitType={mauLimitEvent.getContent().limit_type}
/>;
} else if (this.props.showCookieBar &&
this.props.config.piwik
) {

View File

@ -293,11 +293,11 @@ module.exports = React.createClass({
// It also trumps the "some not sent" msg since you can't resend without
// a connection!
// There's one situation in which we don't show this 'no connection' bar, and that's
// if it's a monthly-active-user limit error: those are shown in the top bar.
// if it's a resource limit exceeded error: those are shown in the top bar.
const errorIsMauError = Boolean(
this.state.syncStateData &&
this.state.syncStateData.error &&
this.state.syncStateData.error.errcode === 'M_MAU_LIMIT_EXCEEDED'
this.state.syncStateData.error.errcode === 'M_RESOURCE_LIMIT_EXCEEDED'
);
return this.state.syncState === "ERROR" && !errorIsMauError;
},
@ -327,11 +327,18 @@ module.exports = React.createClass({
} else {
let consentError = null;
let mauError = null;
const translateMauError = sub => {
if (mauError.data.admin_contact) {
return <a href={mauError.data.admin_contact} target="_blank" rel="noopener">{sub}</a>;
} else {
return sub;
}
};
for (const m of unsentMessages) {
if (m.error && m.error.errcode === 'M_CONSENT_NOT_GIVEN') {
consentError = m.error;
break;
} else if (m.error && m.error.errcode === 'M_MAU_LIMIT_EXCEEDED') {
} else if (m.error && m.error.errcode === 'M_RESOURCE_LIMIT_EXCEEDED') {
mauError = m.error;
break;
}
@ -348,8 +355,18 @@ module.exports = React.createClass({
</a>,
},
);
} else if (mauError && mauError.data.limit_type === 'monthly_active_user') {
title = _t(
"Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. " +
"Please <a>contact your service administrator</a> to continue using the service.",
{}, { 'a' : translateMauError },
);
} else if (mauError) {
title = _t("Your message wasnt sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.");
title = _t(
"Your message wasn't sent because this homeserver has exceeded a resource limit. " +
"Please <a>contact your service administrator</a> to continue using the service.",
{}, { 'a' : translateMauError },
);
} else if (
unsentMessages.length === 1 &&
unsentMessages[0].error &&

View File

@ -121,12 +121,24 @@ module.exports = React.createClass({
const usingEmail = username.indexOf("@") > 0;
if (error.httpStatus === 400 && usingEmail) {
errorText = _t('This Home Server does not support login using email address.');
} else if (error.errcode == 'M_MAU_LIMIT_EXCEEDED') {
} else if (error.errcode == 'M_RESOURCE_LIMIT_EXCEEDED') {
errorText = (
<div>
<div>{ _t('This homeserver has hit its Monthly Active User limit') }</div>
<div>{error.data.error ? error.data.error : _t("This server has exceeded its available resources")}</div>
<div className="mx_Login_smallError">
{ _t('Please contact your service administrator to continue using this service.') }
{_t(
"Please <a>contact your service administrator</a> to continue using this service.",
{},
{
a: (sub) => {
if (error.data.admin_contact) {
return <a rel="noopener" target="_blank" href={error.data.admin_contact}>{sub}</a>;
} else {
return sub;
}
},
},
)}
</div>
</div>
);

View File

@ -164,10 +164,22 @@ module.exports = React.createClass({
if (!success) {
let msg = response.message || response.toString();
// can we give a better error message?
if (response.errcode == 'M_MAU_LIMIT_EXCEEDED') {
if (response.errcode == 'M_RESOURCE_LIMIT_EXCEEDED') {
msg = <div>
<p>{_t("This homeserver has hit its Monthly Active User limit")}</p>
<p>{_t("Please contact your service administrator to continue using this service.")}</p>
<p>{response.data.error ? response.data.error : _t("This server has exceeded its available resources")}</p>
<p>{_t(
"Please <a>contact your service administrator</a> to continue using this service.",
{},
{
a: (sub) => {
if (response.data.admin_contact) {
return <a rel="noopener" target="_blank" href={response.data.admin_contact}>{sub}</a>;
} else {
return sub;
}
},
},
)}</p>
</div>;
} else if (response.required_stages && response.required_stages.indexOf('m.login.msisdn') > -1) {
let msisdnAvailable = false;

View File

@ -23,7 +23,9 @@ export default React.createClass({
propTypes: {
// 'hard' if the logged in user has been locked out, 'soft' if they haven't
kind: PropTypes.string,
adminContent: PropTypes.string,
adminContact: PropTypes.string,
// The type of limit that has been hit.
limitType: PropTypes.string.isRequired,
},
getDefaultProps: function() {
@ -36,42 +38,60 @@ export default React.createClass({
const toolbarClasses = {
'mx_MatrixToolbar': true,
};
let content;
const translateLink = (sub) => {
if (this.props.adminContent) {
return <a href={this.props.adminContent}>{sub}</a>;
if (this.props.adminContact) {
return <a rel="noopener" target="_blank" href={this.props.adminContact}>{sub}</a>;
} else {
return sub;
}
};
let adminContact;
let limitError;
if (this.props.kind === 'hard') {
toolbarClasses['mx_MatrixToolbar_error'] = true;
content = _t(
"This homeserver has hit its Monthly Active User limit. " +
adminContact = _t(
"Please <a>contact your service administrator</a> to continue using the service.",
{},
{
'a': translateLink,
},
);
if (this.props.limitType === 'monthly_active_user') {
limitError = _t("This homeserver has hit its Monthly Active User limit.");
} else {
limitError = _t("This homeserver has exceeded one of its resource limits.");
}
} else {
toolbarClasses['mx_MatrixToolbar_info'] = true;
content = _t(
"This homeserver has hit its Monthly Active User " +
"limit so some users will not be able to log in. " +
adminContact = _t(
"Please <a>contact your service administrator</a> to get this limit increased.",
{},
{
'a': translateLink,
},
);
if (this.props.limitType === 'monthly_active_user') {
limitError = _t(
"This homeserver has hit its Monthly Active User limit so " +
"<b>some users will not be able to log in</b>.", {},
{'b': sub => <b>{sub}</b>},
);
} else {
limitError = _t(
"This homeserver has exceeded one of its resource limits so " +
"<b>some users will not be able to log in</b>.", {},
{'b': sub => <b>{sub}</b>},
);
}
}
return (
<div className={classNames(toolbarClasses)}>
<div className="mx_MatrixToolbar_content">
{ content }
{limitError}
{' '}
{adminContact}
</div>
</div>
);

View File

@ -543,6 +543,10 @@
"Internal room ID: ": "Internal room ID: ",
"Room version number: ": "Room version number: ",
"Add a topic": "Add a topic",
"There is a known vulnerability affecting this room.": "There is a known vulnerability affecting this room.",
"This room version is vulnerable to malicious modification of room state.": "This room version is vulnerable to malicious modification of room state.",
"Click here to upgrade to the latest room version and ensure room integrity is protected.": "Click here to upgrade to the latest room version and ensure room integrity is protected.",
"Only room administrators will see this warning": "Only room administrators will see this warning",
"Search…": "Search…",
"This Room": "This Room",
"All Rooms": "All Rooms",
@ -679,8 +683,12 @@
"A new version of Riot is available.": "A new version of Riot is available.",
"To return to your account in future you need to <u>set a password</u>": "To return to your account in future you need to <u>set a password</u>",
"Set Password": "Set Password",
"This homeserver has hit its Monthly Active User limit. Please <a>contact your service administrator</a> to continue using the service.": "This homeserver has hit its Monthly Active User limit. Please <a>contact your service administrator</a> to continue using the service.",
"This homeserver has hit its Monthly Active User limit so some users will not be able to log in. Please <a>contact your service administrator</a> to get this limit increased.": "This homeserver has hit its Monthly Active User limit so some users will not be able to log in. Please <a>contact your service administrator</a> to get this limit increased.",
"Please <a>contact your service administrator</a> to continue using the service.": "Please <a>contact your service administrator</a> to continue using the service.",
"This homeserver has hit its Monthly Active User limit.": "This homeserver has hit its Monthly Active User limit.",
"This homeserver has exceeded one of its resource limits.": "This homeserver has exceeded one of its resource limits.",
"Please <a>contact your service administrator</a> to get this limit increased.": "Please <a>contact your service administrator</a> to get this limit increased.",
"This homeserver has hit its Monthly Active User limit so <b>some users will not be able to log in</b>.": "This homeserver has hit its Monthly Active User limit so <b>some users will not be able to log in</b>.",
"This homeserver has exceeded one of its resource limits so <b>some users will not be able to log in</b>.": "This homeserver has exceeded one of its resource limits so <b>some users will not be able to log in</b>.",
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
"Checking for an update...": "Checking for an update...",
"No update available.": "No update available.",
@ -857,6 +865,12 @@
"Ignore request": "Ignore request",
"Loading device info...": "Loading device info...",
"Encryption key request": "Encryption key request",
"Upgrade Room Version": "Upgrade Room Version",
"Upgrading this room requires closing down the current instance of the room and creating a new room it its place. To give room members the best possible experience, we will:": "Upgrading this room requires closing down the current instance of the room and creating a new room it its place. To give room members the best possible experience, we will:",
"Create a new room with the same name, description and avatar": "Create a new room with the same name, description and avatar",
"Update any local room aliases to point to the new room": "Update any local room aliases to point to the new room",
"Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room",
"Put a link back to the old room at the start of the new room so people can see old messages": "Put a link back to the old room at the start of the new room so people can see old messages",
"Sign out": "Sign out",
"Log out and remove encryption keys?": "Log out and remove encryption keys?",
"Clear Storage and Sign Out": "Clear Storage and Sign Out",
@ -1039,7 +1053,8 @@
"Message not sent due to unknown devices being present": "Message not sent due to unknown devices being present",
"<showDevicesText>Show devices</showDevicesText>, <sendAnywayText>send anyway</sendAnywayText> or <cancelText>cancel</cancelText>.": "<showDevicesText>Show devices</showDevicesText>, <sendAnywayText>send anyway</sendAnywayText> or <cancelText>cancel</cancelText>.",
"You can't send any messages until you review and agree to <consentLink>our terms and conditions</consentLink>.": "You can't send any messages until you review and agree to <consentLink>our terms and conditions</consentLink>.",
"Your message wasnt sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "Your message wasnt sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.",
"Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please <a>contact your service administrator</a> to continue using the service.": "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please <a>contact your service administrator</a> to continue using the service.",
"Your message wasn't sent because this homeserver has exceeded a resource limit. Please <a>contact your service administrator</a> to continue using the service.": "Your message wasn't sent because this homeserver has exceeded a resource limit. Please <a>contact your service administrator</a> to continue using the service.",
"%(count)s of your messages have not been sent.|other": "Some of your messages have not been sent.",
"%(count)s of your messages have not been sent.|one": "Your message was not sent.",
"%(count)s <resendText>Resend all</resendText> or <cancelText>cancel all</cancelText> now. You can also select individual messages to resend or cancel.|other": "<resendText>Resend all</resendText> or <cancelText>cancel all</cancelText> now. You can also select individual messages to resend or cancel.",
@ -1156,8 +1171,8 @@
"Send Reset Email": "Send Reset Email",
"Create an account": "Create an account",
"This Home Server does not support login using email address.": "This Home Server does not support login using email address.",
"This homeserver has hit its Monthly Active User limit": "This homeserver has hit its Monthly Active User limit",
"Please contact your service administrator to continue using this service.": "Please contact your service administrator to continue using this service.",
"This server has exceeded its available resources": "This server has exceeded its available resources",
"Please <a>contact your service administrator</a> to continue using this service.": "Please <a>contact your service administrator</a> to continue using this service.",
"Incorrect username and/or password.": "Incorrect username and/or password.",
"Please note you are logging into the %(hs)s server, not matrix.org.": "Please note you are logging into the %(hs)s server, not matrix.org.",
"Guest access is disabled on this Home Server.": "Guest access is disabled on this Home Server.",