2017-07-26 11:28:43 +01:00
import React from 'react' ;
import PropTypes from 'prop-types' ;
2017-07-26 16:47:58 +01:00
import url from 'url' ;
2017-07-28 16:39:18 +01:00
import { _t } from '../../../languageHandler' ;
2017-07-26 11:28:43 +01:00
export default class AppPermission extends React . Component {
constructor ( props ) {
super ( props );
2017-07-28 10:18:06 +01:00
const curlBase = this . getCurlBase ();
2017-07-28 16:36:06 +01:00
this . state = { curlBase : curlBase };
2017-07-26 11:28:43 +01:00
}
2017-07-28 10:18:06 +01:00
// Return string representation of content URL without query parameters
getCurlBase () {
2017-07-26 16:47:58 +01:00
const wurl = url . parse ( this . props . url );
let curl ;
2017-07-28 10:01:58 +01:00
let curlString ;
2017-07-26 16:47:58 +01:00
const searchParams = new URLSearchParams ( wurl . search );
2017-07-28 10:01:58 +01:00
2017-08-01 12:00:03 +01:00
if ( this . isScalarWurl ( wurl ) && searchParams && searchParams . get ( 'url' )) {
2017-07-28 10:01:58 +01:00
curl = url . parse ( searchParams . get ( 'url' ));
if ( curl ) {
curl . search = curl . query = "" ;
curlString = curl . format ();
}
2017-07-26 11:28:43 +01:00
}
2017-07-27 16:42:29 +01:00
if ( ! curl && wurl ) {
wurl . search = wurl . query = "" ;
2017-07-28 10:01:58 +01:00
curlString = wurl . format ();
2017-07-27 16:42:29 +01:00
}
2017-07-28 10:01:58 +01:00
return curlString ;
2017-07-26 11:28:43 +01:00
}
2017-08-01 12:00:03 +01:00
isScalarWurl ( wurl ) {
if ( wurl && wurl . hostname && (
wurl . hostname === 'scalar.vector.im' ||
wurl . hostname === 'scalar-staging.riot.im' ||
2017-08-02 14:35:14 +01:00
wurl . hostname === 'scalar-develop.riot.im' ||
2017-08-01 12:00:03 +01:00
wurl . hostname === 'demo.riot.im' ||
wurl . hostname === 'localhost'
)) {
return true ;
}
return false ;
}
2017-07-26 11:28:43 +01:00
render () {
2017-08-18 17:44:33 +02:00
let e2eWarningText ;
if ( this . props . isRoomEncrypted ) {
e2eWarningText =
2017-08-21 10:23:55 +02:00
< span className = 'mx_AppPermissionWarningTextLabel' > { _t ( 'NOTE: Apps are not end-to-end encrypted' )} < /span>;
2017-08-18 17:44:33 +02:00
}
2017-07-26 11:28:43 +01:00
return (
2017-07-26 16:47:58 +01:00
< div className = 'mx_AppPermissionWarning' >
< div className = 'mx_AppPermissionWarningImage' >
2017-07-28 16:39:18 +01:00
< img src = 'img/warning.svg' alt = { _t ( 'Warning!' )} />
2017-07-26 16:47:58 +01:00
< /div>
< div className = 'mx_AppPermissionWarningText' >
2017-08-21 10:23:55 +02:00
< span className = 'mx_AppPermissionWarningTextLabel' > { _t ( 'Do you want to load widget from URL:' )} < /span> <span className='mx_AppPermissionWarningTextURL'>{this.state.curlBase}</span>
2017-08-18 17:44:33 +02:00
{ e2eWarningText }
2017-07-26 16:47:58 +01:00
< /div>
2017-07-26 11:28:43 +01:00
< input
2017-07-26 16:47:58 +01:00
className = 'mx_AppPermissionButton'
2017-07-26 11:28:43 +01:00
type = 'button'
2017-07-28 16:42:07 +01:00
value = { _t ( 'Allow' )}
2017-07-26 11:28:43 +01:00
onClick = { this . props . onPermissionGranted }
/>
< /div>
);
}
}
AppPermission . propTypes = {
2017-08-18 17:44:33 +02:00
isRoomEncrypted : PropTypes . bool ,
2017-07-26 11:28:43 +01:00
url : PropTypes . string . isRequired ,
onPermissionGranted : PropTypes . func . isRequired ,
};
2017-07-28 16:23:38 +01:00
AppPermission . defaultProps = {
2017-08-18 17:44:33 +02:00
isRoomEncrypted : false ,
2017-07-26 11:28:43 +01:00
onPermissionGranted : function () {},
};