Strip path component from IM rest url

before passing to js-sdk. We continue to use the full URL for the
calls done by matrix-react-sdk, but the standard terms API called
by the js-sdk lives on the standard _matrix path. This means we
don't support running IMs on a non-root path, but it's the only
realistic way of transitioning to _matrix paths since configs in
the wild contain bits of the API path.

Once we've fully transitioned to _matrix URLs, we can give people
a grace period to update their configs, then use the rest url as
a regular base url.
This commit is contained in:
David Baker 2019-07-22 18:54:04 +01:00
parent 84bb0eb696
commit 7d7878245b

View file

@ -15,6 +15,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
import url from 'url';
import Promise from 'bluebird'; import Promise from 'bluebird';
import SettingsStore from "./settings/SettingsStore"; import SettingsStore from "./settings/SettingsStore";
import { Service, presentTermsForServices, TermsNotSignedError } from './Terms'; import { Service, presentTermsForServices, TermsNotSignedError } from './Terms';
@ -104,9 +105,15 @@ class ScalarAuthClient {
}).catch((e) => { }).catch((e) => {
if (e instanceof TermsNotSignedError) { if (e instanceof TermsNotSignedError) {
console.log("Integrations manager requires new terms to be agreed to"); console.log("Integrations manager requires new terms to be agreed to");
// The terms endpoints are new and so live on standard _matrix prefixes,
// but IM rest urls are currently configured with paths, so remove the
// path from the base URL before passing it to the js-sdk
const parsedImRestUrl = url.parse(SdkConfig.get().integrations_rest_url);
parsedImRestUrl.path = '';
parsedImRestUrl.pathname = '';
return presentTermsForServices([new Service( return presentTermsForServices([new Service(
Matrix.SERVICE_TYPES.IM, Matrix.SERVICE_TYPES.IM,
SdkConfig.get().integrations_rest_url, parsedImRestUrl.format(),
token, token,
)]).then(() => { )]).then(() => {
return token; return token;