Move remaining client functions in components to actions (#5171)
Этот коммит содержится в:
коммит произвёл
George Goldberg
родитель
49c677f6b4
Коммит
d72547433a
404
webapp/actions/admin_actions.jsx
Обычный файл
404
webapp/actions/admin_actions.jsx
Обычный файл
@@ -0,0 +1,404 @@
|
|||||||
|
// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved.
|
||||||
|
// See License.txt for license information.
|
||||||
|
|
||||||
|
import Client from 'client/web_client.jsx';
|
||||||
|
import * as AsyncClient from 'utils/async_client.jsx';
|
||||||
|
import {browserHistory} from 'react-router/es6';
|
||||||
|
|
||||||
|
export function revokeSession(altId, success, error) {
|
||||||
|
Client.revokeSession(altId,
|
||||||
|
() => {
|
||||||
|
AsyncClient.getSessions();
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function saveConfig(config, success, error) {
|
||||||
|
Client.saveConfig(
|
||||||
|
config,
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function reloadConfig(success, error) {
|
||||||
|
Client.reloadConfig(
|
||||||
|
() => {
|
||||||
|
AsyncClient.getConfig();
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function adminResetMfa(userId, success, error) {
|
||||||
|
Client.adminResetMfa(
|
||||||
|
userId,
|
||||||
|
() => {
|
||||||
|
AsyncClient.getUser(userId);
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getClusterStatus(success, error) {
|
||||||
|
Client.getClusterStatus(
|
||||||
|
(data) => {
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
AsyncClient.dispatchError(err, 'getClusterStatus');
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function saveComplianceReports(job, success, error) {
|
||||||
|
Client.saveComplianceReports(
|
||||||
|
job,
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function testEmail(config, success, error) {
|
||||||
|
Client.testEmail(
|
||||||
|
config,
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ldapTest(success, error) {
|
||||||
|
Client.ldapTest(
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function invalidateAllCaches(success, error) {
|
||||||
|
Client.invalidateAllCaches(
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function recycleDatabaseConnection(success, error) {
|
||||||
|
Client.recycleDatabaseConnection(
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function adminResetPassword(userId, password, success, error) {
|
||||||
|
Client.adminResetPassword(
|
||||||
|
userId,
|
||||||
|
password,
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function samlCertificateStatus(success, error) {
|
||||||
|
Client.samlCertificateStatus(
|
||||||
|
(data) => {
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ldapSyncNow(success, error) {
|
||||||
|
Client.ldapSyncNow(
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getOAuthAppInfo(clientId, success, error) {
|
||||||
|
Client.getOAuthAppInfo(
|
||||||
|
clientId,
|
||||||
|
(data) => {
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function allowOAuth2(params, success, error) {
|
||||||
|
const responseType = params.response_type;
|
||||||
|
const clientId = params.client_id;
|
||||||
|
const redirectUri = params.redirect_uri;
|
||||||
|
const state = params.state;
|
||||||
|
const scope = params.scope;
|
||||||
|
|
||||||
|
Client.allowOAuth2(responseType, clientId, redirectUri, state, scope,
|
||||||
|
(data) => {
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function emailToLdap(loginId, password, token, ldapId, ldapPassword, success, error) {
|
||||||
|
Client.emailToLdap(
|
||||||
|
loginId,
|
||||||
|
password,
|
||||||
|
token,
|
||||||
|
ldapId,
|
||||||
|
ldapPassword,
|
||||||
|
(data) => {
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function emailToOAuth(loginId, password, token, newType, success, error) {
|
||||||
|
Client.emailToOAuth(
|
||||||
|
loginId,
|
||||||
|
password,
|
||||||
|
token,
|
||||||
|
newType,
|
||||||
|
(data) => {
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function oauthToEmail(email, password, success, error) {
|
||||||
|
Client.oauthToEmail(
|
||||||
|
email,
|
||||||
|
password,
|
||||||
|
(data) => {
|
||||||
|
if (data.follow_link) {
|
||||||
|
browserHistory.push(data.follow_link);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function regenerateOAuthAppSecret(oauthAppId, success, error) {
|
||||||
|
Client.regenerateOAuthAppSecret(
|
||||||
|
oauthAppId,
|
||||||
|
(data) => {
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function uploadBrandImage(brandImage, success, error) {
|
||||||
|
Client.uploadBrandImage(
|
||||||
|
brandImage,
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function uploadLicenseFile(file, success, error) {
|
||||||
|
Client.uploadLicenseFile(
|
||||||
|
file,
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function removeLicenseFile(success, error) {
|
||||||
|
Client.removeLicenseFile(
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function uploadCertificateFile(certificateFile, success, error) {
|
||||||
|
Client.uploadCertificateFile(
|
||||||
|
certificateFile,
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function removeCertificateFile(certificateId, success, error) {
|
||||||
|
Client.removeCertificateFile(
|
||||||
|
certificateId,
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -417,3 +417,30 @@ export function deletePost(channelId, post, success, error) {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function performSearch(terms, isMentionSearch, success, error) {
|
||||||
|
Client.search(
|
||||||
|
terms,
|
||||||
|
isMentionSearch,
|
||||||
|
(data) => {
|
||||||
|
AppDispatcher.handleServerAction({
|
||||||
|
type: ActionTypes.RECEIVED_SEARCH,
|
||||||
|
results: data,
|
||||||
|
is_mention_search: isMentionSearch
|
||||||
|
});
|
||||||
|
|
||||||
|
loadProfilesForPosts(data.posts);
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
AsyncClient.dispatchError(err, 'search');
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -60,7 +60,10 @@ export function removeUserFromTeam(teamId, userId, success, error) {
|
|||||||
userId,
|
userId,
|
||||||
() => {
|
() => {
|
||||||
TeamStore.removeMemberInTeam(teamId, userId);
|
TeamStore.removeMemberInTeam(teamId, userId);
|
||||||
|
UserStore.removeProfileFromTeam(teamId, userId);
|
||||||
|
UserStore.emitInTeamChange();
|
||||||
AsyncClient.getUser(userId);
|
AsyncClient.getUser(userId);
|
||||||
|
AsyncClient.getTeamStats(teamId);
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
success();
|
success();
|
||||||
|
|||||||
@@ -4,10 +4,12 @@
|
|||||||
import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
|
import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
|
||||||
|
|
||||||
import PreferenceStore from 'stores/preference_store.jsx';
|
import PreferenceStore from 'stores/preference_store.jsx';
|
||||||
|
import BrowserStore from 'stores/browser_store.jsx';
|
||||||
import TeamStore from 'stores/team_store.jsx';
|
import TeamStore from 'stores/team_store.jsx';
|
||||||
import UserStore from 'stores/user_store.jsx';
|
import UserStore from 'stores/user_store.jsx';
|
||||||
import ChannelStore from 'stores/channel_store.jsx';
|
import ChannelStore from 'stores/channel_store.jsx';
|
||||||
|
|
||||||
|
import * as GlobalActions from 'actions/global_actions.jsx';
|
||||||
import {getChannelMembersForUserIds} from 'actions/channel_actions.jsx';
|
import {getChannelMembersForUserIds} from 'actions/channel_actions.jsx';
|
||||||
import {loadStatusesForProfilesList, loadStatusesForProfilesMap} from 'actions/status_actions.jsx';
|
import {loadStatusesForProfilesList, loadStatusesForProfilesMap} from 'actions/status_actions.jsx';
|
||||||
|
|
||||||
@@ -17,7 +19,6 @@ import * as AsyncClient from 'utils/async_client.jsx';
|
|||||||
import Client from 'client/web_client.jsx';
|
import Client from 'client/web_client.jsx';
|
||||||
|
|
||||||
import {ActionTypes, Preferences} from 'utils/constants.jsx';
|
import {ActionTypes, Preferences} from 'utils/constants.jsx';
|
||||||
|
|
||||||
import {browserHistory} from 'react-router/es6';
|
import {browserHistory} from 'react-router/es6';
|
||||||
|
|
||||||
export function switchFromLdapToEmail(email, password, token, ldapPassword, onSuccess, onError) {
|
export function switchFromLdapToEmail(email, password, token, ldapPassword, onSuccess, onError) {
|
||||||
@@ -512,6 +513,25 @@ export function activateMfa(code, success, error) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function deactivateMfa(success, error) {
|
||||||
|
Client.updateMfa(
|
||||||
|
'',
|
||||||
|
false,
|
||||||
|
() => {
|
||||||
|
AsyncClient.getMe();
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export function checkMfa(loginId, success, error) {
|
export function checkMfa(loginId, success, error) {
|
||||||
if (global.window.mm_config.EnableMultifactorAuthentication !== 'true') {
|
if (global.window.mm_config.EnableMultifactorAuthentication !== 'true') {
|
||||||
success(false);
|
success(false);
|
||||||
@@ -616,3 +636,138 @@ export function resendVerification(email, success, error) {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function loginById(userId, password, mfaToken, hash, success, error) {
|
||||||
|
Client.loginById(
|
||||||
|
userId,
|
||||||
|
password,
|
||||||
|
mfaToken,
|
||||||
|
hash,
|
||||||
|
() => {
|
||||||
|
if (hash > 0) {
|
||||||
|
BrowserStore.setGlobalItem(hash, JSON.stringify({usedBefore: true}));
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobalActions.emitInitialLoad(
|
||||||
|
() => {
|
||||||
|
const query = this.props.location.query;
|
||||||
|
if (query.redirect_to) {
|
||||||
|
browserHistory.push(query.redirect_to);
|
||||||
|
} else {
|
||||||
|
GlobalActions.redirectUserToDefaultTeam();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createUserWithInvite(user, data, emailHash, inviteId, success, error) {
|
||||||
|
Client.createUserWithInvite(
|
||||||
|
user,
|
||||||
|
data,
|
||||||
|
emailHash,
|
||||||
|
inviteId,
|
||||||
|
(response) => {
|
||||||
|
if (success) {
|
||||||
|
success(response);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function webLogin(loginId, password, token, success, error) {
|
||||||
|
Client.webLogin(
|
||||||
|
loginId,
|
||||||
|
password,
|
||||||
|
token,
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function webLoginByLdap(loginId, password, token, success, error) {
|
||||||
|
Client.webLoginByLdap(
|
||||||
|
loginId,
|
||||||
|
password,
|
||||||
|
token,
|
||||||
|
(data) => {
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getAuthorizedApps(success, error) {
|
||||||
|
Client.getAuthorizedApps(
|
||||||
|
(authorizedApps) => {
|
||||||
|
if (success) {
|
||||||
|
success(authorizedApps);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function deauthorizeOAuthApp(appId, success, error) {
|
||||||
|
Client.deauthorizeOAuthApp(
|
||||||
|
appId,
|
||||||
|
() => {
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function uploadProfileImage(userPicture, success, error) {
|
||||||
|
Client.uploadProfileImage(
|
||||||
|
userPicture,
|
||||||
|
() => {
|
||||||
|
AsyncClient.getMe();
|
||||||
|
if (success) {
|
||||||
|
success();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
if (error) {
|
||||||
|
error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
|
import AppDispatcher from 'dispatcher/app_dispatcher.jsx';
|
||||||
import {WebrtcActionTypes} from 'utils/constants.jsx';
|
import {WebrtcActionTypes} from 'utils/constants.jsx';
|
||||||
|
|
||||||
|
import Client from 'client/web_client.jsx';
|
||||||
|
|
||||||
export function initWebrtc(userId, isCalling) {
|
export function initWebrtc(userId, isCalling) {
|
||||||
AppDispatcher.handleServerAction({
|
AppDispatcher.handleServerAction({
|
||||||
type: WebrtcActionTypes.INITIALIZE,
|
type: WebrtcActionTypes.INITIALIZE,
|
||||||
@@ -18,3 +20,17 @@ export function handle(message) {
|
|||||||
message
|
message
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function webrtcToken(success, error) {
|
||||||
|
Client.webrtcToken(
|
||||||
|
(data) => {
|
||||||
|
if (success) {
|
||||||
|
success(data);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
if (error) {
|
||||||
|
error();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import LoadingScreen from './loading_screen.jsx';
|
|||||||
|
|
||||||
import UserStore from 'stores/user_store.jsx';
|
import UserStore from 'stores/user_store.jsx';
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as AsyncClient from 'utils/async_client.jsx';
|
import * as AsyncClient from 'utils/async_client.jsx';
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
@@ -14,6 +13,8 @@ import React from 'react';
|
|||||||
import {Modal} from 'react-bootstrap';
|
import {Modal} from 'react-bootstrap';
|
||||||
import {FormattedMessage, FormattedTime, FormattedDate} from 'react-intl';
|
import {FormattedMessage, FormattedTime, FormattedDate} from 'react-intl';
|
||||||
|
|
||||||
|
import {revokeSession} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class ActivityLogModal extends React.Component {
|
export default class ActivityLogModal extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
@@ -46,10 +47,8 @@ export default class ActivityLogModal extends React.Component {
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
modalContent.removeClass('animation--highlight');
|
modalContent.removeClass('animation--highlight');
|
||||||
}, 1500);
|
}, 1500);
|
||||||
Client.revokeSession(altId,
|
revokeSession(altId,
|
||||||
() => {
|
null,
|
||||||
AsyncClient.getSessions();
|
|
||||||
},
|
|
||||||
(err) => {
|
(err) => {
|
||||||
const state = this.getStateFromStores();
|
const state = this.getStateFromStores();
|
||||||
state.serverError = err;
|
state.serverError = err;
|
||||||
|
|||||||
@@ -4,11 +4,12 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import * as AsyncClient from 'utils/async_client.jsx';
|
import * as AsyncClient from 'utils/async_client.jsx';
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
|
|
||||||
import FormError from 'components/form_error.jsx';
|
import FormError from 'components/form_error.jsx';
|
||||||
import SaveButton from 'components/admin_console/save_button.jsx';
|
import SaveButton from 'components/admin_console/save_button.jsx';
|
||||||
|
|
||||||
|
import {saveConfig} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class AdminSettings extends React.Component {
|
export default class AdminSettings extends React.Component {
|
||||||
static get propTypes() {
|
static get propTypes() {
|
||||||
return {
|
return {
|
||||||
@@ -53,7 +54,7 @@ export default class AdminSettings extends React.Component {
|
|||||||
let config = JSON.parse(JSON.stringify(this.props.config));
|
let config = JSON.parse(JSON.stringify(this.props.config));
|
||||||
config = this.getConfigFromState(config);
|
config = this.getConfigFromState(config);
|
||||||
|
|
||||||
Client.saveConfig(
|
saveConfig(
|
||||||
config,
|
config,
|
||||||
() => {
|
() => {
|
||||||
AsyncClient.getConfig((savedConfig) => {
|
AsyncClient.getConfig((savedConfig) => {
|
||||||
|
|||||||
@@ -6,12 +6,10 @@ import ConfirmModal from '../confirm_modal.jsx';
|
|||||||
import UserStore from 'stores/user_store.jsx';
|
import UserStore from 'stores/user_store.jsx';
|
||||||
import TeamStore from 'stores/team_store.jsx';
|
import TeamStore from 'stores/team_store.jsx';
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import Constants from 'utils/constants.jsx';
|
import Constants from 'utils/constants.jsx';
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
import * as AsyncClient from 'utils/async_client.jsx';
|
|
||||||
import {updateUserRoles, updateActive} from 'actions/user_actions.jsx';
|
import {updateUserRoles, updateActive} from 'actions/user_actions.jsx';
|
||||||
import {updateTeamMemberRoles} from 'actions/team_actions.jsx';
|
import {updateTeamMemberRoles, removeUserFromTeam, adminResetMfa} from 'actions/team_actions.jsx';
|
||||||
|
|
||||||
import {FormattedMessage} from 'react-intl';
|
import {FormattedMessage} from 'react-intl';
|
||||||
|
|
||||||
@@ -75,14 +73,10 @@ export default class AdminTeamMembersDropdown extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handleRemoveFromTeam() {
|
handleRemoveFromTeam() {
|
||||||
Client.removeUserFromTeam(
|
removeUserFromTeam(
|
||||||
this.props.teamMember.team_id,
|
this.props.teamMember.team_id,
|
||||||
this.props.user.id,
|
this.props.user.id,
|
||||||
() => {
|
null,
|
||||||
AsyncClient.getTeamStats(this.props.teamMember.team_id);
|
|
||||||
UserStore.removeProfileFromTeam(this.props.teamMember.team_id, this.props.user.id);
|
|
||||||
UserStore.emitInTeamChange();
|
|
||||||
},
|
|
||||||
(err) => {
|
(err) => {
|
||||||
this.setState({serverError: err.message});
|
this.setState({serverError: err.message});
|
||||||
}
|
}
|
||||||
@@ -150,10 +144,8 @@ export default class AdminTeamMembersDropdown extends React.Component {
|
|||||||
handleResetMfa(e) {
|
handleResetMfa(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
Client.adminResetMfa(this.props.user.id,
|
adminResetMfa(this.props.user.id,
|
||||||
() => {
|
null,
|
||||||
AsyncClient.getUser(this.props.user.id);
|
|
||||||
},
|
|
||||||
(err) => {
|
(err) => {
|
||||||
this.setState({serverError: err.message});
|
this.setState({serverError: err.message});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import ReactDOM from 'react-dom';
|
|||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
import Client from 'client/web_client.jsx';
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
import {uploadBrandImage} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
import FormError from 'components/form_error.jsx';
|
import FormError from 'components/form_error.jsx';
|
||||||
import {FormattedHTMLMessage, FormattedMessage} from 'react-intl';
|
import {FormattedHTMLMessage, FormattedMessage} from 'react-intl';
|
||||||
@@ -81,7 +82,7 @@ export default class BrandImageSetting extends React.Component {
|
|||||||
error: ''
|
error: ''
|
||||||
});
|
});
|
||||||
|
|
||||||
Client.uploadBrandImage(
|
uploadBrandImage(
|
||||||
this.state.brandImage,
|
this.state.brandImage,
|
||||||
() => {
|
() => {
|
||||||
$(ReactDOM.findDOMNode(this.refs.upload)).button('complete');
|
$(ReactDOM.findDOMNode(this.refs.upload)).button('complete');
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ClusterTable from './cluster_table.jsx';
|
import ClusterTable from './cluster_table.jsx';
|
||||||
import LoadingScreen from '../loading_screen.jsx';
|
import LoadingScreen from '../loading_screen.jsx';
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as AsyncClient from 'utils/async_client.jsx';
|
import {getClusterStatus} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class ClusterTableContainer extends React.Component {
|
export default class ClusterTableContainer extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@@ -19,15 +19,13 @@ export default class ClusterTableContainer extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
load() {
|
load() {
|
||||||
Client.getClusterStatus(
|
getClusterStatus(
|
||||||
(data) => {
|
(data) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
clusterInfos: data
|
clusterInfos: data
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
(err) => {
|
null
|
||||||
AsyncClient.dispatchError(err, 'getClusterStatus');
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import UserStore from '../../stores/user_store.jsx';
|
|||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
import Client from 'client/web_client.jsx';
|
||||||
import * as AsyncClient from '../../utils/async_client.jsx';
|
import * as AsyncClient from '../../utils/async_client.jsx';
|
||||||
|
import {saveComplianceReports} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
import {FormattedMessage, FormattedDate, FormattedTime} from 'react-intl';
|
import {FormattedMessage, FormattedDate, FormattedTime} from 'react-intl';
|
||||||
|
|
||||||
@@ -72,7 +73,7 @@ export default class ComplianceReports extends React.Component {
|
|||||||
job.start_at = Date.parse(ReactDOM.findDOMNode(this.refs.from).value);
|
job.start_at = Date.parse(ReactDOM.findDOMNode(this.refs.from).value);
|
||||||
job.end_at = Date.parse(ReactDOM.findDOMNode(this.refs.to).value);
|
job.end_at = Date.parse(ReactDOM.findDOMNode(this.refs.to).value);
|
||||||
|
|
||||||
Client.saveComplianceReports(
|
saveComplianceReports(
|
||||||
job,
|
job,
|
||||||
() => {
|
() => {
|
||||||
ReactDOM.findDOMNode(this.refs.emails).value = '';
|
ReactDOM.findDOMNode(this.refs.emails).value = '';
|
||||||
|
|||||||
@@ -3,11 +3,12 @@
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
import {FormattedMessage} from 'react-intl';
|
import {FormattedMessage} from 'react-intl';
|
||||||
|
|
||||||
|
import {testEmail} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class EmailConnectionTestButton extends React.Component {
|
export default class EmailConnectionTestButton extends React.Component {
|
||||||
static get propTypes() {
|
static get propTypes() {
|
||||||
return {
|
return {
|
||||||
@@ -41,7 +42,7 @@ export default class EmailConnectionTestButton extends React.Component {
|
|||||||
const config = JSON.parse(JSON.stringify(this.props.config));
|
const config = JSON.parse(JSON.stringify(this.props.config));
|
||||||
this.props.getConfigFromState(config);
|
this.props.getConfigFromState(config);
|
||||||
|
|
||||||
Client.testEmail(
|
testEmail(
|
||||||
config,
|
config,
|
||||||
() => {
|
() => {
|
||||||
this.setState({
|
this.setState({
|
||||||
|
|||||||
@@ -3,11 +3,12 @@
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||||
|
|
||||||
|
import {ldapTest} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class LdapTestButton extends React.Component {
|
export default class LdapTestButton extends React.Component {
|
||||||
static get propTypes() {
|
static get propTypes() {
|
||||||
return {
|
return {
|
||||||
@@ -38,7 +39,7 @@ export default class LdapTestButton extends React.Component {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const doRequest = () => { //eslint-disable-line func-style
|
const doRequest = () => { //eslint-disable-line func-style
|
||||||
Client.ldapTest(
|
ldapTest(
|
||||||
() => {
|
() => {
|
||||||
this.setState({
|
this.setState({
|
||||||
buisy: false,
|
buisy: false,
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
|
import {uploadLicenseFile, removeLicenseFile} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
import {injectIntl, intlShape, defineMessages, FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
import {injectIntl, intlShape, defineMessages, FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||||
|
|
||||||
@@ -54,7 +55,8 @@ class LicenseSettings extends React.Component {
|
|||||||
|
|
||||||
$('#upload-button').button('loading');
|
$('#upload-button').button('loading');
|
||||||
|
|
||||||
Client.uploadLicenseFile(file,
|
uploadLicenseFile(
|
||||||
|
file,
|
||||||
() => {
|
() => {
|
||||||
Utils.clearFileInput(element[0]);
|
Utils.clearFileInput(element[0]);
|
||||||
$('#upload-button').button('reset');
|
$('#upload-button').button('reset');
|
||||||
@@ -74,7 +76,7 @@ class LicenseSettings extends React.Component {
|
|||||||
|
|
||||||
$('#remove-button').button('loading');
|
$('#remove-button').button('loading');
|
||||||
|
|
||||||
Client.removeLicenseFile(
|
removeLicenseFile(
|
||||||
() => {
|
() => {
|
||||||
$('#remove-button').button('reset');
|
$('#remove-button').button('reset');
|
||||||
this.setState({fileSelected: false, fileName: null, serverError: null});
|
this.setState({fileSelected: false, fileName: null, serverError: null});
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
|
|
||||||
import {FormattedMessage} from 'react-intl';
|
import {FormattedMessage} from 'react-intl';
|
||||||
|
|
||||||
|
import {invalidateAllCaches} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class PurgeCachesButton extends React.Component {
|
export default class PurgeCachesButton extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
@@ -27,7 +27,7 @@ export default class PurgeCachesButton extends React.Component {
|
|||||||
fail: null
|
fail: null
|
||||||
});
|
});
|
||||||
|
|
||||||
Client.invalidateAllCaches(
|
invalidateAllCaches(
|
||||||
() => {
|
() => {
|
||||||
this.setState({
|
this.setState({
|
||||||
loading: false
|
loading: false
|
||||||
|
|||||||
@@ -3,11 +3,12 @@
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||||
|
|
||||||
|
import {recycleDatabaseConnection} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class RecycleDbButton extends React.Component {
|
export default class RecycleDbButton extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
@@ -28,7 +29,7 @@ export default class RecycleDbButton extends React.Component {
|
|||||||
fail: null
|
fail: null
|
||||||
});
|
});
|
||||||
|
|
||||||
Client.recycleDatabaseConnection(
|
recycleDatabaseConnection(
|
||||||
() => {
|
() => {
|
||||||
this.setState({
|
this.setState({
|
||||||
loading: false
|
loading: false
|
||||||
|
|||||||
@@ -3,13 +3,12 @@
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
import {getConfig} from 'utils/async_client.jsx';
|
|
||||||
|
|
||||||
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||||
|
|
||||||
|
import {reloadConfig} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class ReloadConfigButton extends React.Component {
|
export default class ReloadConfigButton extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
@@ -30,9 +29,8 @@ export default class ReloadConfigButton extends React.Component {
|
|||||||
fail: null
|
fail: null
|
||||||
});
|
});
|
||||||
|
|
||||||
Client.reloadConfig(
|
reloadConfig(
|
||||||
() => {
|
() => {
|
||||||
getConfig();
|
|
||||||
this.setState({
|
this.setState({
|
||||||
loading: false
|
loading: false
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
|
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
|
||||||
// See License.txt for license information.
|
// See License.txt for license information.
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
import {Modal} from 'react-bootstrap';
|
import {Modal} from 'react-bootstrap';
|
||||||
|
|
||||||
import {injectIntl, intlShape, FormattedMessage} from 'react-intl';
|
import {injectIntl, intlShape, FormattedMessage} from 'react-intl';
|
||||||
|
|
||||||
|
import {adminResetPassword} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
class ResetPasswordModal extends React.Component {
|
class ResetPasswordModal extends React.Component {
|
||||||
@@ -32,7 +33,7 @@ class ResetPasswordModal extends React.Component {
|
|||||||
}
|
}
|
||||||
this.setState({serverError: null});
|
this.setState({serverError: null});
|
||||||
|
|
||||||
Client.adminResetPassword(
|
adminResetPassword(
|
||||||
this.props.user.id,
|
this.props.user.id,
|
||||||
password,
|
password,
|
||||||
() => {
|
() => {
|
||||||
|
|||||||
@@ -12,9 +12,10 @@ import RemoveFileSetting from './remove_file_setting.jsx';
|
|||||||
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||||
import SettingsGroup from './settings_group.jsx';
|
import SettingsGroup from './settings_group.jsx';
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
|
import {samlCertificateStatus, uploadCertificateFile, removeCertificateFile} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class SamlSettings extends AdminSettings {
|
export default class SamlSettings extends AdminSettings {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
@@ -73,7 +74,7 @@ export default class SamlSettings extends AdminSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
Client.samlCertificateStatus(
|
samlCertificateStatus(
|
||||||
(data) => {
|
(data) => {
|
||||||
const files = {};
|
const files = {};
|
||||||
if (!data.IdpCertificateFile) {
|
if (!data.IdpCertificateFile) {
|
||||||
@@ -93,7 +94,7 @@ export default class SamlSettings extends AdminSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uploadCertificate(id, file, callback) {
|
uploadCertificate(id, file, callback) {
|
||||||
Client.uploadCertificateFile(
|
uploadCertificateFile(
|
||||||
file,
|
file,
|
||||||
() => {
|
() => {
|
||||||
const fileName = file.name;
|
const fileName = file.name;
|
||||||
@@ -112,7 +113,7 @@ export default class SamlSettings extends AdminSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
removeCertificate(id, callback) {
|
removeCertificate(id, callback) {
|
||||||
Client.removeCertificateFile(
|
removeCertificateFile(
|
||||||
this.state[id],
|
this.state[id],
|
||||||
() => {
|
() => {
|
||||||
this.handleChange(id, '');
|
this.handleChange(id, '');
|
||||||
|
|||||||
@@ -3,11 +3,12 @@
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||||
|
|
||||||
|
import {ldapSyncNow} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class SyncNowButton extends React.Component {
|
export default class SyncNowButton extends React.Component {
|
||||||
static get propTypes() {
|
static get propTypes() {
|
||||||
return {
|
return {
|
||||||
@@ -33,7 +34,7 @@ export default class SyncNowButton extends React.Component {
|
|||||||
fail: null
|
fail: null
|
||||||
});
|
});
|
||||||
|
|
||||||
Client.ldapSyncNow(
|
ldapSyncNow(
|
||||||
() => {
|
() => {
|
||||||
this.setState({
|
this.setState({
|
||||||
buisy: false
|
buisy: false
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
|
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
|
||||||
// See License.txt for license information.
|
// See License.txt for license information.
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import FormError from 'components/form_error.jsx';
|
import FormError from 'components/form_error.jsx';
|
||||||
|
|
||||||
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||||
@@ -9,6 +8,8 @@ import React from 'react';
|
|||||||
|
|
||||||
import icon50 from 'images/icon50x50.png';
|
import icon50 from 'images/icon50x50.png';
|
||||||
|
|
||||||
|
import {getOAuthAppInfo, allowOAuth2} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class Authorize extends React.Component {
|
export default class Authorize extends React.Component {
|
||||||
static get propTypes() {
|
static get propTypes() {
|
||||||
return {
|
return {
|
||||||
@@ -27,7 +28,7 @@ export default class Authorize extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
Client.getOAuthAppInfo(
|
getOAuthAppInfo(
|
||||||
this.props.location.query.client_id,
|
this.props.location.query.client_id,
|
||||||
(app) => {
|
(app) => {
|
||||||
this.setState({app});
|
this.setState({app});
|
||||||
@@ -46,7 +47,7 @@ export default class Authorize extends React.Component {
|
|||||||
handleAllow() {
|
handleAllow() {
|
||||||
const params = this.props.location.query;
|
const params = this.props.location.query;
|
||||||
|
|
||||||
Client.allowOAuth2(params.response_type, params.client_id, params.redirect_uri, params.state, params.scope,
|
allowOAuth2(params,
|
||||||
(data) => {
|
(data) => {
|
||||||
if (data.redirect) {
|
if (data.redirect) {
|
||||||
window.location.href = data.redirect;
|
window.location.href = data.redirect;
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
import LoginMfa from 'components/login/components/login_mfa.jsx';
|
import LoginMfa from 'components/login/components/login_mfa.jsx';
|
||||||
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
|
|
||||||
import {checkMfa} from 'actions/user_actions.jsx';
|
import {checkMfa} from 'actions/user_actions.jsx';
|
||||||
|
import {emailToLdap} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {FormattedMessage} from 'react-intl';
|
import {FormattedMessage} from 'react-intl';
|
||||||
@@ -79,7 +79,7 @@ export default class EmailToLDAP extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
submit(loginId, password, token, ldapId, ldapPassword) {
|
submit(loginId, password, token, ldapId, ldapPassword) {
|
||||||
Client.emailToLdap(
|
emailToLdap(
|
||||||
loginId,
|
loginId,
|
||||||
password,
|
password,
|
||||||
token,
|
token,
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
import LoginMfa from 'components/login/components/login_mfa.jsx';
|
import LoginMfa from 'components/login/components/login_mfa.jsx';
|
||||||
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import Constants from 'utils/constants.jsx';
|
import Constants from 'utils/constants.jsx';
|
||||||
|
|
||||||
import {checkMfa} from 'actions/user_actions.jsx';
|
import {checkMfa} from 'actions/user_actions.jsx';
|
||||||
|
import {emailToOAuth} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
@@ -55,7 +55,7 @@ export default class EmailToOAuth extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
submit(loginId, password, token) {
|
submit(loginId, password, token) {
|
||||||
Client.emailToOAuth(
|
emailToOAuth(
|
||||||
loginId,
|
loginId,
|
||||||
password,
|
password,
|
||||||
token,
|
token,
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
// See License.txt for license information.
|
// See License.txt for license information.
|
||||||
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import Constants from 'utils/constants.jsx';
|
import Constants from 'utils/constants.jsx';
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
import {FormattedMessage} from 'react-intl';
|
import {FormattedMessage} from 'react-intl';
|
||||||
import {browserHistory} from 'react-router/es6';
|
|
||||||
|
import {oauthToEmail} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
export default class OAuthToEmail extends React.Component {
|
export default class OAuthToEmail extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@@ -48,14 +48,10 @@ export default class OAuthToEmail extends React.Component {
|
|||||||
state.error = null;
|
state.error = null;
|
||||||
this.setState(state);
|
this.setState(state);
|
||||||
|
|
||||||
Client.oauthToEmail(
|
oauthToEmail(
|
||||||
this.props.email,
|
this.props.email,
|
||||||
password,
|
password,
|
||||||
(data) => {
|
null,
|
||||||
if (data.follow_link) {
|
|
||||||
browserHistory.push(data.follow_link);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
(err) => {
|
(err) => {
|
||||||
this.setState({error: err.message});
|
this.setState({error: err.message});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ import React from 'react';
|
|||||||
|
|
||||||
import FormError from 'components/form_error.jsx';
|
import FormError from 'components/form_error.jsx';
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||||
|
import {regenerateOAuthAppSecret} from 'actions/admin_actions.jsx';
|
||||||
|
|
||||||
const FAKE_SECRET = '***************';
|
const FAKE_SECRET = '***************';
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ export default class InstalledOAuthApp extends React.Component {
|
|||||||
handleRegenerate(e) {
|
handleRegenerate(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
Client.regenerateOAuthAppSecret(
|
regenerateOAuthAppSecret(
|
||||||
this.props.oauthApp.id,
|
this.props.oauthApp.id,
|
||||||
(data) => {
|
(data) => {
|
||||||
this.props.oauthApp.client_secret = data.client_secret;
|
this.props.oauthApp.client_secret = data.client_secret;
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import FormError from 'components/form_error.jsx';
|
|||||||
|
|
||||||
import * as GlobalActions from 'actions/global_actions.jsx';
|
import * as GlobalActions from 'actions/global_actions.jsx';
|
||||||
import {addUserToTeamFromInvite} from 'actions/team_actions.jsx';
|
import {addUserToTeamFromInvite} from 'actions/team_actions.jsx';
|
||||||
|
import {checkMfa, webLogin} from 'actions/user_actions.jsx';
|
||||||
import BrowserStore from 'stores/browser_store.jsx';
|
import BrowserStore from 'stores/browser_store.jsx';
|
||||||
import UserStore from 'stores/user_store.jsx';
|
import UserStore from 'stores/user_store.jsx';
|
||||||
|
|
||||||
@@ -119,29 +120,25 @@ export default class LoginController extends React.Component {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (global.window.mm_config.EnableMultifactorAuthentication === 'true') {
|
checkMfa(
|
||||||
Client.checkMfa(
|
loginId,
|
||||||
loginId,
|
(data) => {
|
||||||
(data) => {
|
if (data && data.mfa_required === 'true') {
|
||||||
if (data.mfa_required === 'true') {
|
this.setState({showMfa: true});
|
||||||
this.setState({showMfa: true});
|
} else {
|
||||||
} else {
|
this.submit(loginId, password, '');
|
||||||
this.submit(loginId, password, '');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
(err) => {
|
|
||||||
this.setState({serverError: err.message});
|
|
||||||
}
|
}
|
||||||
);
|
},
|
||||||
} else {
|
(err) => {
|
||||||
this.submit(loginId, password, '');
|
this.setState({serverError: err.message});
|
||||||
}
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
submit(loginId, password, token) {
|
submit(loginId, password, token) {
|
||||||
this.setState({serverError: null, loading: true});
|
this.setState({serverError: null, loading: true});
|
||||||
|
|
||||||
Client.webLogin(
|
webLogin(
|
||||||
loginId,
|
loginId,
|
||||||
password,
|
password,
|
||||||
token,
|
token,
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
// See License.txt for license information.
|
// See License.txt for license information.
|
||||||
|
|
||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as AsyncClient from 'utils/async_client.jsx';
|
|
||||||
import * as GlobalActions from 'actions/global_actions.jsx';
|
import * as GlobalActions from 'actions/global_actions.jsx';
|
||||||
import SearchStore from 'stores/search_store.jsx';
|
import SearchStore from 'stores/search_store.jsx';
|
||||||
import UserStore from 'stores/user_store.jsx';
|
import UserStore from 'stores/user_store.jsx';
|
||||||
@@ -14,7 +12,7 @@ import SearchSuggestionList from './suggestion/search_suggestion_list.jsx';
|
|||||||
import SearchUserProvider from './suggestion/search_user_provider.jsx';
|
import SearchUserProvider from './suggestion/search_user_provider.jsx';
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
import Constants from 'utils/constants.jsx';
|
import Constants from 'utils/constants.jsx';
|
||||||
import {loadProfilesForPosts, getFlaggedPosts} from 'actions/post_actions.jsx';
|
import {getFlaggedPosts, performSearch} from 'actions/post_actions.jsx';
|
||||||
|
|
||||||
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||||
|
|
||||||
@@ -118,26 +116,18 @@ export default class SearchBar extends React.Component {
|
|||||||
if (terms.length) {
|
if (terms.length) {
|
||||||
this.setState({isSearching: true});
|
this.setState({isSearching: true});
|
||||||
|
|
||||||
Client.search(
|
performSearch(
|
||||||
terms,
|
terms,
|
||||||
isMentionSearch,
|
isMentionSearch,
|
||||||
(data) => {
|
() => {
|
||||||
this.setState({isSearching: false});
|
this.setState({isSearching: false});
|
||||||
|
|
||||||
if (Utils.isMobile() && this.search) {
|
if (Utils.isMobile() && this.search) {
|
||||||
this.search.value = '';
|
this.search.value = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
AppDispatcher.handleServerAction({
|
|
||||||
type: ActionTypes.RECEIVED_SEARCH,
|
|
||||||
results: data,
|
|
||||||
is_mention_search: isMentionSearch
|
|
||||||
});
|
|
||||||
|
|
||||||
loadProfilesForPosts(data.posts);
|
|
||||||
},
|
},
|
||||||
(err) => {
|
() => {
|
||||||
this.setState({isSearching: false});
|
this.setState({isSearching: false});
|
||||||
AsyncClient.dispatchError(err, 'search');
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,9 @@ import LoadingScreen from 'components/loading_screen.jsx';
|
|||||||
import * as GlobalActions from 'actions/global_actions.jsx';
|
import * as GlobalActions from 'actions/global_actions.jsx';
|
||||||
import {track} from 'actions/analytics_actions.jsx';
|
import {track} from 'actions/analytics_actions.jsx';
|
||||||
import {getInviteInfo} from 'actions/team_actions.jsx';
|
import {getInviteInfo} from 'actions/team_actions.jsx';
|
||||||
|
import {loginById, createUserWithInvite} from 'actions/user_actions.jsx';
|
||||||
import BrowserStore from 'stores/browser_store.jsx';
|
|
||||||
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import Constants from 'utils/constants.jsx';
|
import Constants from 'utils/constants.jsx';
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
@@ -119,26 +117,12 @@ export default class SignupEmail extends React.Component {
|
|||||||
|
|
||||||
handleSignupSuccess(user, data) {
|
handleSignupSuccess(user, data) {
|
||||||
track('signup', 'signup_user_02_complete');
|
track('signup', 'signup_user_02_complete');
|
||||||
Client.loginById(
|
loginById(
|
||||||
data.id,
|
data.id,
|
||||||
user.password,
|
user.password,
|
||||||
'',
|
'',
|
||||||
() => {
|
this.state.hash,
|
||||||
if (this.state.hash > 0) {
|
null,
|
||||||
BrowserStore.setGlobalItem(this.state.hash, JSON.stringify({usedBefore: true}));
|
|
||||||
}
|
|
||||||
|
|
||||||
GlobalActions.emitInitialLoad(
|
|
||||||
() => {
|
|
||||||
const query = this.props.location.query;
|
|
||||||
if (query.redirect_to) {
|
|
||||||
browserHistory.push(query.redirect_to);
|
|
||||||
} else {
|
|
||||||
GlobalActions.redirectUserToDefaultTeam();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
(err) => {
|
(err) => {
|
||||||
if (err.id === 'api.user.login.not_verified.app_error') {
|
if (err.id === 'api.user.login.not_verified.app_error') {
|
||||||
browserHistory.push('/should_verify_email?email=' + encodeURIComponent(user.email) + '&teamname=' + encodeURIComponent(this.state.teamName));
|
browserHistory.push('/should_verify_email?email=' + encodeURIComponent(user.email) + '&teamname=' + encodeURIComponent(this.state.teamName));
|
||||||
@@ -242,7 +226,7 @@ export default class SignupEmail extends React.Component {
|
|||||||
allow_marketing: true
|
allow_marketing: true
|
||||||
};
|
};
|
||||||
|
|
||||||
Client.createUserWithInvite(user,
|
createUserWithInvite(user,
|
||||||
this.state.data,
|
this.state.data,
|
||||||
this.state.hash,
|
this.state.hash,
|
||||||
this.state.inviteId,
|
this.state.inviteId,
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import FormError from 'components/form_error.jsx';
|
|||||||
import * as GlobalActions from 'actions/global_actions.jsx';
|
import * as GlobalActions from 'actions/global_actions.jsx';
|
||||||
import {track} from 'actions/analytics_actions.jsx';
|
import {track} from 'actions/analytics_actions.jsx';
|
||||||
import {addUserToTeamFromInvite} from 'actions/team_actions.jsx';
|
import {addUserToTeamFromInvite} from 'actions/team_actions.jsx';
|
||||||
|
import {webLoginByLdap} from 'actions/user_actions.jsx';
|
||||||
|
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
|
||||||
@@ -56,7 +56,7 @@ export default class SignupLdap extends React.Component {
|
|||||||
|
|
||||||
this.setState({ldapError: ''});
|
this.setState({ldapError: ''});
|
||||||
|
|
||||||
Client.webLoginByLdap(
|
webLoginByLdap(
|
||||||
this.state.ldapId,
|
this.state.ldapId,
|
||||||
this.state.ldapPassword,
|
this.state.ldapPassword,
|
||||||
null,
|
null,
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import * as AsyncClient from 'utils/async_client.jsx';
|
|||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
import {intlShape, injectIntl, defineMessages, FormattedMessage, FormattedHTMLMessage, FormattedDate} from 'react-intl';
|
import {intlShape, injectIntl, defineMessages, FormattedMessage, FormattedHTMLMessage, FormattedDate} from 'react-intl';
|
||||||
import {updateUser} from 'actions/user_actions.jsx';
|
import {updateUser, uploadProfileImage} from 'actions/user_actions.jsx';
|
||||||
|
|
||||||
const holders = defineMessages({
|
const holders = defineMessages({
|
||||||
usernameReserved: {
|
usernameReserved: {
|
||||||
@@ -241,11 +241,11 @@ class UserSettingsGeneralTab extends React.Component {
|
|||||||
|
|
||||||
this.setState({loadingPicture: true});
|
this.setState({loadingPicture: true});
|
||||||
|
|
||||||
Client.uploadProfileImage(picture,
|
uploadProfileImage(
|
||||||
|
picture,
|
||||||
() => {
|
() => {
|
||||||
this.updateSection('');
|
this.updateSection('');
|
||||||
this.submitActive = false;
|
this.submitActive = false;
|
||||||
AsyncClient.getMe();
|
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
var state = this.setupInitialState(this.props);
|
var state = this.setupInitialState(this.props);
|
||||||
|
|||||||
@@ -9,12 +9,11 @@ import ToggleModalButton from '../toggle_modal_button.jsx';
|
|||||||
|
|
||||||
import PreferenceStore from 'stores/preference_store.jsx';
|
import PreferenceStore from 'stores/preference_store.jsx';
|
||||||
|
|
||||||
import Client from 'client/web_client.jsx';
|
|
||||||
import * as AsyncClient from 'utils/async_client.jsx';
|
import * as AsyncClient from 'utils/async_client.jsx';
|
||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
import Constants from 'utils/constants.jsx';
|
import Constants from 'utils/constants.jsx';
|
||||||
|
|
||||||
import {updatePassword} from 'actions/user_actions.jsx';
|
import {updatePassword, getAuthorizedApps, deactivateMfa, deauthorizeOAuthApp} from 'actions/user_actions.jsx';
|
||||||
|
|
||||||
import $ from 'jquery';
|
import $ from 'jquery';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
@@ -29,7 +28,7 @@ export default class SecurityTab extends React.Component {
|
|||||||
|
|
||||||
this.submitPassword = this.submitPassword.bind(this);
|
this.submitPassword = this.submitPassword.bind(this);
|
||||||
this.setupMfa = this.setupMfa.bind(this);
|
this.setupMfa = this.setupMfa.bind(this);
|
||||||
this.deactivateMfa = this.deactivateMfa.bind(this);
|
this.removeMfa = this.removeMfa.bind(this);
|
||||||
this.updateCurrentPassword = this.updateCurrentPassword.bind(this);
|
this.updateCurrentPassword = this.updateCurrentPassword.bind(this);
|
||||||
this.updateNewPassword = this.updateNewPassword.bind(this);
|
this.updateNewPassword = this.updateNewPassword.bind(this);
|
||||||
this.updateConfirmPassword = this.updateConfirmPassword.bind(this);
|
this.updateConfirmPassword = this.updateConfirmPassword.bind(this);
|
||||||
@@ -55,7 +54,7 @@ export default class SecurityTab extends React.Component {
|
|||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
if (global.mm_config.EnableOAuthServiceProvider === 'true') {
|
if (global.mm_config.EnableOAuthServiceProvider === 'true') {
|
||||||
Client.getAuthorizedApps(
|
getAuthorizedApps(
|
||||||
(authorizedApps) => {
|
(authorizedApps) => {
|
||||||
this.setState({authorizedApps, serverError: null}); //eslint-disable-line react/no-did-mount-set-state
|
this.setState({authorizedApps, serverError: null}); //eslint-disable-line react/no-did-mount-set-state
|
||||||
},
|
},
|
||||||
@@ -120,10 +119,8 @@ export default class SecurityTab extends React.Component {
|
|||||||
browserHistory.push('/mfa/setup');
|
browserHistory.push('/mfa/setup');
|
||||||
}
|
}
|
||||||
|
|
||||||
deactivateMfa() {
|
removeMfa() {
|
||||||
Client.updateMfa(
|
deactivateMfa(
|
||||||
'',
|
|
||||||
false,
|
|
||||||
() => {
|
() => {
|
||||||
if (global.window.mm_license.MFA === 'true' &&
|
if (global.window.mm_license.MFA === 'true' &&
|
||||||
global.window.mm_config.EnableMultifactorAuthentication === 'true' &&
|
global.window.mm_config.EnableMultifactorAuthentication === 'true' &&
|
||||||
@@ -133,7 +130,6 @@ export default class SecurityTab extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.props.updateSection('');
|
this.props.updateSection('');
|
||||||
AsyncClient.getMe();
|
|
||||||
this.setState(this.getDefaultState());
|
this.setState(this.getDefaultState());
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
@@ -163,7 +159,7 @@ export default class SecurityTab extends React.Component {
|
|||||||
deauthorizeApp(e) {
|
deauthorizeApp(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const appId = e.currentTarget.getAttribute('data-app');
|
const appId = e.currentTarget.getAttribute('data-app');
|
||||||
Client.deauthorizeOAuthApp(
|
deauthorizeOAuthApp(
|
||||||
appId,
|
appId,
|
||||||
() => {
|
() => {
|
||||||
const authorizedApps = this.state.authorizedApps.filter((app) => {
|
const authorizedApps = this.state.authorizedApps.filter((app) => {
|
||||||
@@ -223,7 +219,7 @@ export default class SecurityTab extends React.Component {
|
|||||||
<a
|
<a
|
||||||
className='btn btn-primary'
|
className='btn btn-primary'
|
||||||
href='#'
|
href='#'
|
||||||
onClick={this.deactivateMfa}
|
onClick={this.removeMfa}
|
||||||
>
|
>
|
||||||
{mfaButtonText}
|
{mfaButtonText}
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -644,7 +644,7 @@ export default class WebrtcController extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onConnectCall() {
|
onConnectCall() {
|
||||||
Client.webrtcToken(
|
WebrtcActions.webrtcToken(
|
||||||
(info) => {
|
(info) => {
|
||||||
const connectingMsg = (
|
const connectingMsg = (
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user