diff options
author | Akihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp> | 2017-02-09 03:23:24 +0900 |
---|---|---|
committer | George Goldberg <george@gberg.me> | 2017-02-08 18:23:24 +0000 |
commit | 432dc9239fdd27063adcee944675d066fb35cde6 (patch) | |
tree | 6722f8bdb289883bffd0f81dc4074dc949176dba /webapp/client/browser_web_client.jsx | |
parent | 11e0a7daa2a478b1dca5164c11aa4e41e5652f1b (diff) | |
download | chat-432dc9239fdd27063adcee944675d066fb35cde6.tar.gz chat-432dc9239fdd27063adcee944675d066fb35cde6.tar.bz2 chat-432dc9239fdd27063adcee944675d066fb35cde6.zip |
Let emoji_store.jsx use Client APIs to resolve URLs (#5302)
Diffstat (limited to 'webapp/client/browser_web_client.jsx')
-rw-r--r-- | webapp/client/browser_web_client.jsx | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/webapp/client/browser_web_client.jsx b/webapp/client/browser_web_client.jsx new file mode 100644 index 000000000..f5d7f6c80 --- /dev/null +++ b/webapp/client/browser_web_client.jsx @@ -0,0 +1,133 @@ +// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import Client from './client.jsx'; + +import TeamStore from 'stores/team_store.jsx'; +import BrowserStore from 'stores/browser_store.jsx'; + +import * as GlobalActions from 'actions/global_actions.jsx'; +import {reconnect} from 'actions/websocket_actions.jsx'; + +import request from 'superagent'; + +const HTTP_UNAUTHORIZED = 401; + +const mfaPaths = [ + '/mfa/setup', + '/mfa/confirm' +]; + +class WebClientClass extends Client { + constructor() { + super(); + this.enableLogErrorsToConsole(true); + this.hasInternetConnection = true; + TeamStore.addChangeListener(this.onTeamStoreChanged.bind(this)); + } + + onTeamStoreChanged() { + this.setTeamId(TeamStore.getCurrentId()); + } + + track(category, action, label, property, value) { + if (global.window && global.window.analytics) { + global.window.analytics.track(action, {category, label, property, value}); + } + } + + trackPage() { + if (global.window && global.window.analytics) { + global.window.analytics.page(); + } + } + + handleError(err, res) { + if (res && res.body && res.body.id === 'api.context.mfa_required.app_error') { + if (mfaPaths.indexOf(window.location.pathname) === -1) { + window.location.reload(); + } + return; + } + + if (err.status === HTTP_UNAUTHORIZED && res.req.url !== this.getUsersRoute() + '/login') { + GlobalActions.emitUserLoggedOutEvent('/login'); + } + + if (err.status == null) { + this.hasInternetConnection = false; + } + } + + handleSuccess = (res) => { // eslint-disable-line no-unused-vars + if (res && !this.hasInternetConnection) { + reconnect(); + this.hasInternetConnection = true; + } + } + + // not sure why but super.login doesn't work if using an () => arrow functions. + // I think this might be a webpack issue. + webLogin(loginId, password, token, success, error) { + this.login( + loginId, + password, + token, + (data) => { + this.track('api', 'api_users_login_success', '', 'login_id', loginId); + BrowserStore.signalLogin(); + + if (success) { + success(data); + } + }, + (err) => { + this.track('api', 'api_users_login_fail', '', 'login_id', loginId); + if (error) { + error(err); + } + } + ); + } + + webLoginByLdap(loginId, password, token, success, error) { + this.loginByLdap( + loginId, + password, + token, + (data) => { + this.track('api', 'api_users_login_success', '', 'login_id', loginId); + BrowserStore.signalLogin(); + + if (success) { + success(data); + } + }, + (err) => { + this.track('api', 'api_users_login_fail', '', 'login_id', loginId); + if (error) { + error(err); + } + } + ); + } + + getYoutubeVideoInfo(googleKey, videoId, success, error) { + request.get('https://www.googleapis.com/youtube/v3/videos'). + query({part: 'snippet', id: videoId, key: googleKey}). + end((err, res) => { + if (err) { + return error(err); + } + + if (!res.body) { + console.error('Missing response body for getYoutubeVideoInfo'); // eslint-disable-line no-console + } + + return success(res.body); + }); + } +} + +var WebClient = new WebClientClass(); +export default WebClient; |