Merge pull request #3010 from matrix-org/dbkr/uiauth_send_email
js-sdk interactive auth now sends email token
This commit is contained in:
commit
03d092c574
3 changed files with 20 additions and 37 deletions
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2017 Vector Creations Ltd.
|
Copyright 2017 Vector Creations Ltd.
|
||||||
|
Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -60,7 +61,7 @@ export default React.createClass({
|
||||||
inputs: PropTypes.object,
|
inputs: PropTypes.object,
|
||||||
|
|
||||||
// As js-sdk interactive-auth
|
// As js-sdk interactive-auth
|
||||||
makeRegistrationUrl: PropTypes.func,
|
requestEmailToken: PropTypes.func,
|
||||||
sessionId: PropTypes.string,
|
sessionId: PropTypes.string,
|
||||||
clientSecret: PropTypes.string,
|
clientSecret: PropTypes.string,
|
||||||
emailSid: PropTypes.string,
|
emailSid: PropTypes.string,
|
||||||
|
@ -96,6 +97,7 @@ export default React.createClass({
|
||||||
sessionId: this.props.sessionId,
|
sessionId: this.props.sessionId,
|
||||||
clientSecret: this.props.clientSecret,
|
clientSecret: this.props.clientSecret,
|
||||||
emailSid: this.props.emailSid,
|
emailSid: this.props.emailSid,
|
||||||
|
requestEmailToken: this.props.requestEmailToken,
|
||||||
});
|
});
|
||||||
|
|
||||||
this._authLogic.attemptAuth().then((result) => {
|
this._authLogic.attemptAuth().then((result) => {
|
||||||
|
@ -202,7 +204,6 @@ export default React.createClass({
|
||||||
stageState={this.state.stageState}
|
stageState={this.state.stageState}
|
||||||
fail={this._onAuthStageFailed}
|
fail={this._onAuthStageFailed}
|
||||||
setEmailSid={this._setEmailSid}
|
setEmailSid={this._setEmailSid}
|
||||||
makeRegistrationUrl={this.props.makeRegistrationUrl}
|
|
||||||
showContinue={!this.props.continueIsManaged}
|
showContinue={!this.props.continueIsManaged}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
Copyright 2015, 2016 OpenMarket Ltd
|
Copyright 2015, 2016 OpenMarket Ltd
|
||||||
Copyright 2017 Vector Creations Ltd
|
Copyright 2017 Vector Creations Ltd
|
||||||
Copyright 2018, 2019 New Vector Ltd
|
Copyright 2018, 2019 New Vector Ltd
|
||||||
|
Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -203,6 +204,20 @@ module.exports = React.createClass({
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_requestEmailToken: function(emailAddress, clientSecret, sendAttempt, sessionId) {
|
||||||
|
return this._matrixClient.requestRegisterEmailToken(
|
||||||
|
emailAddress,
|
||||||
|
clientSecret,
|
||||||
|
sendAttempt,
|
||||||
|
this.props.makeRegistrationUrl({
|
||||||
|
client_secret: clientSecret,
|
||||||
|
hs_url: this._matrixClient.getHomeserverUrl(),
|
||||||
|
is_url: this._matrixClient.getIdentityServerUrl(),
|
||||||
|
session_id: sessionId,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
_onUIAuthFinished: async function(success, response, extra) {
|
_onUIAuthFinished: async function(success, response, extra) {
|
||||||
if (!success) {
|
if (!success) {
|
||||||
let msg = response.message || response.toString();
|
let msg = response.message || response.toString();
|
||||||
|
@ -424,7 +439,7 @@ module.exports = React.createClass({
|
||||||
makeRequest={this._makeRegisterRequest}
|
makeRequest={this._makeRegisterRequest}
|
||||||
onAuthFinished={this._onUIAuthFinished}
|
onAuthFinished={this._onUIAuthFinished}
|
||||||
inputs={this._getUIAuthInputs()}
|
inputs={this._getUIAuthInputs()}
|
||||||
makeRegistrationUrl={this.props.makeRegistrationUrl}
|
requestEmailToken={this._requestEmailToken}
|
||||||
sessionId={this.props.sessionId}
|
sessionId={this.props.sessionId}
|
||||||
clientSecret={this.props.clientSecret}
|
clientSecret={this.props.clientSecret}
|
||||||
emailSid={this.props.idSid}
|
emailSid={this.props.idSid}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2016 OpenMarket Ltd
|
Copyright 2016 OpenMarket Ltd
|
||||||
Copyright 2017 Vector Creations Ltd
|
Copyright 2017 Vector Creations Ltd
|
||||||
|
Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -57,7 +58,6 @@ import SettingsStore from "../../../settings/SettingsStore";
|
||||||
* session to be failed and the process to go back to the start.
|
* session to be failed and the process to go back to the start.
|
||||||
* setEmailSid: m.login.email.identity only: a function to be called with the
|
* setEmailSid: m.login.email.identity only: a function to be called with the
|
||||||
* email sid after a token is requested.
|
* email sid after a token is requested.
|
||||||
* makeRegistrationUrl A function that makes a registration URL
|
|
||||||
*
|
*
|
||||||
* Each component may also provide the following functions (beyond the standard React ones):
|
* Each component may also provide the following functions (beyond the standard React ones):
|
||||||
* focus: set the input focus appropriately in the form.
|
* focus: set the input focus appropriately in the form.
|
||||||
|
@ -365,7 +365,6 @@ export const EmailIdentityAuthEntry = React.createClass({
|
||||||
stageState: PropTypes.object.isRequired,
|
stageState: PropTypes.object.isRequired,
|
||||||
fail: PropTypes.func.isRequired,
|
fail: PropTypes.func.isRequired,
|
||||||
setEmailSid: PropTypes.func.isRequired,
|
setEmailSid: PropTypes.func.isRequired,
|
||||||
makeRegistrationUrl: PropTypes.func.isRequired,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
|
@ -374,38 +373,6 @@ export const EmailIdentityAuthEntry = React.createClass({
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
componentWillMount: function() {
|
|
||||||
if (this.props.stageState.emailSid === null) {
|
|
||||||
this.setState({requestingToken: true});
|
|
||||||
this._requestEmailToken().catch((e) => {
|
|
||||||
this.props.fail(e);
|
|
||||||
}).finally(() => {
|
|
||||||
this.setState({requestingToken: false});
|
|
||||||
}).done();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Requests a verification token by email.
|
|
||||||
*/
|
|
||||||
_requestEmailToken: function() {
|
|
||||||
const nextLink = this.props.makeRegistrationUrl({
|
|
||||||
client_secret: this.props.clientSecret,
|
|
||||||
hs_url: this.props.matrixClient.getHomeserverUrl(),
|
|
||||||
is_url: this.props.matrixClient.getIdentityServerUrl(),
|
|
||||||
session_id: this.props.authSessionId,
|
|
||||||
});
|
|
||||||
|
|
||||||
return this.props.matrixClient.requestRegisterEmailToken(
|
|
||||||
this.props.inputs.emailAddress,
|
|
||||||
this.props.clientSecret,
|
|
||||||
1, // TODO: Multiple send attempts?
|
|
||||||
nextLink,
|
|
||||||
).then((result) => {
|
|
||||||
this.props.setEmailSid(result.sid);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
render: function() {
|
render: function() {
|
||||||
if (this.state.requestingToken) {
|
if (this.state.requestingToken) {
|
||||||
const Loader = sdk.getComponent("elements.Spinner");
|
const Loader = sdk.getComponent("elements.Spinner");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue