Этот коммит содержится в:
=Corey Hulen
2015-09-15 19:09:50 -07:00
родитель b2a679c25d
Коммит 5e2f701e6c
11 изменённых файлов: 6 добавлений и 273 удалений

Просмотреть файл

@@ -42,7 +42,6 @@ func InitApi() {
InitWebSocket(r)
InitFile(r)
InitCommand(r)
InitConfig(r)
InitAdmin(r)
templatesDir := utils.FindDir("api/templates")

Просмотреть файл

@@ -1,34 +0,0 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.
package api
import (
l4g "code.google.com/p/log4go"
"encoding/json"
"github.com/gorilla/mux"
"github.com/mattermost/platform/model"
"github.com/mattermost/platform/utils"
"net/http"
"strconv"
)
func InitConfig(r *mux.Router) {
l4g.Debug("Initializing config api routes")
sr := r.PathPrefix("/config").Subrouter()
sr.Handle("/get_all", ApiAppHandler(getConfig)).Methods("GET")
}
func getConfig(c *Context, w http.ResponseWriter, r *http.Request) {
settings := make(map[string]string)
settings["ByPassEmail"] = strconv.FormatBool(utils.Cfg.EmailSettings.ByPassEmail)
if bytes, err := json.Marshal(settings); err != nil {
c.Err = model.NewAppError("getConfig", "Unable to marshall configuration data", err.Error())
return
} else {
w.Write(bytes)
}
}

Просмотреть файл

@@ -282,8 +282,10 @@ func getClientProperties(c *Config) map[string]string {
props["SegmentDeveloperKey"] = c.ClientSettings.SegmentDeveloperKey
props["GoogleDeveloperKey"] = c.ClientSettings.GoogleDeveloperKey
props["AnalyticsUrl"] = c.ServiceSettings.AnalyticsUrl
props["ByPassEmail"] = strconv.FormatBool(c.EmailSettings.ByPassEmail)
props["ProfileHeight"] = fmt.Sprintf("%v", c.ImageSettings.ProfileHeight)
props["ProfileWidth"] = fmt.Sprintf("%v", c.ImageSettings.ProfileWidth)
props["ProfileWidth"] = fmt.Sprintf("%v", c.ImageSettings.ProfileWidth)
return props
}

Просмотреть файл

@@ -2,7 +2,6 @@
// See License.txt for license information.
var utils = require('../utils/utils.jsx');
var ConfigStore = require('../stores/config_store.jsx');
var Client = require('../utils/client.jsx');
var UserStore = require('../stores/user_store.jsx');
var ConfirmModal = require('./confirm_modal.jsx');
@@ -22,7 +21,7 @@ export default class InviteMemberModal extends React.Component {
emailErrors: {},
firstNameErrors: {},
lastNameErrors: {},
emailEnabled: !ConfigStore.getSettingAsBoolean('ByPassEmail', false)
emailEnabled: !global.window.config.ByPassEmail
};
}

Просмотреть файл

@@ -236,11 +236,6 @@ export default class SignupUserComplete extends React.Component {
);
}
var termsDisclaimer = null;
if (global.window.config.ShowTermsDuringSignup) {
termsDisclaimer = <p>By creating an account and using Mattermost you are agreeing to our <a href='/static/help/terms.html'>Terms of Service</a>. If you do not agree, you cannot use this service.</p>;
}
return (
<div>
<form>

Просмотреть файл

@@ -1,142 +0,0 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../utils/client.jsx');
export default class TeamSignupAllowedDomainsPage extends React.Component {
constructor(props) {
super(props);
this.submitBack = this.submitBack.bind(this);
this.submitNext = this.submitNext.bind(this);
this.state = {};
}
submitBack(e) {
e.preventDefault();
this.props.state.wizard = 'team_url';
this.props.updateParent(this.props.state);
}
submitNext(e) {
e.preventDefault();
if (React.findDOMNode(this.refs.open_network).checked) {
this.props.state.wizard = 'send_invites';
this.props.state.team.type = 'O';
this.props.updateParent(this.props.state);
return;
}
if (React.findDOMNode(this.refs.allow).checked) {
var name = React.findDOMNode(this.refs.name).value.trim();
var domainRegex = /^\w+\.\w+$/;
if (!name) {
this.setState({nameError: 'This field is required'});
return;
}
if (!name.trim().match(domainRegex)) {
this.setState({nameError: 'The domain doesn\'t appear valid'});
return;
}
this.props.state.wizard = 'send_invites';
this.props.state.team.allowed_domains = name;
this.props.state.team.type = 'I';
this.props.updateParent(this.props.state);
} else {
this.props.state.wizard = 'send_invites';
this.props.state.team.type = 'I';
this.props.updateParent(this.props.state);
}
}
render() {
Client.track('signup', 'signup_team_04_allow_domains');
var nameError = null;
var nameDivClass = 'form-group';
if (this.state.nameError) {
nameError = <label className='control-label'>{this.state.nameError}</label>;
nameDivClass += ' has-error';
}
return (
<div>
<form>
<img
className='signup-team-logo'
src='/static/images/logo.png'
/>
<h2>Email Domain</h2>
<p>
<div className='checkbox'>
<label>
<input
type='checkbox'
ref='allow'
defaultChecked={true}
/>
{' Allow sign up and team discovery with a company email address.'}
</label>
</div>
</p>
<p>{'Check this box to allow your team members to sign up using their company email addresses if you share the same domain--otherwise, you need to invite everyone yourself.'}</p>
<h4>{'Your team\'s domain for emails'}</h4>
<div className={nameDivClass}>
<div className='row'>
<div className='col-sm-9'>
<div className='input-group'>
<span className='input-group-addon'>@</span>
<input
type='text'
ref='name'
className='form-control'
placeholder=''
maxLength='128'
defaultValue={this.props.state.team.allowed_domains}
autoFocus={true}
onFocus={this.handleFocus}
/>
</div>
</div>
</div>
{nameError}
</div>
<p>To allow signups from multiple domains, separate each with a comma.</p>
<p>
<div className='checkbox'>
<label>
<input
type='checkbox'
ref='open_network'
defaultChecked={this.props.state.team.type === 'O'}
/> Allow anyone to signup to this domain without an invitation.</label>
</div>
</p>
<button
type='button'
className='btn btn-default'
onClick={this.submitBack}
>
<i className='glyphicon glyphicon-chevron-left'></i> Back
</button>&nbsp;
<button
type='submit'
className='btn-primary btn'
onClick={this.submitNext}
>
Next<i className='glyphicon glyphicon-chevron-right'></i>
</button>
</form>
</div>
);
}
}
TeamSignupAllowedDomainsPage.defaultProps = {
state: {}
};
TeamSignupAllowedDomainsPage.propTypes = {
state: React.PropTypes.object,
updateParent: React.PropTypes.func
};

Просмотреть файл

@@ -2,7 +2,6 @@
// See License.txt for license information.
var EmailItem = require('./team_signup_email_item.jsx');
var ConfigStore = require('../stores/config_store.jsx');
var Client = require('../utils/client.jsx');
export default class TeamSignupSendInvitesPage extends React.Component {
@@ -14,7 +13,7 @@ export default class TeamSignupSendInvitesPage extends React.Component {
this.submitSkip = this.submitSkip.bind(this);
this.keySubmit = this.keySubmit.bind(this);
this.state = {
emailEnabled: !ConfigStore.getSettingAsBoolean('ByPassEmail', false)
emailEnabled: !global.window.config.ByPassEmail
};
if (!this.state.emailEnabled) {

Просмотреть файл

@@ -57,7 +57,7 @@ export default class UserProfile extends React.Component {
}
var dataContent = '<img class="user-popover__image" src="/api/v1/users/' + this.state.profile.id + '/image?time=' + this.state.profile.update_at + '" height="128" width="128" />';
if (!global.window.config.ShowEmail) {
if (!global.window.config.ShowEmailAddress) {
dataContent += '<div class="text-nowrap">Email not shared</div>';
} else {
dataContent += '<div data-toggle="tooltip" title="' + this.state.profile.email + '"><a href="mailto:' + this.state.profile.email + '" class="text-nowrap text-lowercase user-popover__email">' + this.state.profile.email + '</a></div>';

Просмотреть файл

@@ -2,7 +2,6 @@
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
var ConfigStore = require('../stores/config_store.jsx');
var SettingItemMin = require('./setting_item_min.jsx');
var SettingItemMax = require('./setting_item_max.jsx');
var SettingPicture = require('./setting_picture.jsx');
@@ -209,7 +208,7 @@ export default class UserSettingsGeneralTab extends React.Component {
}
setupInitialState(props) {
var user = props.user;
var emailEnabled = !ConfigStore.getSettingAsBoolean('ByPassEmail', false);
var emailEnabled = !global.window.config.ByPassEmail;
return {username: user.username, firstName: user.first_name, lastName: user.last_name, nickname: user.nickname,
email: user.email, picture: null, loadingPicture: false, emailEnabled: emailEnabled};
}

Просмотреть файл

@@ -1,69 +0,0 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
var EventEmitter = require('events').EventEmitter;
var BrowserStore = require('../stores/browser_store.jsx');
var Constants = require('../utils/constants.jsx');
var ActionTypes = Constants.ActionTypes;
var CHANGE_EVENT = 'change';
class ConfigStoreClass extends EventEmitter {
constructor() {
super();
this.emitChange = this.emitChange.bind(this);
this.addChangeListener = this.addChangeListener.bind(this);
this.removeChangeListener = this.removeChangeListener.bind(this);
this.getSetting = this.getSetting.bind(this);
this.getSettingAsBoolean = this.getSettingAsBoolean.bind(this);
this.updateStoredSettings = this.updateStoredSettings.bind(this);
}
emitChange() {
this.emit(CHANGE_EVENT);
}
addChangeListener(callback) {
this.on(CHANGE_EVENT, callback);
}
removeChangeListener(callback) {
this.removeListener(CHANGE_EVENT, callback);
}
getSetting(key, defaultValue) {
return BrowserStore.getItem('config_' + key, defaultValue);
}
getSettingAsBoolean(key, defaultValue) {
var value = this.getSetting(key, defaultValue);
if (typeof value !== 'string') {
return Boolean(value);
}
return value === 'true';
}
updateStoredSettings(settings) {
for (let key in settings) {
if (settings.hasOwnProperty(key)) {
BrowserStore.setItem('config_' + key, settings[key]);
}
}
}
}
var ConfigStore = new ConfigStoreClass();
ConfigStore.dispatchToken = AppDispatcher.register(function registry(payload) {
var action = payload.action;
switch (action.type) {
case ActionTypes.RECIEVED_CONFIG:
ConfigStore.updateStoredSettings(action.settings);
ConfigStore.emitChange();
break;
default:
}
});
export default ConfigStore;

Просмотреть файл

@@ -1,15 +0,0 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.
export var config = {
AllowSignupDomainsWizard: false,
// Privacy switches
ShowEmail: true,
// Toggle whether or not users are shown a message about agreeing to the Terms of Service during the signup process
ShowTermsDuringSignup: false
};
global.window.config = config;