mirror of
https://github.com/vector-im/element-web.git
synced 2024-11-17 05:55:00 +08:00
Move scalar auth stuff to ScalarAuthClient from RoomSettings
This commit is contained in:
parent
d3bc2b7df7
commit
6ec7e5df28
@ -18,9 +18,41 @@ var q = require("q");
|
|||||||
var request = require('browser-request');
|
var request = require('browser-request');
|
||||||
|
|
||||||
var SdkConfig = require('./SdkConfig');
|
var SdkConfig = require('./SdkConfig');
|
||||||
|
var MatrixClientPeg = require('./MatrixClientPeg');
|
||||||
|
|
||||||
class ScalarAuthClient {
|
class ScalarAuthClient {
|
||||||
getScalarToken(openid_token_object) {
|
|
||||||
|
constructor() {
|
||||||
|
this.scalarToken = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
connect() {
|
||||||
|
return this.getScalarToken().then((tok) => {
|
||||||
|
this.scalarToken = tok;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
hasCredentials() {
|
||||||
|
return this.scalarToken != null; // undef or null
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a scalar_token string
|
||||||
|
getScalarToken() {
|
||||||
|
var tok = window.localStorage.getItem("mx_scalar_token");
|
||||||
|
if (tok) return q(tok);
|
||||||
|
|
||||||
|
// No saved token, so do the dance to get one. First, we
|
||||||
|
// need an openid bearer token from the HS.
|
||||||
|
return MatrixClientPeg.get().getOpenIdToken().then((token_object) => {
|
||||||
|
// Now we can send that to scalar and exchange it for a scalar token
|
||||||
|
return this.exchangeForScalarToken(token_object);
|
||||||
|
}).then((token_object) => {
|
||||||
|
window.localStorage.setItem("mx_scalar_token", token_object);
|
||||||
|
return token_object;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
exchangeForScalarToken(openid_token_object) {
|
||||||
var defer = q.defer();
|
var defer = q.defer();
|
||||||
|
|
||||||
var scalar_rest_url = SdkConfig.get().integrations_rest_url;
|
var scalar_rest_url = SdkConfig.get().integrations_rest_url;
|
||||||
@ -43,6 +75,13 @@ class ScalarAuthClient {
|
|||||||
|
|
||||||
return defer.promise;
|
return defer.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getScalarInterfaceUrlForRoom(roomId) {
|
||||||
|
var url = SdkConfig.get().integrations_ui_url;
|
||||||
|
url += "?scalar_token=" + encodeURIComponent(this.scalarToken);
|
||||||
|
url += "&room_id=" + encodeURIComponent(roomId);
|
||||||
|
return url;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = ScalarAuthClient;
|
module.exports = ScalarAuthClient;
|
||||||
|
@ -176,15 +176,23 @@ module.exports = React.createClass({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onStarterLinkClick: function() {
|
||||||
|
},
|
||||||
|
|
||||||
render: function() {
|
render: function() {
|
||||||
const EmojiText = sdk.getComponent('elements.EmojiText');
|
const EmojiText = sdk.getComponent('elements.EmojiText');
|
||||||
var mxEvent = this.props.mxEvent;
|
var mxEvent = this.props.mxEvent;
|
||||||
var content = mxEvent.getContent();
|
var content = mxEvent.getContent();
|
||||||
|
|
||||||
var body = HtmlUtils.bodyToHtml(content, this.props.highlights, {});
|
var body = HtmlUtils.bodyToHtml(content, this.props.highlights, {});
|
||||||
|
|
||||||
if (this.props.highlightLink) {
|
if (this.props.highlightLink) {
|
||||||
body = <a href={ this.props.highlightLink }>{ body }</a>;
|
body = <a href={ this.props.highlightLink }>{ body }</a>;
|
||||||
}
|
}
|
||||||
|
else if (content.data && typeof content.data["org.matrix.neb.starter_link"] === "string") {
|
||||||
|
console.log("Set starter link");
|
||||||
|
body = <a href={ content.data["org.matrix.neb.starter_link"] }>{ body }</a>;
|
||||||
|
}
|
||||||
|
|
||||||
var widgets;
|
var widgets;
|
||||||
if (this.state.links.length && !this.state.widgetHidden && this.props.showUrlPreview) {
|
if (this.state.links.length && !this.state.widgetHidden && this.props.showUrlPreview) {
|
||||||
|
@ -65,7 +65,6 @@ module.exports = React.createClass({
|
|||||||
// Default to false if it's undefined, otherwise react complains about changing
|
// Default to false if it's undefined, otherwise react complains about changing
|
||||||
// components from uncontrolled to controlled
|
// components from uncontrolled to controlled
|
||||||
isRoomPublished: this._originalIsRoomPublished || false,
|
isRoomPublished: this._originalIsRoomPublished || false,
|
||||||
scalar_token: null,
|
|
||||||
scalar_error: null,
|
scalar_error: null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@ -81,11 +80,14 @@ module.exports = React.createClass({
|
|||||||
console.error("Failed to get room visibility: " + err);
|
console.error("Failed to get room visibility: " + err);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.getScalarToken().done((token) => {
|
this.scalarClient = new ScalarAuthClient();
|
||||||
this.setState({scalar_token: token});
|
this.scalarClient.connect().done(() => {
|
||||||
|
this.forceUpdate();
|
||||||
}, (err) => {
|
}, (err) => {
|
||||||
this.setState({scalar_error: err});
|
this.setState({
|
||||||
});
|
scalar_error: err
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'ui_opacity',
|
action: 'ui_opacity',
|
||||||
@ -395,34 +397,13 @@ module.exports = React.createClass({
|
|||||||
roomState.mayClientSendStateEvent("m.room.guest_access", cli))
|
roomState.mayClientSendStateEvent("m.room.guest_access", cli))
|
||||||
},
|
},
|
||||||
|
|
||||||
getScalarInterfaceUrl: function() {
|
|
||||||
var url = SdkConfig.get().integrations_ui_url;
|
|
||||||
url += "?scalar_token=" + encodeURIComponent(this.state.scalar_token);
|
|
||||||
url += "&room_id=" + encodeURIComponent(this.props.room.roomId);
|
|
||||||
return url;
|
|
||||||
},
|
|
||||||
|
|
||||||
getScalarToken() {
|
|
||||||
var tok = window.localStorage.getItem("mx_scalar_token");
|
|
||||||
if (tok) return q(tok);
|
|
||||||
|
|
||||||
// No saved token, so do the dance to get one. First, we
|
|
||||||
// need an openid bearer token from the HS.
|
|
||||||
return MatrixClientPeg.get().getOpenIdToken().then((token_object) => {
|
|
||||||
// Now we can send that to scalar and exchange it for a scalar token
|
|
||||||
var scalar_auth_client = new ScalarAuthClient();
|
|
||||||
return scalar_auth_client.getScalarToken(token_object);
|
|
||||||
}).then((token_object) => {
|
|
||||||
window.localStorage.setItem("mx_scalar_token", token_object);
|
|
||||||
return token_object;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
onManageIntegrations(ev) {
|
onManageIntegrations(ev) {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
var IntegrationsManager = sdk.getComponent("views.settings.IntegrationsManager");
|
var IntegrationsManager = sdk.getComponent("views.settings.IntegrationsManager");
|
||||||
Modal.createDialog(IntegrationsManager, {
|
Modal.createDialog(IntegrationsManager, {
|
||||||
src: this.state.scalar_token ? this.getScalarInterfaceUrl() : null
|
src: this.scalarClient.hasCredentials() ?
|
||||||
|
this.scalarClient.getScalarInterfaceUrlForRoom(this.props.room.roomId) :
|
||||||
|
null
|
||||||
}, "");
|
}, "");
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -649,7 +630,7 @@ module.exports = React.createClass({
|
|||||||
if (UserSettingsStore.isFeatureEnabled("integration_management")) {
|
if (UserSettingsStore.isFeatureEnabled("integration_management")) {
|
||||||
let integrations_body;
|
let integrations_body;
|
||||||
|
|
||||||
if (this.state.scalar_token) {
|
if (this.scalarClient.hasCredentials()) {
|
||||||
integrations_body = (
|
integrations_body = (
|
||||||
<div className="mx_RoomSettings_settings">
|
<div className="mx_RoomSettings_settings">
|
||||||
<a href="#" onClick={ this.onManageIntegrations }>Manage integrations</a>
|
<a href="#" onClick={ this.onManageIntegrations }>Manage integrations</a>
|
||||||
|
Loading…
Reference in New Issue
Block a user