Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add API for bulk lookup on the Identity Server #1009

Merged
merged 2 commits into from
Aug 7, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions src/base-apis.js
Original file line number Diff line number Diff line change
Expand Up @@ -1889,6 +1889,45 @@ MatrixBaseApis.prototype.lookupThreePid = async function(
}
};

/**
* Looks up the public Matrix ID mappings for multiple 3PIDs.
*
* @param {Array.<Array.<string>>} query Array of arrays containing
* [medium, address]
* @param {string} identityAccessToken The `access_token` field of the Identity
* Server `/account/register` response (see {@link registerWithIdentityServer}).
*
* @return {module:client.Promise} Resolves: Lookup results from IS.
* @return {module:http-api.MatrixError} Rejects: with an error response.
*/
MatrixBaseApis.prototype.bulkLookupThreePids = async function(
query,
identityAccessToken,
) {
const params = {
threepids: query,
};

try {
return await this._http.idServerRequest(
undefined, "POST", "/bulk_lookup", JSON.stringify(params),
httpApi.PREFIX_IDENTITY_V2, identityAccessToken,
);
} 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
// See https://github.com/vector-im/riot-web/issues/10443
logger.warn("IS doesn't support v2, falling back to deprecated v1");
return await this._http.idServerRequest(
undefined, "POST", "/bulk_lookup", JSON.stringify(params),
httpApi.PREFIX_IDENTITY_V1, identityAccessToken,
);
}
throw err;
}
};

/**
* Get account info from the Identity Server. This is useful as a neutral check
* to verify that other APIs are likely to approve access by testing that the
Expand Down
11 changes: 7 additions & 4 deletions src/http-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -396,16 +396,19 @@ module.exports.MatrixHttpApi.prototype = {
withCredentials: false,
json: false,
_matrix_opts: this.opts,
headers: {},
};
if (method == 'GET') {
opts.qs = params;
} else {
} else if (typeof params === "object") {
opts.form = params;
} else if (typeof params === "string") {
// Assume the caller has serialised the body to JSON
opts.body = params;
opts.headers['Content-Type'] = "application/json";
}
if (accessToken) {
opts.headers = {
Authorization: `Bearer ${accessToken}`,
};
opts.headers['Authorization'] = `Bearer ${accessToken}`;
}

const defer = Promise.defer();
Expand Down