Move Scalar Widget URL check to WidgetUtils
Signed-off-by: Travis Ralston <travpc@gmail.com>
This commit is contained in:
parent
23162c8625
commit
98613748b6
3 changed files with 38 additions and 55 deletions
|
@ -15,6 +15,8 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import MatrixClientPeg from './MatrixClientPeg';
|
import MatrixClientPeg from './MatrixClientPeg';
|
||||||
|
import SdkConfig from "./SdkConfig";
|
||||||
|
import * as url from "url";
|
||||||
|
|
||||||
export default class WidgetUtils {
|
export default class WidgetUtils {
|
||||||
/* Returns true if user is able to send state events to modify widgets in this room
|
/* Returns true if user is able to send state events to modify widgets in this room
|
||||||
|
@ -55,4 +57,37 @@ export default class WidgetUtils {
|
||||||
|
|
||||||
return room.currentState.maySendStateEvent('im.vector.modular.widgets', me);
|
return room.currentState.maySendStateEvent('im.vector.modular.widgets', me);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if specified url is a scalar URL, typically https://scalar.vector.im/api
|
||||||
|
* @param {[type]} testUrlString URL to check
|
||||||
|
* @return {Boolean} True if specified URL is a scalar URL
|
||||||
|
*/
|
||||||
|
static isScalarUrl(testUrlString) {
|
||||||
|
if (!testUrlString) {
|
||||||
|
console.error('Scalar URL check failed. No URL specified');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const testUrl = url.parse(testUrlString);
|
||||||
|
|
||||||
|
let scalarUrls = SdkConfig.get().integrations_widgets_urls;
|
||||||
|
if (!scalarUrls || scalarUrls.length === 0) {
|
||||||
|
scalarUrls = [SdkConfig.get().integrations_rest_url];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < scalarUrls.length; i++) {
|
||||||
|
const scalarUrl = url.parse(scalarUrls[i]);
|
||||||
|
if (testUrl && scalarUrl) {
|
||||||
|
if (
|
||||||
|
testUrl.protocol === scalarUrl.protocol &&
|
||||||
|
testUrl.host === scalarUrl.host &&
|
||||||
|
testUrl.pathname.startsWith(scalarUrl.pathname)
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
||||||
import url from 'url';
|
import url from 'url';
|
||||||
import { _t } from '../../../languageHandler';
|
import { _t } from '../../../languageHandler';
|
||||||
import SdkConfig from '../../../SdkConfig';
|
import SdkConfig from '../../../SdkConfig';
|
||||||
|
import WidgetUtils from "../../../WidgetUtils";
|
||||||
|
|
||||||
export default class AppPermission extends React.Component {
|
export default class AppPermission extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
@ -20,7 +21,7 @@ export default class AppPermission extends React.Component {
|
||||||
|
|
||||||
const searchParams = new URLSearchParams(wurl.search);
|
const searchParams = new URLSearchParams(wurl.search);
|
||||||
|
|
||||||
if (this.isScalarWurl(wurl) && searchParams && searchParams.get('url')) {
|
if (WidgetUtils.isScalarUrl(wurl) && searchParams && searchParams.get('url')) {
|
||||||
curl = url.parse(searchParams.get('url'));
|
curl = url.parse(searchParams.get('url'));
|
||||||
if (curl) {
|
if (curl) {
|
||||||
curl.search = curl.query = "";
|
curl.search = curl.query = "";
|
||||||
|
@ -34,26 +35,6 @@ export default class AppPermission extends React.Component {
|
||||||
return curlString;
|
return curlString;
|
||||||
}
|
}
|
||||||
|
|
||||||
isScalarWurl(wurl) {
|
|
||||||
// Exit early if we've been given bad data
|
|
||||||
if (!wurl) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
let scalarUrls = SdkConfig.get().integrations_widgets_urls;
|
|
||||||
if (!scalarUrls || scalarUrls.length == 0) {
|
|
||||||
scalarUrls = [SdkConfig.get().integrations_rest_url];
|
|
||||||
}
|
|
||||||
|
|
||||||
const url = wurl.format();
|
|
||||||
for (const scalarUrl of scalarUrls) {
|
|
||||||
if (url.startsWith(scalarUrl)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let e2eWarningText;
|
let e2eWarningText;
|
||||||
if (this.props.isRoomEncrypted) {
|
if (this.props.isRoomEncrypted) {
|
||||||
|
|
|
@ -121,39 +121,6 @@ export default class AppTile extends React.Component {
|
||||||
return u.format();
|
return u.format();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if specified url is a scalar URL, typically https://scalar.vector.im/api
|
|
||||||
* @param {[type]} testUrlString URL to check
|
|
||||||
* @return {Boolean} True if specified URL is a scalar URL
|
|
||||||
*/
|
|
||||||
isScalarUrl(testUrlString) {
|
|
||||||
if (!testUrlString) {
|
|
||||||
console.error('Scalar URL check failed. No URL specified');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const testUrl = url.parse(testUrlString);
|
|
||||||
|
|
||||||
let scalarUrls = SdkConfig.get().integrations_widgets_urls;
|
|
||||||
if (!scalarUrls || scalarUrls.length == 0) {
|
|
||||||
scalarUrls = [SdkConfig.get().integrations_rest_url];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i < scalarUrls.length; i++) {
|
|
||||||
const scalarUrl = url.parse(scalarUrls[i]);
|
|
||||||
if (testUrl && scalarUrl) {
|
|
||||||
if (
|
|
||||||
testUrl.protocol === scalarUrl.protocol &&
|
|
||||||
testUrl.host === scalarUrl.host &&
|
|
||||||
testUrl.pathname.startsWith(scalarUrl.pathname)
|
|
||||||
) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
isMixedContent() {
|
isMixedContent() {
|
||||||
const parentContentProtocol = window.location.protocol;
|
const parentContentProtocol = window.location.protocol;
|
||||||
const u = url.parse(this.props.url);
|
const u = url.parse(this.props.url);
|
||||||
|
@ -209,7 +176,7 @@ export default class AppTile extends React.Component {
|
||||||
setScalarToken() {
|
setScalarToken() {
|
||||||
this.setState({initialising: true});
|
this.setState({initialising: true});
|
||||||
|
|
||||||
if (!this.isScalarUrl(this.props.url)) {
|
if (!WidgetUtils.isScalarUrl(this.props.url)) {
|
||||||
console.warn('Non-scalar widget, not setting scalar token!', url);
|
console.warn('Non-scalar widget, not setting scalar token!', url);
|
||||||
this.setState({
|
this.setState({
|
||||||
error: null,
|
error: null,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue