Merge remote-tracking branch 'origin/develop' into develop
This commit is contained in:
commit
bea30bceae
3 changed files with 38 additions and 49 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import url from 'url';
|
import url from 'url';
|
||||||
import { _t } from '../../../languageHandler';
|
import { _t } from '../../../languageHandler';
|
||||||
|
import WidgetUtils from "../../../WidgetUtils";
|
||||||
|
|
||||||
export default class AppPermission extends React.Component {
|
export default class AppPermission extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
@ -19,7 +20,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 = "";
|
||||||
|
@ -33,19 +34,6 @@ export default class AppPermission extends React.Component {
|
||||||
return curlString;
|
return curlString;
|
||||||
}
|
}
|
||||||
|
|
||||||
isScalarWurl(wurl) {
|
|
||||||
if (wurl && wurl.hostname && (
|
|
||||||
wurl.hostname === 'scalar.vector.im' ||
|
|
||||||
wurl.hostname === 'scalar-staging.riot.im' ||
|
|
||||||
wurl.hostname === 'scalar-develop.riot.im' ||
|
|
||||||
wurl.hostname === 'demo.riot.im' ||
|
|
||||||
wurl.hostname === 'localhost'
|
|
||||||
)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let e2eWarningText;
|
let e2eWarningText;
|
||||||
if (this.props.isRoomEncrypted) {
|
if (this.props.isRoomEncrypted) {
|
||||||
|
|
|
@ -25,7 +25,6 @@ import PlatformPeg from '../../../PlatformPeg';
|
||||||
import ScalarAuthClient from '../../../ScalarAuthClient';
|
import ScalarAuthClient from '../../../ScalarAuthClient';
|
||||||
import WidgetMessaging from '../../../WidgetMessaging';
|
import WidgetMessaging from '../../../WidgetMessaging';
|
||||||
import TintableSvgButton from './TintableSvgButton';
|
import TintableSvgButton from './TintableSvgButton';
|
||||||
import SdkConfig from '../../../SdkConfig';
|
|
||||||
import Modal from '../../../Modal';
|
import Modal from '../../../Modal';
|
||||||
import { _t, _td } from '../../../languageHandler';
|
import { _t, _td } from '../../../languageHandler';
|
||||||
import sdk from '../../../index';
|
import sdk from '../../../index';
|
||||||
|
@ -121,39 +120,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 +175,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…
Reference in a new issue