[FIX] Remove unused code for Cordova (#13188)

pull/11251/head
Rodrigo Nascimento 6 years ago committed by GitHub
parent e5c7472f8c
commit c736766e80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 14
      .eslintrc
  2. 6
      packages/.eslintrc
  3. 55
      packages/meteor-accounts-saml/client/saml_client.js
  4. 7
      packages/meteor-timesync/client/timesync-client.js
  5. 5
      packages/meteor-timesync/server/timesync-server.js
  6. 58
      packages/rocketchat-cas/client/cas_client.js
  7. 2
      packages/rocketchat-cors/server/cors.js
  8. 6
      packages/rocketchat-custom-sounds/client/lib/CustomSounds.js
  9. 2
      packages/rocketchat-emoji-custom/client/lib/emojiCustom.js
  10. 1
      packages/rocketchat-emoji/client/index.js
  11. 15
      packages/rocketchat-emoji/client/keyboardFix.js
  12. 180
      packages/rocketchat-iframe-login/client/iframe_client.js
  13. 12
      packages/rocketchat-lazy-load/client/index.js
  14. 3
      packages/rocketchat-lib/client/lib/settings.js
  15. 2
      packages/rocketchat-lib/lib/getURL.js
  16. 16
      packages/rocketchat-livechat/.app/client/lib/LivechatVideoCall.js
  17. 3
      packages/rocketchat-ui-login/client/login/form.html
  18. 16
      packages/rocketchat-ui-login/client/login/form.js
  19. 42
      packages/rocketchat-ui-login/client/login/services.js
  20. 3
      packages/rocketchat-ui-master/client/main.js
  21. 4
      packages/rocketchat-ui-message/client/startup/messageBoxActions.js
  22. 4
      packages/rocketchat-ui-utils/client/lib/IframeLogin.js
  23. 12
      packages/rocketchat-ui-utils/client/lib/MessageAction.js
  24. 5
      packages/rocketchat-ui/client/index.js
  25. 34
      packages/rocketchat-ui/client/lib/cordova/facebook-login.js
  26. 33
      packages/rocketchat-ui/client/lib/cordova/keyboard-fix.js
  27. 94
      packages/rocketchat-ui/client/lib/cordova/push.js
  28. 19
      packages/rocketchat-ui/client/lib/cordova/urls.js
  29. 28
      packages/rocketchat-ui/client/lib/cordova/user-state.js
  30. 20
      packages/rocketchat-ui/client/views/app/room.js
  31. 3
      packages/rocketchat-utils/lib/getAvatarUrlFromUsername.js
  32. 31
      packages/rocketchat-videobridge/client/views/videoFlexTab.js
  33. 6
      packages/rocketchat-videobridge/client/views/videoFlexTabBbb.js
  34. 2
      packages/rocketchat_theme/server/server.js
  35. 7
      packages/tap-i18n/.eslintrc
  36. 42
      server/lib/cordova/facebook-login.js

@ -7,27 +7,15 @@
"Apps" : false,
"Assets" : false,
"chrome" : false,
"cordova" : false,
"device" : false,
"DynamicCss" : false,
"facebookConnectPlugin" : false,
"handleError" : false,
"getAvatarSuggestionForUser" : false,
"globals" : true,
"JitsiMeetExternalAPI" : false,
"jscolor" : false,
"language_names" : true,
"msgStream" : false,
"Npm" : false,
"openRoom" : false,
"OnePassword" : false,
"Package" : false,
"RocketChat" : true,
"roomExit" : true,
"Servers" : false,
"Settings" : false,
"TAPi18next" : false,
"TwitterConnect" : false,
"VRecDialog" : false
"Settings" : false
}
}

@ -0,0 +1,6 @@
{
"globals": {
"Npm" : false,
"Package": false
}
}

@ -44,45 +44,24 @@ Meteor.logout = function(...args) {
};
const openCenteredPopup = function(url, width, height) {
let newwindow;
if (typeof cordova !== 'undefined' && typeof cordova.InAppBrowser !== 'undefined') {
newwindow = cordova.InAppBrowser.open(url, '_blank');
newwindow.closed = false;
const intervalId = setInterval(function() {
newwindow.executeScript({
code: 'document.getElementsByTagName("script")[0].textContent',
}, function(data) {
if (data && data.length > 0 && data[0] === 'window.close()') {
newwindow.close();
newwindow.closed = true;
}
});
}, 100);
newwindow.addEventListener('exit', function() {
clearInterval(intervalId);
});
} else {
const screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft;
const screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop;
const outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth;
const outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22);
// XXX what is the 22?
// Use `outerWidth - width` and `outerHeight - height` for help in
// positioning the popup centered relative to the current window
const left = screenX + (outerWidth - width) / 2;
const top = screenY + (outerHeight - height) / 2;
const features = (`width=${ width },height=${ height
},left=${ left },top=${ top },scrollbars=yes`);
newwindow = window.open(url, 'Login', features);
if (newwindow.focus) {
newwindow.focus();
}
const screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft;
const screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop;
const outerWidth = typeof window.outerWidth !== 'undefined' ? window.outerWidth : document.body.clientWidth;
const outerHeight = typeof window.outerHeight !== 'undefined' ? window.outerHeight : (document.body.clientHeight - 22);
// XXX what is the 22?
// Use `outerWidth - width` and `outerHeight - height` for help in
// positioning the popup centered relative to the current window
const left = screenX + (outerWidth - width) / 2;
const top = screenY + (outerHeight - height) / 2;
const features = (`width=${ width },height=${ height
},left=${ left },top=${ top },scrollbars=yes`);
const newwindow = window.open(url, 'Login', features);
if (newwindow.focus) {
newwindow.focus();
}
return newwindow;
};

@ -47,18 +47,11 @@ var attempts = 0;
we should try taking multiple measurements.
*/
// Only use Meteor.absoluteUrl for Cordova; see
// https://github.com/meteor/meteor/issues/4696
// https://github.com/mizzao/meteor-timesync/issues/30
var syncUrl = "/_timesync";
if (__meteor_runtime_config__.ROOT_URL_PATH_PREFIX) {
syncUrl = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX + syncUrl;
}
if (Meteor.isCordova) {
syncUrl = Meteor.absoluteUrl("_timesync");
}
var updateOffset = function() {
var t0 = Date.now();

@ -18,11 +18,6 @@ WebApp.rawConnectHandlers.use(syncUrl,
// Avoid MIME type warnings in browsers
res.setHeader("Content-Type", "text/plain");
// Cordova lives in meteor.local, so it does CORS
if (req.headers && req.headers.origin === 'http://meteor.local') {
res.setHeader('Access-Control-Allow-Origin', 'http://meteor.local');
}
res.end(Date.now().toString());
}
);

@ -48,46 +48,30 @@ Meteor.loginWithCas = function(options, callback) {
popup_height || 600
);
// Fix for #3200: monitor the popup differently if it's Cordova
if (Meteor.isCordova) {
// Check the URL when each page finishes loading, and if the URL contains "ticket", then close the popup because CAS has finished
popup.addEventListener('loadstop', function(e) {
if (e.url.indexOf('?ticket=') !== -1) {
popup.close();
}
});
popup.addEventListener('exit', function() {
const checkPopupOpen = setInterval(function() {
let popupClosed;
try {
// Fix for #328 - added a second test criteria (popup.closed === undefined)
// to humour this Android quirk:
// http://code.google.com/p/android/issues/detail?id=21061
popupClosed = popup.closed || popup.closed === undefined;
} catch (e) {
// For some unknown reason, IE9 (and others?) sometimes (when
// the popup closes too quickly?) throws "SCRIPT16386: No such
// interface supported" when trying to read 'popup.closed'. Try
// again in 100ms.
return;
}
if (popupClosed) {
clearInterval(checkPopupOpen);
// check auth on server.
Accounts.callLoginMethod({
methodArguments: [{ cas: { credentialToken } }],
userCallback: callback,
});
});
} else {
const checkPopupOpen = setInterval(function() {
let popupClosed;
try {
// Fix for #328 - added a second test criteria (popup.closed === undefined)
// to humour this Android quirk:
// http://code.google.com/p/android/issues/detail?id=21061
popupClosed = popup.closed || popup.closed === undefined;
} catch (e) {
// For some unknown reason, IE9 (and others?) sometimes (when
// the popup closes too quickly?) throws "SCRIPT16386: No such
// interface supported" when trying to read 'popup.closed'. Try
// again in 100ms.
return;
}
if (popupClosed) {
clearInterval(checkPopupOpen);
// check auth on server.
Accounts.callLoginMethod({
methodArguments: [{ cas: { credentialToken } }],
userCallback: callback,
});
}
}, 100);
}
}
}, 100);
};

@ -62,7 +62,7 @@ WebApp.rawConnectHandlers.use(Meteor.bindEnvironment(function(req, res, next) {
}));
WebApp.rawConnectHandlers.use(function(req, res, next) {
if (/^\/(api|_timesync|sockjs|tap-i18n|__cordova)(\/|$)/.test(req.url)) {
if (/^\/(api|_timesync|sockjs|tap-i18n)(\/|$)/.test(req.url)) {
res.setHeader('Access-Control-Allow-Origin', '*');
}

@ -15,10 +15,6 @@ class CustomSoundsClass {
}
add(sound) {
if (Meteor.isCordova) {
return;
}
if (!sound.src) {
sound.src = this.getURL(sound);
}
@ -52,7 +48,7 @@ class CustomSoundsClass {
}
getURL(sound) {
const path = (Meteor.isCordova) ? Meteor.absoluteUrl().replace(/\/$/, '') : __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || '';
const path = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || '';
return `${ path }/custom-sounds/${ sound._id }.${ sound.extension }?_dc=${ sound.random || 0 }`;
}

@ -18,7 +18,7 @@ export const getEmojiUrlFromName = function(name, extension) {
if (name == null) {
return;
}
const path = (Meteor.isCordova) ? Meteor.absoluteUrl().replace(/\/$/, '') : __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || '';
const path = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || '';
return `${ path }/emoji-custom/${ encodeURIComponent(name) }.${ extension }?_dc=${ random }`;
};

@ -4,7 +4,6 @@ import './emojiPicker.html';
import './emojiPicker';
import { EmojiPicker } from './lib/EmojiPicker';
import { renderEmoji } from './lib/emojiRenderer';
import './keyboardFix';
export {
renderEmoji,

@ -1,15 +0,0 @@
import { Meteor } from 'meteor/meteor';
import { EmojiPicker } from './lib/EmojiPicker';
if (Meteor.isCordova) {
window.addEventListener('native.keyboardshow', function() {
if ((typeof device !== 'undefined' && device !== null ? device.platform.toLowerCase() : false) !== 'android') {
EmojiPicker.setPosition();
}
});
window.addEventListener('native.keyboardhide', function() {
if ((typeof device !== 'undefined' && device !== null ? device.platform.toLowerCase() : false) !== 'android') {
EmojiPicker.setPosition();
}
});
}

@ -1,8 +1,6 @@
import { Meteor } from 'meteor/meteor';
import { RocketChat } from 'meteor/rocketchat:lib';
import { Accounts } from 'meteor/accounts-base';
import { IframeLogin } from 'meteor/rocketchat:ui-utils';
import { OAuth } from 'meteor/oauth';
import _ from 'underscore';
const { _unstoreLoginToken } = Accounts;
@ -13,28 +11,6 @@ Accounts._unstoreLoginToken = function(...args) {
RocketChat.iframeLogin = new IframeLogin();
const requestCredential = (serviceName, options = {}, callback) => {
window[serviceName].requestCredential(options, (tokenOrError) => {
if (tokenOrError && tokenOrError instanceof Error) {
return callback(tokenOrError);
}
const secret = OAuth._retrieveCredentialSecret(tokenOrError);
if (!secret) {
return callback(new Error('Invalid secret'));
}
Meteor.call('OAuth.retrieveCredential', tokenOrError, secret, (error, credential) => {
if (!credential) {
return callback(new Error('Credential not found'));
}
callback(credential.serviceData, tokenOrError, secret);
});
});
};
window.addEventListener('message', (e) => {
if (! _.isObject(e.data)) {
return;
@ -62,161 +38,5 @@ window.addEventListener('message', (e) => {
}
});
break;
case 'call-facebook-login':
const fbLoginSuccess = (response) => {
console.log('facebook-login-success', response);
e.source.postMessage({
event: 'facebook-login-success',
response,
// authResponse: Object
// accessToken: "a7s6d8a76s8d7..."
// expiresIn: "5172793"
// secret: "..."
// session_key: true
// sig: "..."
// userID: "675676576"
// status: "connected"
}, e.origin);
};
const fbLoginError = (error, response) => {
console.log('facebook-login-error', error, response);
e.source.postMessage({
event: 'facebook-login-error',
error,
response,
}, e.origin);
};
if (typeof window.facebookConnectPlugin === 'undefined') {
requestCredential('Facebook', {}, (serviceData, token, secret) => {
if (serviceData && serviceData instanceof Error) {
return fbLoginError('poup-login-error', serviceData);
} else {
fbLoginSuccess({
authResponse: {
accessToken: serviceData.accessToken,
expiresIn: serviceData.expiresAt,
secret,
},
userID: serviceData.id,
});
}
});
break;
}
facebookConnectPlugin.getLoginStatus((response) => {
if (response.status === 'connected') {
return fbLoginSuccess(response);
}
facebookConnectPlugin.login(e.data.permissions, fbLoginSuccess, (error) => fbLoginError('login-error', error));
}, (error) => fbLoginError('get-status-error', error));
break;
case 'call-twitter-login':
const twitterLoginSuccess = (response) => {
console.log('twitter-login-success', response);
e.source.postMessage({
event: 'twitter-login-success',
response,
// {
// "userName": "orodrigok",
// "userId": 293123,
// "secret": "asdua09sud",
// "token": "2jh3k1j2h3"
// }
}, e.origin);
};
const twitterLoginFailure = (error) => {
console.log('twitter-login-error', error);
e.source.postMessage({
event: 'twitter-login-error',
error,
}, e.origin);
};
if (typeof window.TwitterConnect === 'undefined') {
requestCredential('Twitter', {}, (serviceData) => {
if (serviceData && serviceData instanceof Error) {
return twitterLoginFailure('poup-login-error', serviceData);
} else {
twitterLoginSuccess({
userName: serviceData.screenName,
userId: serviceData.id,
secret: serviceData.accessTokenSecret,
token: serviceData.accessToken,
});
}
});
break;
}
TwitterConnect.login(twitterLoginSuccess, twitterLoginFailure);
break;
case 'call-google-login':
const googleLoginSuccess = (response) => {
if (typeof response.oauthToken === 'string' && typeof response.accessToken !== 'string') {
response.accessToken = response.oauthToken;
}
console.log('google-login-success', response);
e.source.postMessage({
event: 'google-login-success',
response,
// {
// "email": "rodrigoknascimento@gmail.com",
// "userId": "1082039180239",
// "displayName": "Rodrigo Nascimento",
// "gender": "male",
// "imageUrl": "https://lh5.googleusercontent.com/-shUpniJA480/AAAAAAAAAAI/AAAAAAAAAqY/_B8oyS8yBw0/photo.jpg?sz=50",
// "givenName": "Rodrigo",
// "familyName": "Nascimento",
// "ageRangeMin": 21,
// "accessToken": "123198273kajhsdh1892h"
// }
}, e.origin);
};
const googleLoginFailure = (error) => {
console.log('google-login-error', error);
e.source.postMessage({
event: 'google-login-error',
error,
}, e.origin);
};
if (typeof window.plugins === 'undefined' || typeof window.plugins.googleplus === 'undefined') {
requestCredential('Google', {}, (serviceData) => {
if (serviceData && serviceData instanceof Error) {
return googleLoginFailure('poup-login-error', serviceData);
} else {
googleLoginSuccess({
email: serviceData.email,
userId: serviceData.id,
displayName: serviceData.name,
gender: serviceData.gender,
imageUrl: serviceData.picture,
givenName: serviceData.given_name,
familyName: serviceData.family_name,
accessToken: serviceData.accessToken,
});
}
});
break;
}
const options = {
scopes: e.data.scopes,
webClientId: e.data.webClientId,
offline: true,
};
window.plugins.googleplus.login(options, googleLoginSuccess, googleLoginFailure);
break;
}
});

@ -7,17 +7,7 @@ export const fixCordova = function(url) {
if (url && url.indexOf('data:image') === 0) {
return url;
}
if (Meteor.isCordova && (url && url[0] === '/')) {
url = Meteor.absoluteUrl().replace(/\/$/, '') + url;
const query = `rc_uid=${ Meteor.userId() }&rc_token=${ Meteor._localStorage.getItem(
'Meteor.loginToken'
) }`;
if (url.indexOf('?') === -1) {
url = `${ url }?${ query }`;
} else {
url = `${ url }&${ query }`;
}
}
if (Meteor.settings.public.sandstorm || url.match(/^(https?:)?\/\//i)) {
return url;
} else if (navigator.userAgent.indexOf('Electron') > -1) {

@ -4,9 +4,6 @@ import { t } from 'meteor/rocketchat:utils';
import { modal } from 'meteor/rocketchat:ui-utils';
Meteor.startup(function() {
if (Meteor.isCordova === true) {
return;
}
Tracker.autorun(function(c) {
const siteUrl = RocketChat.settings.get('Site_Url');
if (!siteUrl || (Meteor.userId() == null)) {

@ -11,7 +11,7 @@ RocketChat.getURL = (path, { cdn = true, full = false } = {}) => {
if (cdn && cdnPrefix !== '') {
basePath = cdnPrefix + pathPrefix;
} else if (full || Meteor.isCordova) {
} else if (full) {
return Meteor.absoluteUrl(finalPath);
} else {
basePath = pathPrefix;

@ -1,4 +1,4 @@
/* globals LivechatVideoCall, cordova, JitsiMeetExternalAPI */
/* globals LivechatVideoCall, JitsiMeetExternalAPI */
import { Meteor } from 'meteor/meteor';
import { ReactiveVar } from 'meteor/reactive-var';
import visitor from '../../imports/client/visitor';
@ -15,19 +15,7 @@ LivechatVideoCall = new (class LivechatVideoCall {
}
askPermissions(callback) {
if (Meteor.isCordova) {
cordova.plugins.diagnostic.requestCameraAuthorization(() => {
cordova.plugins.diagnostic.requestMicrophoneAuthorization(() => {
callback(true);
}, (error) => {
console.error(error);
});
}, (error) => {
console.error(error);
});
} else {
return callback(true);
}
return callback(true);
}
request() {

@ -35,9 +35,6 @@
<div class="input-error"></div>
</div>
</label>
{{#if hasOnePassword}}
<div class="one-passsword"></div>
{{/if}}
</div>
<div class="rc-input">
<label class="rc-input__label" for="pass">

@ -68,9 +68,6 @@ Template.loginForm.helpers({
confirmPasswordPlaceholder() {
return RocketChat.settings.get('Accounts_ConfirmPasswordPlaceholder') || t('Confirm_password');
},
hasOnePassword() {
return typeof OnePassword !== 'undefined' && OnePassword.findLoginForUrl && typeof device !== 'undefined' && device.platform && device.platform.toLocaleLowerCase() === 'ios';
},
manuallyApproveNewUsers() {
return RocketChat.settings.get('Accounts_ManuallyApproveNewUsers');
},
@ -167,19 +164,6 @@ Template.loginForm.events({
Template.instance().state.set('forgot-password');
return RocketChat.callbacks.run('loginPageStateChange', Template.instance().state.get());
},
'click .one-passsword'() {
if (typeof OnePassword === 'undefined' || OnePassword.findLoginForUrl == null) {
return;
}
const succesCallback = function(credentials) {
$('input[name=emailOrUsername]').val(credentials.username);
return $('input[name=pass]').val(credentials.password);
};
const errorCallback = function(...args) {
return console.log('OnePassword errorCallback', ...args);
};
return OnePassword.findLoginForUrl(succesCallback, errorCallback, Meteor.absoluteUrl());
},
});
Template.loginForm.onCreated(function() {

@ -75,34 +75,20 @@ Template.loginServices.events({
const serviceIcon = $(e.currentTarget).find('.service-icon');
loadingIcon.removeClass('hidden');
serviceIcon.addClass('hidden');
if (Meteor.isCordova && this.service.service === 'facebook') {
return Meteor.loginWithFacebookCordova({}, function(error) {
loadingIcon.addClass('hidden');
serviceIcon.removeClass('hidden');
if (error) {
console.log(JSON.stringify(error));
if (error.reason) {
toastr.error(error.reason);
} else {
toastr.error(error.message);
}
}
});
} else {
const loginWithService = `loginWith${ longinMethods[this.service.service] || s.capitalize(this.service.service) }`;
const serviceConfig = this.service.clientConfig || {};
return Meteor[loginWithService](serviceConfig, function(error) {
loadingIcon.addClass('hidden');
serviceIcon.removeClass('hidden');
if (error) {
console.log(JSON.stringify(error));
if (error.reason) {
toastr.error(error.reason);
} else {
toastr.error(error.message);
}
const loginWithService = `loginWith${ longinMethods[this.service.service] || s.capitalize(this.service.service) }`;
const serviceConfig = this.service.clientConfig || {};
return Meteor[loginWithService](serviceConfig, function(error) {
loadingIcon.addClass('hidden');
serviceIcon.removeClass('hidden');
if (error) {
console.log(JSON.stringify(error));
if (error.reason) {
toastr.error(error.reason);
} else {
toastr.error(error.message);
}
});
}
}
});
},
});

@ -124,9 +124,6 @@ Template.body.onRendered(function() {
}(w, d, script, l, i));
}
});
if (Meteor.isCordova) {
return $(document.body).addClass('is-cordova');
}
});
Template.main.onCreated(function() {

@ -52,8 +52,8 @@ RocketChat.messageBox.actions.add('Add_files_from', 'Computer', {
$input.click();
// Simple hack for cordova aka codegueira
if ((typeof device !== 'undefined' && device.platform && device.platform.toLocaleLowerCase() === 'ios') || navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) {
// Simple hack for iOS aka codegueira
if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) {
$input.click();
}
},

@ -58,9 +58,7 @@ export class IframeLogin {
separator = '&';
}
if (window.cordova) {
iframeUrl += `${ separator }client=cordova`;
} else if (navigator.userAgent.indexOf('Electron') > -1) {
if (navigator.userAgent.indexOf('Electron') > -1) {
iframeUrl += `${ separator }client=electron`;
}

@ -251,11 +251,7 @@ Meteor.startup(async function() {
async action(event) {
const message = this._arguments[1];
const permalink = await MessageAction.getPermaLink(message._id);
if (Meteor.isCordova) {
cordova.plugins.clipboard.copy(permalink);
} else {
$(event.currentTarget).attr('data-clipboard-text', permalink);
}
$(event.currentTarget).attr('data-clipboard-text', permalink);
toastr.success(TAPi18n.__('Copied'));
},
condition(message) {
@ -277,11 +273,7 @@ Meteor.startup(async function() {
context: ['message', 'message-mobile'],
action(event) {
const message = this._arguments[1].msg;
if (Meteor.isCordova) {
cordova.plugins.clipboard.copy(message);
} else {
$(event.currentTarget).attr('data-clipboard-text', message);
}
$(event.currentTarget).attr('data-clipboard-text', message);
toastr.success(TAPi18n.__('Copied'));
},
condition(message) {

@ -30,11 +30,6 @@ export { Login, animationSupport, animeBack, Button, preLoadImgs } from './lib/r
export { SideNav } from './lib/sideNav';
import './lib/textarea-autogrow';
import './lib/codeMirror/codeMirror';
import './lib/cordova/facebook-login';
import './lib/cordova/keyboard-fix';
import './lib/cordova/push';
import './lib/cordova/urls';
import './lib/cordova/user-state';
export { AudioRecorder } from './lib/recorderjs/audioRecorder';
export { VideoRecorder } from './lib/recorderjs/videoRecorder';
import './lib/recorderjs/recorder';

@ -1,34 +0,0 @@
import { Meteor } from 'meteor/meteor';
import { Accounts } from 'meteor/accounts-base';
import { Facebook } from 'meteor/facebook-oauth';
Meteor.loginWithFacebookCordova = function(options, callback) {
if (!callback && typeof options === 'function') {
callback = options;
options = null;
}
const credentialRequestCompleteCallback = Accounts.oauth.credentialRequestCompleteHandler(callback);
const fbLoginSuccess = function(data) {
data.cordova = true;
return Accounts.callLoginMethod({
methodArguments: [data],
userCallback: callback,
});
};
if (typeof facebookConnectPlugin !== 'undefined') {
return facebookConnectPlugin.getLoginStatus(function(response) {
if (response.status !== 'connected') {
return facebookConnectPlugin.login(['public_profile', 'email'], fbLoginSuccess, function(error) {
console.log('login', JSON.stringify(error), error);
return callback(error);
});
} else {
return fbLoginSuccess(response);
}
}, function(error) {
console.log('getLoginStatus', JSON.stringify(error), error);
return callback(error);
});
}
return Facebook.requestCredential(options, credentialRequestCompleteCallback);
};

@ -1,33 +0,0 @@
import { Meteor } from 'meteor/meteor';
if (Meteor.isCordova) {
const body = $(document.body);
document.addEventListener('deviceready', function() {
if (typeof device !== 'undefined' && device !== null && device.platform.toLowerCase() !== 'android') {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
return cordova.plugins.Keyboard.disableScroll(true);
}
});
window.addEventListener('native.keyboardshow', function() {
if (typeof device !== 'undefined' && device !== null && device.platform.toLowerCase() !== 'android') {
if (Meteor.userId() != null) {
$('.main-content').css('height', window.innerHeight);
$('.sweet-alert').css('transform', `translateY(-${ (document.height - window.innerHeight) / 2 }px)`).css('-webkit-transform', `translateY(-${ (document.height - window.innerHeight) / 2 }px)`);
} else {
body.css('height', window.innerHeight);
body.css('overflow', 'scroll');
}
}
});
window.addEventListener('native.keyboardhide', function() {
if (typeof device !== 'undefined' && device !== null && device.platform.toLowerCase() !== 'android') {
if (Meteor.userId() != null) {
$('.main-content').css('height', window.innerHeight);
$('.sweet-alert').css('transform', '').css('-webkit-transform', '');
} else {
body.css('height', window.innerHeight);
body.css('overflow', 'visible');
}
}
});
}

@ -1,94 +0,0 @@
import { Meteor } from 'meteor/meteor';
import { Tracker } from 'meteor/tracker';
import { FlowRouter } from 'meteor/kadira:flow-router';
import { Push } from 'meteor/rocketchat:push';
import { settings } from 'meteor/rocketchat:settings';
if (Meteor.isCordova) {
// Push.addListener 'token', (token) ->
// Meteor.call 'log', 'CLIENT', 'token', arguments
// Push.addListener 'error', (err) ->
// Meteor.call 'log', 'CLIENT', 'error', arguments
// if err.type == 'apn.cordova'
// Meteor.call 'log', 'CLIENT', err.error
// Push.addListener 'register', (evt) ->
// Meteor.call 'log', 'CLIENT', 'register', arguments
// Push.addListener 'alert', (notification) ->
// Meteor.call 'log', 'CLIENT', 'alert', arguments
// Push.addListener 'sound', (notification) ->
// Meteor.call 'log', 'CLIENT', 'sound', arguments
// Push.addListener 'badge', (notification) ->
// Meteor.call 'log', 'CLIENT', 'badge', arguments
// Push.addListener 'message', (notification) ->
// Meteor.call 'log', 'CLIENT', 'message', arguments
Push.addListener('startup', function(notification) {
// Meteor.call 'log', 'CLIENT', 'startup', arguments
if (notification.payload && notification.payload.rid) {
if (notification.payload.host === Meteor.absoluteUrl()) {
switch (notification.payload.type) {
case 'c':
return FlowRouter.go('channel', { name: notification.payload.name }, FlowRouter.current().queryParams);
case 'p':
return FlowRouter.go('group', { name: notification.payload.name }, FlowRouter.current().queryParams);
case 'd':
return FlowRouter.go('direct', { username: notification.payload.sender.username }, FlowRouter.current().queryParams);
}
} else {
let path = '';
switch (notification.payload.type) {
case 'c':
path = `channel/${ notification.payload.name }`;
break;
case 'p':
path = `group/${ notification.payload.name }`;
break;
case 'd':
path = `direct/${ notification.payload.sender.username }`;
break;
}
const host = notification.payload.host.replace(/\/$/, '');
if (Servers.serverExists(host) !== true) {
return;
}
return Servers.startServer(host, path, function(err) {
if (err) {
// TODO err
return console.log(err);
}
});
}
}
});
Meteor.startup(() =>
Tracker.autorun(() => {
if (settings.get('Push_enable') === true) {
Push.Configure({
android: {
senderID: window.ANDROID_SENDER_ID,
sound: true,
vibrate: true,
},
ios: {
badge: true,
clearBadge: true,
sound: true,
alert: true,
},
});
}
})
);
}

@ -1,19 +0,0 @@
import { Meteor } from 'meteor/meteor';
Meteor.startup(() => {
if (!Meteor.isCordova) { return; }
// Handle click events for all external URLs
document.addEventListener('deviceready', () => {
// const platform = device.platform.toLowerCase();
$(document).on('click', function(e) {
const $link = $(e.target).closest('a[href]');
if (!($link.length > 0)) { return; }
const url = $link.attr('href');
if (/^https?:\/\/.+/i.test(url) === true) {
window.open(url, '_system');
return e.preventDefault();
}
});
});
});

@ -1,28 +0,0 @@
import { Meteor } from 'meteor/meteor';
import { UserPresence } from 'meteor/konecty:user-presence';
import { readMessage } from 'meteor/rocketchat:ui-utils';
import _ from 'underscore';
let timer = undefined;
if (Meteor.isCordova) {
document.addEventListener('pause', () => {
UserPresence.setAway();
readMessage.disable();
// Only disconnect after one minute of being in the background
timer = setTimeout(() => {
Meteor.disconnect();
timer = undefined;
}, 60000);
}, true);
document.addEventListener('resume', () => {
if (!_.isUndefined(timer)) {
clearTimeout(timer);
}
Meteor.reconnect();
UserPresence.setOnline();
readMessage.enable();
}, true);
}

@ -113,20 +113,6 @@ const mountPopover = (e, i, outerContext) => {
groups.push({ items: deleteItem });
}
if (typeof device !== 'undefined' && device.platform && device.platform.toLocaleLowerCase() === 'ios') {
groups.push({
items: [
{
icon: 'warning',
name: t('Report_Abuse'),
type: 'message-action',
id: 'report-abuse',
modifier: 'alert',
},
],
});
}
const config = {
columns: [
{
@ -579,11 +565,7 @@ Template.room.events({
return;
}
if ((typeof cordova !== 'undefined' && cordova !== null ? cordova.InAppBrowser : undefined) != null) {
cordova.InAppBrowser.open(e.target.href, '_system');
} else {
window.open(e.target.href);
}
window.open(e.target.href);
}
},

@ -1,4 +1,3 @@
import { Meteor } from 'meteor/meteor';
import { Session } from 'meteor/session';
import { settings } from 'meteor/rocketchat:settings';
@ -13,8 +12,6 @@ export const getAvatarUrlFromUsername = function(username) {
let path = pathPrefix;
if (cdnPrefix) {
path = cdnPrefix + pathPrefix;
} else if (Meteor.isCordova) {
path = Meteor.absoluteUrl().replace(/\/$/, '');
}
return `${ path }/avatar/${ encodeURIComponent(username) }?_dc=${ random }`;
};

@ -7,11 +7,7 @@ import { t } from 'meteor/rocketchat:utils';
Template.videoFlexTab.helpers({
openInNewWindow() {
if (Meteor.isCordova) {
return true;
} else {
return RocketChat.settings.get('Jitsi_Open_New_Window');
}
return RocketChat.settings.get('Jitsi_Open_New_Window');
},
});
@ -81,25 +77,18 @@ Template.videoFlexTab.onRendered(function() {
RocketChat.TabBar.updateButton('video', { class: 'red' });
if (RocketChat.settings.get('Jitsi_Open_New_Window') || Meteor.isCordova) {
if (RocketChat.settings.get('Jitsi_Open_New_Window')) {
Meteor.call('jitsi:updateTimeout', roomId);
timeOut = Meteor.setInterval(() => Meteor.call('jitsi:updateTimeout', roomId), 10 * 1000);
let newWindow = null;
if (Meteor.isCordova) {
newWindow = window.open(`${ (noSsl ? 'http://' : 'https://') + domain }/${ jitsiRoom }`, '_system');
closePanel();
clearInterval(timeOut);
} else {
newWindow = window.open(`${ (noSsl ? 'http://' : 'https://') + domain }/${ jitsiRoom }`, jitsiRoom);
const closeInterval = setInterval(() => {
if (newWindow.closed !== false) {
closePanel();
clearInterval(closeInterval);
clearInterval(timeOut);
}
}, 300);
}
const newWindow = window.open(`${ (noSsl ? 'http://' : 'https://') + domain }/${ jitsiRoom }`, jitsiRoom);
const closeInterval = setInterval(() => {
if (newWindow.closed !== false) {
closePanel();
clearInterval(closeInterval);
clearInterval(timeOut);
}
}, 300);
if (newWindow) {
newWindow.focus();
}

@ -5,11 +5,7 @@ import { popout } from 'meteor/rocketchat:ui';
Template.videoFlexTabBbb.helpers({
openInNewWindow() {
if (Meteor.isCordova) {
return true;
} else {
return RocketChat.settings.get('Jitsi_Open_New_Window');
}
return RocketChat.settings.get('Jitsi_Open_New_Window');
},
live() {

@ -19,7 +19,7 @@ const logger = new Logger('rocketchat:theme', {
WebApp.rawConnectHandlers.use(function(req, res, next) {
const path = req.url.split('?')[0];
const prefix = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || '';
if (path === `${ prefix }/__cordova/theme.css` || path === `${ prefix }/theme.css`) {
if (path === `${ prefix }/theme.css`) {
const css = RocketChat.theme.getCss();
const hash = crypto.createHash('sha1').update(css).digest('hex');
res.setHeader('Content-Type', 'text/css; charset=UTF-8');

@ -0,0 +1,7 @@
{
"globals": {
"globals" : true,
"language_names": true,
"TAPi18next" : false
}
}

@ -1,42 +0,0 @@
import _ from 'underscore';
import { Accounts } from 'meteor/accounts-base';
import { HTTP } from 'meteor/http';
function getIdentity(accessToken) {
try {
return HTTP.get('https://graph.facebook.com/me', {
params: {
access_token: accessToken,
},
}).data;
} catch (error) {
throw _.extend(new Error(`Failed to fetch identity from Facebook. ${ error.message }`), {
response: error.response,
});
}
}
Accounts.registerLoginHandler(function(loginRequest) {
if (!loginRequest.cordova) {
return;
}
loginRequest = loginRequest.authResponse;
const identity = getIdentity(loginRequest.accessToken);
const serviceData = {
accessToken: loginRequest.accessToken,
expiresAt: Date.now() + 1000 * loginRequest.expiresIn,
};
const whitelisted = ['id', 'email', 'name', 'first_name', 'last_name', 'link', 'username', 'gender', 'locale', 'age_range'];
const fields = _.pick(identity, whitelisted);
const options = {
profile: {},
};
_.extend(serviceData, fields);
_.extend(options.profile, fields);
return Accounts.updateOrCreateUserFromExternalService('facebook', serviceData, options);
});
Loading…
Cancel
Save