summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/admin.go2
-rw-r--r--api/team.go23
-rw-r--r--config/config.json3
-rw-r--r--webapp/client/client.jsx10
-rw-r--r--webapp/components/admin_console/compliance_reports.jsx2
-rw-r--r--webapp/components/admin_console/compliance_settings.jsx8
-rw-r--r--webapp/components/admin_console/setting.jsx2
-rw-r--r--webapp/components/user_settings/user_settings_general.jsx6
-rw-r--r--webapp/i18n/en.json4
-rw-r--r--webapp/i18n/es.json2
-rw-r--r--webapp/root.jsx7
-rw-r--r--webapp/sass/layout/_sidebar-left.scss3
12 files changed, 35 insertions, 37 deletions
diff --git a/api/admin.go b/api/admin.go
index 7ab2c9cfc..8f66f60c1 100644
--- a/api/admin.go
+++ b/api/admin.go
@@ -33,7 +33,7 @@ func InitAdmin() {
BaseRoutes.Admin.Handle("/analytics/{name:[A-Za-z0-9_]+}", ApiUserRequired(getAnalytics)).Methods("GET")
BaseRoutes.Admin.Handle("/save_compliance_report", ApiUserRequired(saveComplianceReport)).Methods("POST")
BaseRoutes.Admin.Handle("/compliance_reports", ApiUserRequired(getComplianceReports)).Methods("GET")
- BaseRoutes.Admin.Handle("/download_compliance_report/{id:[A-Za-z0-9]+}", ApiUserRequired(downloadComplianceReport)).Methods("GET")
+ BaseRoutes.Admin.Handle("/download_compliance_report/{id:[A-Za-z0-9]+}", ApiUserRequiredTrustRequester(downloadComplianceReport)).Methods("GET")
BaseRoutes.Admin.Handle("/upload_brand_image", ApiAdminSystemRequired(uploadBrandImage)).Methods("POST")
BaseRoutes.Admin.Handle("/get_brand_image", ApiAppHandlerTrustRequester(getBrandImage)).Methods("GET")
BaseRoutes.Admin.Handle("/reset_mfa", ApiAdminSystemRequired(adminResetMfa)).Methods("POST")
diff --git a/api/team.go b/api/team.go
index 6db8bc245..f9b718e06 100644
--- a/api/team.go
+++ b/api/team.go
@@ -41,7 +41,6 @@ func InitTeam() {
// These should be moved to the global admain console
BaseRoutes.NeedTeam.Handle("/import_team", ApiUserRequired(importTeam)).Methods("POST")
- BaseRoutes.NeedTeam.Handle("/export_team", ApiUserRequired(exportTeam)).Methods("GET")
BaseRoutes.Teams.Handle("/add_user_to_team_from_invite", ApiUserRequired(addUserToTeamFromInvite)).Methods("POST")
}
@@ -275,6 +274,9 @@ func JoinUserToTeam(team *model.Team, user *model.User) *model.AppError {
RemoveAllSessionsForUserId(user.Id)
InvalidateCacheForUser(user.Id)
+ // This message goes to every channel, so the channelId is irrelevant
+ PublishAndForget(model.NewMessage("", "", user.Id, model.ACTION_NEW_USER))
+
return nil
}
@@ -750,25 +752,6 @@ func importTeam(c *Context, w http.ResponseWriter, r *http.Request) {
http.ServeContent(w, r, "MattermostImportLog.txt", time.Now(), bytes.NewReader(log.Bytes()))
}
-func exportTeam(c *Context, w http.ResponseWriter, r *http.Request) {
- if !c.HasPermissionsToTeam(c.TeamId, "export") || !c.IsTeamAdmin() {
- c.Err = model.NewLocAppError("exportTeam", "api.team.export_team.admin.app_error", nil, "userId="+c.Session.UserId)
- c.Err.StatusCode = http.StatusForbidden
- return
- }
-
- options := ExportOptionsFromJson(r.Body)
-
- if link, err := ExportToFile(options); err != nil {
- c.Err = err
- return
- } else {
- result := map[string]string{}
- result["link"] = link
- w.Write([]byte(model.MapToJson(result)))
- }
-}
-
func getInviteInfo(c *Context, w http.ResponseWriter, r *http.Request) {
m := model.MapFromJson(r.Body)
inviteId := m["invite_id"]
diff --git a/config/config.json b/config/config.json
index 7eff8ad37..b62713a91 100644
--- a/config/config.json
+++ b/config/config.json
@@ -148,8 +148,7 @@
"IdAttribute": "",
"SkipCertificateVerification": false,
"QueryTimeout": 60,
- "LoginFieldName": "",
- "PasswordFieldName": ""
+ "LoginFieldName": ""
},
"ComplianceSettings": {
"Enable": false,
diff --git a/webapp/client/client.jsx b/webapp/client/client.jsx
index c81c5a1d7..12cf21f5c 100644
--- a/webapp/client/client.jsx
+++ b/webapp/client/client.jsx
@@ -542,8 +542,14 @@ export default class Client {
createUserWithInvite = (user, data, emailHash, inviteId, success, error) => {
var url = `${this.getUsersRoute()}/create`;
- if (data || emailHash || inviteId) {
- url += '?d=' + encodeURIComponent(data) + '&h=' + encodeURIComponent(emailHash) + '&iid=' + encodeURIComponent(inviteId);
+ url += '?d=' + encodeURIComponent(data);
+
+ if (emailHash) {
+ url += '&h=' + encodeURIComponent(emailHash);
+ }
+
+ if (inviteId) {
+ url += '&iid=' + encodeURIComponent(inviteId);
}
request.
diff --git a/webapp/components/admin_console/compliance_reports.jsx b/webapp/components/admin_console/compliance_reports.jsx
index 702c1a969..04b2c4deb 100644
--- a/webapp/components/admin_console/compliance_reports.jsx
+++ b/webapp/components/admin_console/compliance_reports.jsx
@@ -7,7 +7,7 @@ import * as Utils from '../../utils/utils.jsx';
import AdminStore from '../../stores/admin_store.jsx';
import UserStore from '../../stores/user_store.jsx';
-import * as Client from '../../utils/web_client.jsx';
+import Client from 'utils/web_client.jsx';
import * as AsyncClient from '../../utils/async_client.jsx';
import {FormattedMessage, FormattedDate, FormattedTime} from 'react-intl';
diff --git a/webapp/components/admin_console/compliance_settings.jsx b/webapp/components/admin_console/compliance_settings.jsx
index b127634e8..53f060e11 100644
--- a/webapp/components/admin_console/compliance_settings.jsx
+++ b/webapp/components/admin_console/compliance_settings.jsx
@@ -2,7 +2,7 @@
// See License.txt for license information.
import $ from 'jquery';
-import * as Client from '../../utils/web_client.jsx';
+import Client from 'utils/web_client.jsx';
import * as AsyncClient from '../../utils/async_client.jsx';
import * as Utils from '../../utils/utils.jsx';
@@ -40,6 +40,7 @@ export default class ComplianceSettings extends React.Component {
$('#save-button').button('loading');
const config = this.props.config;
+ const oldEnable = config.ComplianceSettings.Enable;
config.ComplianceSettings.Enable = this.refs.Enable.checked;
config.ComplianceSettings.Directory = ReactDOM.findDOMNode(this.refs.Directory).value;
config.ComplianceSettings.EnableDaily = this.refs.EnableDaily.checked;
@@ -47,12 +48,15 @@ export default class ComplianceSettings extends React.Component {
Client.saveConfig(
config,
() => {
+ $('#save-button').button('reset');
AsyncClient.getConfig();
this.setState({
serverError: null,
saveNeeded: false
});
- $('#save-button').button('reset');
+ if (oldEnable !== config.ComplianceSettings.Enable) {
+ window.location.reload();
+ }
},
(err) => {
this.setState({
diff --git a/webapp/components/admin_console/setting.jsx b/webapp/components/admin_console/setting.jsx
index 8fc5c2ad8..7dee6c8dc 100644
--- a/webapp/components/admin_console/setting.jsx
+++ b/webapp/components/admin_console/setting.jsx
@@ -5,7 +5,7 @@ import React from 'react';
export default class Setting extends React.Component {
render() {
- let marginClass;
+ let marginClass = '';
if (this.props.margin === 'small') {
marginClass = ' form-group--small';
}
diff --git a/webapp/components/user_settings/user_settings_general.jsx b/webapp/components/user_settings/user_settings_general.jsx
index b48026a39..be1d1e6c5 100644
--- a/webapp/components/user_settings/user_settings_general.jsx
+++ b/webapp/components/user_settings/user_settings_general.jsx
@@ -23,7 +23,7 @@ const holders = defineMessages({
},
usernameRestrictions: {
id: 'user.settings.general.usernameRestrictions',
- defaultMessage: "Pick something easy for teammates to recognize and recall. Username must begin with a letter, and contain between {min} to {max} lowercase characters made up of numbers, letters, and the symbols '.', '-', and '_'"
+ defaultMessage: "Username must begin with a letter, and contain between {min} to {max} lowercase characters made up of numbers, letters, and the symbols '.', '-', and '_'."
},
validEmail: {
id: 'user.settings.general.validEmail',
@@ -108,7 +108,7 @@ class UserSettingsGeneralTab extends React.Component {
this.setState({clientError: formatMessage(holders.usernameReserved)});
return;
} else if (usernameError) {
- this.setState({clientError: formatMessage(holders.usernameRestrictions, {min: Constants.MIN_USERNAME_LENGTH}, {max: Constants.MAX_USERNAME_LENGTH})});
+ this.setState({clientError: formatMessage(holders.usernameRestrictions, {min: Constants.MIN_USERNAME_LENGTH, max: Constants.MAX_USERNAME_LENGTH})});
return;
}
@@ -773,7 +773,7 @@ class UserSettingsGeneralTab extends React.Component {
<span>
<FormattedMessage
id='user.settings.general.usernameInfo'
- defaultMessage="Pick something easy for teammates to recognize and recall. Username must begin with a letter, and contain between {Constants.MIN_USERNAME_LENGTH to {Constants.MAX_USERNAME_LENGTH} lowercase characters made up of numbers, letters, and the symbols '.', '-', and '_'"
+ defaultMessage='Pick something easy for teammates to recognize and recall.'
/>
</span>
);
diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json
index 0c3da96ed..b622c9ab1 100644
--- a/webapp/i18n/en.json
+++ b/webapp/i18n/en.json
@@ -1341,9 +1341,9 @@
"user.settings.general.title": "General Settings",
"user.settings.general.uploadImage": "Click 'Edit' to upload an image.",
"user.settings.general.username": "Username",
- "user.settings.general.usernameInfo": "Pick something easy for teammates to recognize and recall. Username must begin with a letter, and contain between {min) to {max} lowercase characters made up of numbers, letters, and the symbols '.', '-', and '_'.",
+ "user.settings.general.usernameInfo": "Pick something easy for teammates to recognize and recall.",
"user.settings.general.usernameReserved": "This username is reserved, please choose a new one.",
- "user.settings.general.usernameRestrictions": "Pick something easy for teammates to recognize and recall. Username must begin with a letter, and contain between {min} to {max} lowercase characters made up of numbers, letters, and the symbols '.', '-', and '_'.",
+ "user.settings.general.usernameRestrictions": "Username must begin with a letter, and contain between {min} to {max} lowercase characters made up of numbers, letters, and the symbols '.', '-', and '_'.",
"user.settings.general.validEmail": "Please enter a valid email address",
"user.settings.general.validImage": "Only JPG or PNG images may be used for profile pictures",
"user.settings.import_theme.cancel": "Cancel",
diff --git a/webapp/i18n/es.json b/webapp/i18n/es.json
index 62bd460f7..ce29d234b 100644
--- a/webapp/i18n/es.json
+++ b/webapp/i18n/es.json
@@ -1341,9 +1341,7 @@
"user.settings.general.title": "Configuración General",
"user.settings.general.uploadImage": "Pinchar 'Editar' para subir una imagen.",
"user.settings.general.username": "Nombre de usuario",
- "user.settings.general.usernameInfo": "Escoge algo que sea sencillo para que tus compañeros reconozcan y puedan asociar. El nombre de usuario debe comenzar con una letra, y tener entre {min) y {max} caracteres en minúscula y componerse en numeros, letras y los símboloes '.', '-', y '_'.",
"user.settings.general.usernameReserved": "Este nombre de usuario está reservado, por favor escoge otro",
- "user.settings.general.usernameRestrictions": "Escoge algo que sea sencillo para que tus compañeros reconozcan y puedan asociar. El nombre de usuario debe comenzar con una letra, y tener entre {min) y {max} caracteres en minúscula y componerse en numeros, letras y los símboloes '.', '-', y '_'.",
"user.settings.general.validEmail": "Por favor ingresa una dirección de correo electrónico válida",
"user.settings.general.validImage": "Sólo pueden ser utilizadas imágenes JPG o PNG en el perfil",
"user.settings.import_theme.cancel": "Cancelar",
diff --git a/webapp/root.jsx b/webapp/root.jsx
index 3f1edda38..2b54c2174 100644
--- a/webapp/root.jsx
+++ b/webapp/root.jsx
@@ -132,6 +132,7 @@ function preNeedsTeam(nextState, replace, callback) {
// for the current url.
var teamName = Utils.getTeamNameFromUrl();
var team = TeamStore.getByName(teamName);
+ const oldTeamId = TeamStore.getCurrentId();
if (!team) {
browserHistory.push('/');
@@ -143,6 +144,12 @@ function preNeedsTeam(nextState, replace, callback) {
TeamStore.saveMyTeam(team);
TeamStore.emitChange();
+ // If the old team id is null then we will already have the direct
+ // profiles from initial load
+ if (oldTeamId != null) {
+ AsyncClient.getDirectProfiles();
+ }
+
var d1 = $.Deferred(); //eslint-disable-line new-cap
var d2 = $.Deferred(); //eslint-disable-line new-cap
diff --git a/webapp/sass/layout/_sidebar-left.scss b/webapp/sass/layout/_sidebar-left.scss
index ad23df6ca..7ac1fee75 100644
--- a/webapp/sass/layout/_sidebar-left.scss
+++ b/webapp/sass/layout/_sidebar-left.scss
@@ -16,9 +16,10 @@
color: $white;
font-size: .9em;
height: 20px;
- margin: 5px 0 6px;
line-height: 20px;
+ margin: 5px 0 6px;
position: relative;
+ z-index: 0;
&:before {
background: $light-gray;