1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-26 17:03:12 +03:00

Add IS v2 support to other IS APIs

This adds v2 support with fallback to other IS APIs in the SDK.
This commit is contained in:
J. Ryan Stinnett
2019-07-29 14:55:37 +01:00
parent 91416bdbb2
commit 6f042a2142

View File

@@ -1726,7 +1726,7 @@ MatrixBaseApis.prototype.registerWithIdentityServer = function(hsOpenIdToken) {
/** /**
* Requests an email verification token directly from an Identity Server. * Requests an email verification token directly from an Identity Server.
* *
* Note that the Home Server offers APIs to proxy this API for specific * Note that the Homeserver offers APIs to proxy this API for specific
* situations, allowing for better feedback to the user. * situations, allowing for better feedback to the user.
* *
* @param {string} email The email address to request a token for * @param {string} email The email address to request a token for
@@ -1739,22 +1739,49 @@ MatrixBaseApis.prototype.registerWithIdentityServer = function(hsOpenIdToken) {
* @param {string} nextLink Optional If specified, the client will be redirected * @param {string} nextLink Optional If specified, the client will be redirected
* to this link after validation. * to this link after validation.
* @param {module:client.callback} callback Optional. * @param {module:client.callback} callback Optional.
* @param {string} isAccessToken The `access_token` field of the Identity Server
* `/account/register` response (see {@link registerWithIdentityServer}).
*
* @return {module:client.Promise} Resolves: TODO * @return {module:client.Promise} Resolves: TODO
* @return {module:http-api.MatrixError} Rejects: with an error response. * @return {module:http-api.MatrixError} Rejects: with an error response.
* @throws Error if No ID server is set * @throws Error if no Identity Server is set
*/ */
MatrixBaseApis.prototype.requestEmailToken = function(email, clientSecret, MatrixBaseApis.prototype.requestEmailToken = async function(
sendAttempt, nextLink, callback) { email,
clientSecret,
sendAttempt,
nextLink,
callback,
isAccessToken,
) {
const params = { const params = {
client_secret: clientSecret, client_secret: clientSecret,
email: email, email: email,
send_attempt: sendAttempt, send_attempt: sendAttempt,
next_link: nextLink, next_link: nextLink,
}; };
return this._http.idServerRequest(
callback, "POST", "/validate/email/requestToken", try {
params, httpApi.PREFIX_IDENTITY_V1, const response = await this._http.idServerRequest(
); undefined, "POST", "/validate/email/requestToken",
params, httpApi.PREFIX_IDENTITY_V2, isAccessToken,
);
// TODO: Fold callback into above call once v1 path below is removed
if (callback) callback(null, response);
return response;
} catch (err) {
if (err.cors === "rejected" || err.httpStatus === 404) {
// Fall back to deprecated v1 API for now
// TODO: Remove this path once v2 is only supported version
logger.warn("IS doesn't support v2, falling back to deprecated v1");
return await this._http.idServerRequest(
callback, "POST", "/validate/email/requestToken",
params, httpApi.PREFIX_IDENTITY_V1,
);
}
if (callback) callback(err);
throw err;
}
}; };
/** /**
@@ -1768,22 +1795,43 @@ MatrixBaseApis.prototype.requestEmailToken = function(email, clientSecret,
* @param {string} sid The sid given in the response to requestToken * @param {string} sid The sid given in the response to requestToken
* @param {string} clientSecret A secret binary string generated by the client. * @param {string} clientSecret A secret binary string generated by the client.
* This must be the same value submitted in the requestToken call. * This must be the same value submitted in the requestToken call.
* @param {string} token The token, as enetered by the user. * @param {string} msisdnToken The MSISDN token, as enetered by the user.
* @param {string} isAccessToken The `access_token` field of the Identity Server
* `/account/register` response (see {@link registerWithIdentityServer}).
* *
* @return {module:client.Promise} Resolves: Object, currently with no parameters. * @return {module:client.Promise} Resolves: Object, currently with no parameters.
* @return {module:http-api.MatrixError} Rejects: with an error response. * @return {module:http-api.MatrixError} Rejects: with an error response.
* @throws Error if No ID server is set * @throws Error if No ID server is set
*/ */
MatrixBaseApis.prototype.submitMsisdnToken = function(sid, clientSecret, token) { MatrixBaseApis.prototype.submitMsisdnToken = async function(
sid,
clientSecret,
msisdnToken,
isAccessToken,
) {
const params = { const params = {
sid: sid, sid: sid,
client_secret: clientSecret, client_secret: clientSecret,
token: token, token: msisdnToken,
}; };
return this._http.idServerRequest(
undefined, "POST", "/validate/msisdn/submitToken", try {
params, httpApi.PREFIX_IDENTITY_V1, return await this._http.idServerRequest(
); undefined, "POST", "/validate/msisdn/submitToken",
params, httpApi.PREFIX_IDENTITY_V2, isAccessToken,
);
} catch (err) {
if (err.cors === "rejected" || err.httpStatus === 404) {
// Fall back to deprecated v1 API for now
// TODO: Remove this path once v2 is only supported version
logger.warn("IS doesn't support v2, falling back to deprecated v1");
return await this._http.idServerRequest(
undefined, "POST", "/validate/msisdn/submitToken",
params, httpApi.PREFIX_IDENTITY_V1,
);
}
throw err;
}
}; };
/** /**
@@ -1823,6 +1871,7 @@ MatrixBaseApis.prototype.lookupThreePid = async function(
} catch (err) { } catch (err) {
if (err.cors === "rejected" || err.httpStatus === 404) { if (err.cors === "rejected" || err.httpStatus === 404) {
// Fall back to deprecated v1 API for now // Fall back to deprecated v1 API for now
// TODO: Remove this path once v2 is only supported version
logger.warn("IS doesn't support v2, falling back to deprecated v1"); logger.warn("IS doesn't support v2, falling back to deprecated v1");
return await this._http.idServerRequest( return await this._http.idServerRequest(
callback, "GET", "/lookup", callback, "GET", "/lookup",