summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile20
-rw-r--r--README.md9
-rw-r--r--web/react/components/sidebar_header.jsx2
-rw-r--r--web/react/components/sidebar_right_menu.jsx75
-rw-r--r--web/react/components/user_settings.jsx133
5 files changed, 121 insertions, 118 deletions
diff --git a/Makefile b/Makefile
index 370289507..30babfa39 100644
--- a/Makefile
+++ b/Makefile
@@ -101,14 +101,6 @@ install:
docker start mattermost-mysql > /dev/null; \
fi
- @if [ $(shell docker ps -a | grep -ci mattermost-redis) -eq 0 ]; then \
- echo starting mattermost-redis; \
- docker run --name mattermost-redis -p 6379:6379 -d redis > /dev/null; \
- elif [ $(shell docker ps | grep -ci mattermost-redis) -eq 0 ]; then \
- echo restarting mattermost-redis; \
- docker start mattermost-redis > /dev/null; \
- fi
-
@cd web/react/ && npm install
check: install
@@ -159,12 +151,6 @@ clean:
docker rm -v mattermost-mysql > /dev/null; \
fi
- @if [ $(shell docker ps -a | grep -ci mattermost-redis) -eq 1 ]; then \
- echo stopping mattermost-redis; \
- docker stop mattermost-redis > /dev/null; \
- docker rm -v mattermost-redis > /dev/null; \
- fi
-
rm -rf web/react/node_modules
rm -f web/static/js/bundle*.js
rm -f web/static/css/styles.css
@@ -216,12 +202,6 @@ cleandb:
docker stop mattermost-mysql > /dev/null; \
docker rm -v mattermost-mysql > /dev/null; \
fi
-
- @if [ $(shell docker ps -a | grep -ci mattermost-redis) -eq 1 ]; then \
- docker stop mattermost-redis > /dev/null; \
- docker rm -v mattermost-redis > /dev/null; \
- fi
-
dist: install
@$(GO) build $(GOFLAGS) -i -a ./...
diff --git a/README.md b/README.md
index cf5868f08..5af82bb72 100644
--- a/README.md
+++ b/README.md
@@ -31,12 +31,11 @@ Local Machine Setup (Docker)
### Mac OSX ###
-1. Follow the instructions at: http://docs.docker.com/installation/mac/
- 1. Use the Boot2Docker command-line utility.
- 2. If you do command-line setup use: `boot2docker init eval “$(boot2docker shellinit)”`
+1. Install Boot2Docker using instructions at: http://docs.docker.com/installation/mac/
+ 1. Start Boot2Docker from the command line and run: `boot2docker init eval “$(boot2docker shellinit)”`
2. Get your Docker IP address with: `boot2docker ip`
-3. Add a line to your /etc/hosts that goes: `<Docker IP> dockerhost`
-4. Run: `boot2docker shellinit` and copy the export statements to your ~/.bash\_profile.
+3. Use `sudo nano /etc/hosts` to add `<Docker IP> dockerhost` to your /etc/hosts file
+4. Run: `boot2docker shellinit` and copy the export statements to your ~/.bash\_profile by running `sudo nano ~/.bash_profile`. Then run: `source ~/.bash_profile`
5. Run: `docker run --name mattermost-dev -d --publish 8065:80 mattermost/platform`
6. When docker is done fetching the image, open http://dockerhost:8065/ in your browser.
diff --git a/web/react/components/sidebar_header.jsx b/web/react/components/sidebar_header.jsx
index ba8f9bacd..72b8547e5 100644
--- a/web/react/components/sidebar_header.jsx
+++ b/web/react/components/sidebar_header.jsx
@@ -64,7 +64,7 @@ var NavbarDropdown = React.createClass({
if (this.props.teamType === 'O') {
teamLink = (
<li>
- <a href='#' data-toggle='modal' data-target='#get_link' data-title='Team Invite' data-value={location.origin + '/signup_user_complete/?id=' + currentUser.team_id}>Get Team Invite Link</a>
+ <a href='#' data-toggle='modal' data-target='#get_link' data-title='Team Invite' data-value={utils.getWindowLocationOrigin() + '/signup_user_complete/?id=' + currentUser.team_id}>Get Team Invite Link</a>
</li>
);
}
diff --git a/web/react/components/sidebar_right_menu.jsx b/web/react/components/sidebar_right_menu.jsx
index 15306a499..2439719a1 100644
--- a/web/react/components/sidebar_right_menu.jsx
+++ b/web/react/components/sidebar_right_menu.jsx
@@ -3,6 +3,7 @@
var UserStore = require('../stores/user_store.jsx');
var client = require('../utils/client.jsx');
+var utils = require('../utils/utils.jsx');
module.exports = React.createClass({
handleLogoutClick: function(e) {
@@ -10,65 +11,77 @@ module.exports = React.createClass({
client.logout();
},
render: function() {
- var team_link = "";
- var invite_link = "";
- var manage_link = "";
- var rename_link = "";
- var currentUser = UserStore.getCurrentUser()
+ var teamLink = '';
+ var inviteLink = '';
+ var teamSettingsLink = '';
+ var manageLink = '';
+ var renameLink = '';
+ var currentUser = UserStore.getCurrentUser();
var isAdmin = false;
if (currentUser != null) {
- isAdmin = currentUser.roles.indexOf("admin") > -1;
+ isAdmin = currentUser.roles.indexOf('admin') > -1;
- invite_link = (
+ inviteLink = (
<li>
- <a href="#" data-toggle="modal" data-target="#invite_member"><i className="glyphicon glyphicon-user"></i>Invite New Member</a>
+ <a href='#' data-toggle='modal' data-target='#invite_member'><i className='glyphicon glyphicon-user'></i>Invite New Member</a>
</li>
);
- if (this.props.teamType == "O") {
- team_link = (
+ if (this.props.teamType === 'O') {
+ teamLink = (
<li>
- <a href="#" data-toggle="modal" data-target="#get_link" data-title="Team Invite" data-value={location.origin+"/signup_user_complete/?id="+currentUser.team_id}><i className="glyphicon glyphicon-link"></i>Get Team Invite Link</a>
+ <a href='#' data-toggle='modal' data-target='#get_link' data-title='Team Invite' data-value={utils.getWindowLocationOrigin()+'/signup_user_complete/?id='+currentUser.team_id}><i className='glyphicon glyphicon-link'></i>Get Team Invite Link</a>
</li>
);
}
}
if (isAdmin) {
- manage_link = (
+ teamSettingsLink = (
<li>
- <a href="#" data-toggle="modal" data-target="#team_members"><i className="glyphicon glyphicon-wrench"></i>Manage Team</a>
+ <a href='#' data-toggle='modal' data-target='#team_settings'><i className='glyphicon glyphicon-globe'></i>Team Settings</a>
</li>
);
- rename_link = (
+ manageLink = (
<li>
- <a href="#" data-toggle="modal" data-target="#rename_team_link"><i className="glyphicon glyphicon-pencil"></i>Rename</a>
+ <a href='#' data-toggle='modal' data-target='#team_members'><i className='glyphicon glyphicon-wrench'></i>Manage Team</a>
+ </li>
+ );
+ renameLink = (
+ <li>
+ <a href='#' data-toggle='modal' data-target='#rename_team_link'><i className='glyphicon glyphicon-pencil'></i>Rename</a>
</li>
);
}
- var siteName = config.SiteName != null ? config.SiteName : "";
- var teamDisplayName = this.props.teamDisplayName ? this.props.teamDisplayName : siteName;
+ var siteName = '';
+ if (config.SiteName != null) {
+ siteName = config.SiteName;
+ }
+ var teamDisplayName = siteName;
+ if (this.props.teamDisplayName) {
+ teamDisplayName = this.props.teamDisplayName;
+ }
return (
<div>
- <div className="team__header theme">
- <a className="team__name" href="/channels/town-square">{ teamDisplayName }</a>
+ <div className='team__header theme'>
+ <a className='team__name' href='/channels/town-square'>{teamDisplayName}</a>
</div>
- <div className="nav-pills__container">
- <ul className="nav nav-pills nav-stacked">
- <li><a href="#" data-toggle="modal" data-target="#user_settings1"><i className="glyphicon glyphicon-cog"></i>Account Settings</a></li>
- { isAdmin ? <li><a href="#" data-toggle="modal" data-target="#team_settings"><i className="glyphicon glyphicon-globe"></i>Team Settings</a></li> : "" }
- { invite_link }
- { team_link }
- { manage_link }
- { rename_link }
- <li><a href="#" onClick={this.handleLogoutClick}><i className="glyphicon glyphicon-log-out"></i>Logout</a></li>
- <li className="divider"></li>
- <li><a target="_blank" href="/static/help/configure_links.html"><i className="glyphicon glyphicon-question-sign"></i>Help</a></li>
- <li><a target="_blank" href="/static/help/configure_links.html"><i className="glyphicon glyphicon-earphone"></i>Report a Problem</a></li>
+ <div className='nav-pills__container'>
+ <ul className='nav nav-pills nav-stacked'>
+ <li><a href='#' data-toggle='modal' data-target='#user_settings1'><i className='glyphicon glyphicon-cog'></i>Account Settings</a></li>
+ {teamSettingsLink}
+ {inviteLink}
+ {teamLink}
+ {manageLink}
+ {renameLink}
+ <li><a href='#' onClick={this.handleLogoutClick}><i className='glyphicon glyphicon-log-out'></i>Logout</a></li>
+ <li className='divider'></li>
+ <li><a target='_blank' href='/static/help/configure_links.html'><i className='glyphicon glyphicon-question-sign'></i>Help</a></li>
+ <li><a target='_blank' href='/static/help/configure_links.html'><i className='glyphicon glyphicon-earphone'></i>Report a Problem</a></li>
</ul>
</div>
</div>
diff --git a/web/react/components/user_settings.jsx b/web/react/components/user_settings.jsx
index e224f2a87..1a0c313d3 100644
--- a/web/react/components/user_settings.jsx
+++ b/web/react/components/user_settings.jsx
@@ -461,22 +461,22 @@ var SecurityTab = React.createClass({
e.preventDefault();
var user = this.props.user;
- var currentPassword = this.state.current_password;
- var newPassword = this.state.new_password;
- var confirmPassword = this.state.confirm_password;
+ var currentPassword = this.state.currentPassword;
+ var newPassword = this.state.newPassword;
+ var confirmPassword = this.state.confirmPassword;
if (currentPassword === '') {
- this.setState({password_error: 'Please enter your current password', server_error: ''});
+ this.setState({passwordError: 'Please enter your current password', serverError: ''});
return;
}
if (newPassword.length < 5) {
- this.setState({password_error: 'New passwords must be at least 5 characters', server_error: ''});
+ this.setState({passwordError: 'New passwords must be at least 5 characters', serverError: ''});
return;
}
if (newPassword !== confirmPassword) {
- this.setState({password_error: 'The new passwords you entered do not match', server_error: ''});
+ this.setState({passwordError: 'The new passwords you entered do not match', serverError: ''});
return;
}
@@ -486,43 +486,43 @@ var SecurityTab = React.createClass({
data.new_password = newPassword;
client.updatePassword(data,
- function(data) {
- this.props.updateSection("");
+ function() {
+ this.props.updateSection('');
AsyncClient.getMe();
- this.setState({current_password: '', new_password: '', confirm_password: ''});
+ this.setState({currentPassword: '', newPassword: '', confirmPassword: ''});
}.bind(this),
function(err) {
var state = this.getInitialState();
if (err.message) {
- state.server_error = err.message;
+ state.serverError = err.message;
} else {
- state.server_error = err;
+ state.serverError = err;
}
- state.password_error = '';
+ state.passwordError = '';
this.setState(state);
}.bind(this)
);
},
updateCurrentPassword: function(e) {
- this.setState({ current_password: e.target.value });
+ this.setState({currentPassword: e.target.value});
},
updateNewPassword: function(e) {
- this.setState({ new_password: e.target.value });
+ this.setState({newPassword: e.target.value});
},
updateConfirmPassword: function(e) {
- this.setState({ confirm_password: e.target.value });
+ this.setState({confirmPassword: e.target.value});
},
handleHistoryOpen: function() {
- $("#user_settings1").modal('hide');
+ $('#user_settings1').modal('hide');
},
handleDevicesOpen: function() {
- $("#user_settings1").modal('hide');
+ $('#user_settings1').modal('hide');
},
handleClose: function() {
- $(this.getDOMNode()).find(".form-control").each(function() {
- this.value = "";
+ $(this.getDOMNode()).find('.form-control').each(function() {
+ this.value = '';
});
- this.setState({current_password: '', new_password: '', confirm_password: '', server_error: null, password_error: null});
+ this.setState({currentPassword: '', newPassword: '', confirmPassword: '', serverError: null, passwordError: null});
this.props.updateTab('general');
},
componentDidMount: function() {
@@ -533,40 +533,41 @@ var SecurityTab = React.createClass({
this.props.updateSection('');
},
getInitialState: function() {
- return { current_password: '', new_password: '', confirm_password: '' };
+ return {currentPassword: '', newPassword: '', confirmPassword: ''};
},
render: function() {
- var server_error = this.state.server_error ? this.state.server_error : null;
- var password_error = this.state.password_error ? this.state.password_error : null;
+ var serverError = this.state.serverError ? this.state.serverError : null;
+ var passwordError = this.state.passwordError ? this.state.passwordError : null;
+ var updateSectionStatus;
var passwordSection;
var self = this;
if (this.props.activeSection === 'password') {
var inputs = [];
var submit = null;
- if (this.props.user.auth_service === "") {
+ if (this.props.user.auth_service === '') {
inputs.push(
- <div className="form-group">
- <label className="col-sm-5 control-label">Current Password</label>
- <div className="col-sm-7">
- <input className="form-control" type="password" onChange={this.updateCurrentPassword} value={this.state.current_password}/>
+ <div className='form-group'>
+ <label className='col-sm-5 control-label'>Current Password</label>
+ <div className='col-sm-7'>
+ <input className='form-control' type='password' onChange={this.updateCurrentPassword} value={this.state.currentPassword}/>
</div>
</div>
);
inputs.push(
- <div className="form-group">
- <label className="col-sm-5 control-label">New Password</label>
- <div className="col-sm-7">
- <input className="form-control" type="password" onChange={this.updateNewPassword} value={this.state.new_password}/>
+ <div className='form-group'>
+ <label className='col-sm-5 control-label'>New Password</label>
+ <div className='col-sm-7'>
+ <input className='form-control' type='password' onChange={this.updateNewPassword} value={this.state.newPassword}/>
</div>
</div>
);
inputs.push(
- <div className="form-group">
- <label className="col-sm-5 control-label">Retype New Password</label>
- <div className="col-sm-7">
- <input className="form-control" type="password" onChange={this.updateConfirmPassword} value={this.state.confirm_password}/>
+ <div className='form-group'>
+ <label className='col-sm-5 control-label'>Retype New Password</label>
+ <div className='col-sm-7'>
+ <input className='form-control' type='password' onChange={this.updateConfirmPassword} value={this.state.confirmPassword}/>
</div>
</div>
);
@@ -574,58 +575,68 @@ var SecurityTab = React.createClass({
submit = this.submitPassword;
} else {
inputs.push(
- <div className="form-group">
- <label className="col-sm-12">Log in occurs through GitLab. Please see your GitLab account settings page to update your password.</label>
+ <div className='form-group'>
+ <label className='col-sm-12'>Log in occurs through GitLab. Please see your GitLab account settings page to update your password.</label>
</div>
);
}
+ updateSectionStatus = function(e) {
+ self.props.updateSection('');
+ self.setState({currentPassword: '', newPassword: '', confirmPassword: '', serverError: null, passwordError: null});
+ e.preventDefault();
+ };
+
passwordSection = (
<SettingItemMax
- title="Password"
+ title='Password'
inputs={inputs}
submit={submit}
- server_error={server_error}
- client_error={password_error}
- updateSection={function(e){self.props.updateSection("");e.preventDefault();}}
+ server_error={serverError}
+ client_error={passwordError}
+ updateSection={updateSectionStatus}
/>
);
} else {
var describe;
- if (this.props.user.auth_service === "") {
+ if (this.props.user.auth_service === '') {
var d = new Date(this.props.user.last_password_update);
- var hour = d.getHours() % 12 ? String(d.getHours() % 12) : "12";
- var min = d.getMinutes() < 10 ? "0" + d.getMinutes() : String(d.getMinutes());
- var timeOfDay = d.getHours() >= 12 ? " pm" : " am";
- describe = "Last updated " + Constants.MONTHS[d.getMonth()] + " " + d.getDate() + ", " + d.getFullYear() + " at " + hour + ":" + min + timeOfDay;
+ var hour = d.getHours() % 12 ? String(d.getHours() % 12) : '12';
+ var min = d.getMinutes() < 10 ? '0' + d.getMinutes() : String(d.getMinutes());
+ var timeOfDay = d.getHours() >= 12 ? ' pm' : ' am';
+ describe = 'Last updated ' + Constants.MONTHS[d.getMonth()] + ' ' + d.getDate() + ', ' + d.getFullYear() + ' at ' + hour + ':' + min + timeOfDay;
} else {
- describe = "Log in done through GitLab"
+ describe = 'Log in done through GitLab';
}
+ updateSectionStatus = function() {
+ self.props.updateSection('password');
+ };
+
passwordSection = (
<SettingItemMin
- title="Password"
+ title='Password'
describe={describe}
- updateSection={function(){self.props.updateSection("password");}}
+ updateSection={updateSectionStatus}
/>
);
}
return (
<div>
- <div className="modal-header">
- <button type="button" className="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
- <h4 className="modal-title" ref="title"><i className="modal-back"></i>Security Settings</h4>
+ <div className='modal-header'>
+ <button type='button' className='close' data-dismiss='modal' aria-label='Close'><span aria-hidden='true'>&times;</span></button>
+ <h4 className='modal-title' ref='title'><i className='modal-back'></i>Security Settings</h4>
</div>
- <div className="user-settings">
- <h3 className="tab-header">Security Settings</h3>
- <div className="divider-dark first"/>
- { passwordSection }
- <div className="divider-dark"/>
+ <div className='user-settings'>
+ <h3 className='tab-header'>Security Settings</h3>
+ <div className='divider-dark first'/>
+ {passwordSection}
+ <div className='divider-dark'/>
<br></br>
- <a data-toggle="modal" className="security-links theme" data-target="#access-history" href="#" onClick={this.handleHistoryOpen}><i className="fa fa-clock-o"></i>View Access History</a>
- <b> </b>
- <a data-toggle="modal" className="security-links theme" data-target="#activity-log" href="#" onClick={this.handleDevicesOpen}><i className="fa fa-globe"></i>View and Logout of Active Sessions</a>
+ <a data-toggle='modal' className='security-links theme' data-target='#access-history' href='#' onClick={this.handleHistoryOpen}><i className='fa fa-clock-o'></i>View Access History</a>
+ <b> </b>
+ <a data-toggle='modal' className='security-links theme' data-target='#activity-log' href='#' onClick={this.handleDevicesOpen}><i className='fa fa-globe'></i>View and Logout of Active Sessions</a>
</div>
</div>
);