summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--LICENSE.txt4
-rw-r--r--NOTICE.txt2
-rw-r--r--api/admin.go2
-rw-r--r--api/admin_test.go2
-rw-r--r--api/api.go2
-rw-r--r--api/api_test.go2
-rw-r--r--api/auto_channels.go2
-rw-r--r--api/auto_constants.go2
-rw-r--r--api/auto_enviroment.go2
-rw-r--r--api/auto_posts.go2
-rw-r--r--api/auto_teams.go2
-rw-r--r--api/auto_users.go2
-rw-r--r--api/channel.go206
-rw-r--r--api/channel_benchmark_test.go2
-rw-r--r--api/channel_test.go2
-rw-r--r--api/command.go2
-rw-r--r--api/command_test.go2
-rw-r--r--api/context.go2
-rw-r--r--api/context_test.go2
-rw-r--r--api/export.go2
-rw-r--r--api/file.go2
-rw-r--r--api/file_benchmark_test.go2
-rw-r--r--api/file_test.go2
-rw-r--r--api/import.go2
-rw-r--r--api/oauth.go2
-rw-r--r--api/oauth_test.go2
-rw-r--r--api/post.go2
-rw-r--r--api/post_benchmark_test.go2
-rw-r--r--api/post_test.go2
-rw-r--r--api/server.go2
-rw-r--r--api/server_test.go2
-rw-r--r--api/sharding.go2
-rw-r--r--api/slackimport.go2
-rw-r--r--api/team.go4
-rw-r--r--api/team_test.go2
-rw-r--r--api/templates/email_change_body.html5
-rw-r--r--api/templates/email_change_subject.html2
-rw-r--r--api/templates/email_change_verify_body.html56
-rw-r--r--api/templates/email_change_verify_subject.html1
-rw-r--r--api/templates/find_teams_body.html2
-rw-r--r--api/templates/invite_body.html2
-rw-r--r--api/templates/password_change_body.html2
-rw-r--r--api/templates/post_body.html2
-rw-r--r--api/templates/reset_body.html2
-rw-r--r--api/templates/signup_team_body.html2
-rw-r--r--api/templates/verify_body.html2
-rw-r--r--api/templates/welcome_body.html2
-rw-r--r--api/user.go34
-rw-r--r--api/user_test.go2
-rw-r--r--api/web_conn.go2
-rw-r--r--api/web_hub.go2
-rw-r--r--api/web_socket.go2
-rw-r--r--api/web_socket_test.go9
-rw-r--r--api/web_team_hub.go2
-rw-r--r--api/webhook.go2
-rw-r--r--api/webhook_test.go2
-rw-r--r--config/config.json2
-rw-r--r--docker/0.7/Dockerfile2
-rwxr-xr-xdocker/0.7/docker-entry.sh2
-rw-r--r--docker/1.0/Dockerfile2
-rwxr-xr-xdocker/1.0/docker-entry.sh2
-rw-r--r--docker/dev/Dockerfile2
-rw-r--r--docker/dev/config_docker.json2
-rwxr-xr-xdocker/dev/docker-entry.sh2
-rw-r--r--docker/local/Dockerfile2
-rw-r--r--docker/local/config_docker.json2
-rwxr-xr-xdocker/local/docker-entry.sh2
-rw-r--r--manualtesting/manual_testing.go2
-rw-r--r--manualtesting/test_autolink.go2
-rw-r--r--mattermost.go95
-rw-r--r--mkdocs.yml2
-rw-r--r--model/access.go2
-rw-r--r--model/access_test.go2
-rw-r--r--model/audit.go2
-rw-r--r--model/audit_test.go2
-rw-r--r--model/audits.go2
-rw-r--r--model/audits_test.go2
-rw-r--r--model/authorize.go2
-rw-r--r--model/authorize_test.go2
-rw-r--r--model/channel.go2
-rw-r--r--model/channel_count.go2
-rw-r--r--model/channel_data.go2
-rw-r--r--model/channel_extra.go2
-rw-r--r--model/channel_list.go2
-rw-r--r--model/channel_member.go2
-rw-r--r--model/channel_member_test.go2
-rw-r--r--model/channel_test.go2
-rw-r--r--model/client.go2
-rw-r--r--model/command.go2
-rw-r--r--model/command_test.go2
-rw-r--r--model/config.go8
-rw-r--r--model/file.go2
-rw-r--r--model/gitlab.go2
-rw-r--r--model/message.go2
-rw-r--r--model/message_test.go2
-rw-r--r--model/oauth.go2
-rw-r--r--model/oauth_test.go2
-rw-r--r--model/post.go2
-rw-r--r--model/post_list.go2
-rw-r--r--model/post_list_test.go2
-rw-r--r--model/post_test.go2
-rw-r--r--model/security_bulletin.go55
-rw-r--r--model/session.go2
-rw-r--r--model/session_test.go2
-rw-r--r--model/suggest_command.go2
-rw-r--r--model/suggest_command_test.go2
-rw-r--r--model/system.go2
-rw-r--r--model/system_test.go2
-rw-r--r--model/team.go2
-rw-r--r--model/team_signup.go2
-rw-r--r--model/team_signup_test.go2
-rw-r--r--model/team_test.go2
-rw-r--r--model/user.go2
-rw-r--r--model/user_test.go2
-rw-r--r--model/utils.go2
-rw-r--r--model/utils_test.go2
-rw-r--r--model/version.go2
-rw-r--r--model/version_test.go2
-rw-r--r--model/webhook.go2
-rw-r--r--model/webhook_test.go2
-rw-r--r--store/sql_audit_store.go2
-rw-r--r--store/sql_audit_store_test.go2
-rw-r--r--store/sql_channel_store.go2
-rw-r--r--store/sql_channel_store_test.go2
-rw-r--r--store/sql_oauth_store.go2
-rw-r--r--store/sql_oauth_store_test.go2
-rw-r--r--store/sql_post_store.go2
-rw-r--r--store/sql_post_store_test.go2
-rw-r--r--store/sql_session_store.go2
-rw-r--r--store/sql_session_store_test.go2
-rw-r--r--store/sql_store.go2
-rw-r--r--store/sql_store_test.go2
-rw-r--r--store/sql_system_store.go2
-rw-r--r--store/sql_system_store_test.go2
-rw-r--r--store/sql_team_store.go2
-rw-r--r--store/sql_team_store_test.go2
-rw-r--r--store/sql_user_store.go33
-rw-r--r--store/sql_user_store_test.go25
-rw-r--r--store/sql_webhook_store.go2
-rw-r--r--store/sql_webhook_store_test.go2
-rw-r--r--store/store.go3
-rw-r--r--utils/apns.go2
-rw-r--r--utils/config.go3
-rw-r--r--utils/config_test.go2
-rw-r--r--utils/diagnostic.go28
-rw-r--r--utils/mail.go2
-rw-r--r--utils/random.go2
-rw-r--r--utils/textgeneration.go2
-rw-r--r--utils/urlencode.go2
-rw-r--r--web/react/components/about_build_modal.jsx2
-rw-r--r--web/react/components/access_history_modal.jsx2
-rw-r--r--web/react/components/activity_log_modal.jsx2
-rw-r--r--web/react/components/admin_console/admin_controller.jsx2
-rw-r--r--web/react/components/admin_console/admin_navbar_dropdown.jsx2
-rw-r--r--web/react/components/admin_console/admin_sidebar.jsx2
-rw-r--r--web/react/components/admin_console/admin_sidebar_header.jsx2
-rw-r--r--web/react/components/admin_console/email_settings.jsx2
-rw-r--r--web/react/components/admin_console/gitlab_settings.jsx2
-rw-r--r--web/react/components/admin_console/image_settings.jsx2
-rw-r--r--web/react/components/admin_console/log_settings.jsx2
-rw-r--r--web/react/components/admin_console/logs.jsx2
-rw-r--r--web/react/components/admin_console/privacy_settings.jsx18
-rw-r--r--web/react/components/admin_console/rate_settings.jsx2
-rw-r--r--web/react/components/admin_console/reset_password_modal.jsx2
-rw-r--r--web/react/components/admin_console/select_team_modal.jsx2
-rw-r--r--web/react/components/admin_console/service_settings.jsx2
-rw-r--r--web/react/components/admin_console/sql_settings.jsx2
-rw-r--r--web/react/components/admin_console/team_settings.jsx2
-rw-r--r--web/react/components/admin_console/team_users.jsx2
-rw-r--r--web/react/components/admin_console/user_item.jsx2
-rw-r--r--web/react/components/authorize.jsx2
-rw-r--r--web/react/components/change_url_modal.jsx2
-rw-r--r--web/react/components/channel_header.jsx6
-rw-r--r--web/react/components/channel_info_modal.jsx2
-rw-r--r--web/react/components/channel_invite_modal.jsx2
-rw-r--r--web/react/components/channel_loader.jsx2
-rw-r--r--web/react/components/channel_members.jsx2
-rw-r--r--web/react/components/channel_notifications.jsx2
-rw-r--r--web/react/components/command_list.jsx2
-rw-r--r--web/react/components/confirm_modal.jsx2
-rw-r--r--web/react/components/create_comment.jsx2
-rw-r--r--web/react/components/create_post.jsx2
-rw-r--r--web/react/components/delete_channel_modal.jsx2
-rw-r--r--web/react/components/delete_post_modal.jsx2
-rw-r--r--web/react/components/edit_channel_modal.jsx2
-rw-r--r--web/react/components/edit_post_modal.jsx2
-rw-r--r--web/react/components/email_verify.jsx2
-rw-r--r--web/react/components/error_bar.jsx2
-rw-r--r--web/react/components/file_attachment.jsx2
-rw-r--r--web/react/components/file_attachment_list.jsx2
-rw-r--r--web/react/components/file_preview.jsx2
-rw-r--r--web/react/components/file_upload.jsx2
-rw-r--r--web/react/components/file_upload_overlay.jsx2
-rw-r--r--web/react/components/find_team.jsx2
-rw-r--r--web/react/components/get_link_modal.jsx2
-rw-r--r--web/react/components/invite_member_modal.jsx2
-rw-r--r--web/react/components/loading_screen.jsx2
-rw-r--r--web/react/components/login.jsx2
-rw-r--r--web/react/components/member_list.jsx2
-rw-r--r--web/react/components/member_list_item.jsx2
-rw-r--r--web/react/components/member_list_team.jsx2
-rw-r--r--web/react/components/member_list_team_item.jsx2
-rw-r--r--web/react/components/mention.jsx2
-rw-r--r--web/react/components/mention_list.jsx2
-rw-r--r--web/react/components/message_wrapper.jsx2
-rw-r--r--web/react/components/more_channels.jsx2
-rw-r--r--web/react/components/more_direct_channels.jsx2
-rw-r--r--web/react/components/msg_typing.jsx2
-rw-r--r--web/react/components/navbar.jsx2
-rw-r--r--web/react/components/navbar_dropdown.jsx2
-rw-r--r--web/react/components/new_channel_flow.jsx2
-rw-r--r--web/react/components/new_channel_modal.jsx2
-rw-r--r--web/react/components/notify_counts.jsx2
-rw-r--r--web/react/components/password_reset.jsx2
-rw-r--r--web/react/components/password_reset_form.jsx2
-rw-r--r--web/react/components/password_reset_send_link.jsx2
-rw-r--r--web/react/components/popover_list_members.jsx2
-rw-r--r--web/react/components/post.jsx2
-rw-r--r--web/react/components/post_body.jsx2
-rw-r--r--web/react/components/post_deleted_modal.jsx2
-rw-r--r--web/react/components/post_header.jsx2
-rw-r--r--web/react/components/post_info.jsx2
-rw-r--r--web/react/components/post_list.jsx10
-rw-r--r--web/react/components/post_list_container.jsx2
-rw-r--r--web/react/components/register_app_modal.jsx2
-rw-r--r--web/react/components/removed_from_channel_modal.jsx10
-rw-r--r--web/react/components/rename_channel_modal.jsx2
-rw-r--r--web/react/components/rhs_comment.jsx2
-rw-r--r--web/react/components/rhs_header_post.jsx2
-rw-r--r--web/react/components/rhs_root_post.jsx2
-rw-r--r--web/react/components/rhs_thread.jsx2
-rw-r--r--web/react/components/search_bar.jsx2
-rw-r--r--web/react/components/search_results.jsx2
-rw-r--r--web/react/components/search_results_header.jsx2
-rw-r--r--web/react/components/search_results_item.jsx2
-rw-r--r--web/react/components/setting_item_max.jsx2
-rw-r--r--web/react/components/setting_item_min.jsx2
-rw-r--r--web/react/components/setting_picture.jsx2
-rw-r--r--web/react/components/setting_upload.jsx2
-rw-r--r--web/react/components/settings_sidebar.jsx2
-rw-r--r--web/react/components/sidebar.jsx4
-rw-r--r--web/react/components/sidebar_header.jsx2
-rw-r--r--web/react/components/sidebar_right.jsx2
-rw-r--r--web/react/components/sidebar_right_menu.jsx2
-rw-r--r--web/react/components/signup_team.jsx2
-rw-r--r--web/react/components/signup_team_complete.jsx2
-rw-r--r--web/react/components/signup_user_complete.jsx2
-rw-r--r--web/react/components/team_export_tab.jsx2
-rw-r--r--web/react/components/team_general_tab.jsx2
-rw-r--r--web/react/components/team_import_tab.jsx2
-rw-r--r--web/react/components/team_members.jsx2
-rw-r--r--web/react/components/team_settings.jsx2
-rw-r--r--web/react/components/team_settings_modal.jsx2
-rw-r--r--web/react/components/team_signup_choose_auth.jsx2
-rw-r--r--web/react/components/team_signup_display_name_page.jsx2
-rw-r--r--web/react/components/team_signup_email_item.jsx2
-rw-r--r--web/react/components/team_signup_password_page.jsx2
-rw-r--r--web/react/components/team_signup_send_invites_page.jsx2
-rw-r--r--web/react/components/team_signup_url_page.jsx2
-rw-r--r--web/react/components/team_signup_username_page.jsx2
-rw-r--r--web/react/components/team_signup_welcome_page.jsx2
-rw-r--r--web/react/components/team_signup_with_email.jsx20
-rw-r--r--web/react/components/team_signup_with_sso.jsx10
-rw-r--r--web/react/components/textbox.jsx2
-rw-r--r--web/react/components/unread_channel_indicator.jsx2
-rw-r--r--web/react/components/user_profile.jsx2
-rw-r--r--web/react/components/user_settings/custom_theme_chooser.jsx2
-rw-r--r--web/react/components/user_settings/import_theme_modal.jsx2
-rw-r--r--web/react/components/user_settings/manage_incoming_hooks.jsx2
-rw-r--r--web/react/components/user_settings/premade_theme_chooser.jsx2
-rw-r--r--web/react/components/user_settings/user_settings.jsx2
-rw-r--r--web/react/components/user_settings/user_settings_appearance.jsx2
-rw-r--r--web/react/components/user_settings/user_settings_developer.jsx2
-rw-r--r--web/react/components/user_settings/user_settings_general.jsx71
-rw-r--r--web/react/components/user_settings/user_settings_integrations.jsx2
-rw-r--r--web/react/components/user_settings/user_settings_modal.jsx2
-rw-r--r--web/react/components/user_settings/user_settings_notifications.jsx2
-rw-r--r--web/react/components/user_settings/user_settings_security.jsx2
-rw-r--r--web/react/components/view_image.jsx2
-rw-r--r--web/react/components/view_image_popover_bar.jsx2
-rw-r--r--web/react/dispatcher/app_dispatcher.jsx2
-rw-r--r--web/react/pages/admin_console.jsx2
-rw-r--r--web/react/pages/authorize.jsx2
-rw-r--r--web/react/pages/channel.jsx2
-rw-r--r--web/react/pages/find_team.jsx2
-rw-r--r--web/react/pages/home.jsx2
-rw-r--r--web/react/pages/login.jsx2
-rw-r--r--web/react/pages/password_reset.jsx2
-rw-r--r--web/react/pages/signup_team.jsx2
-rw-r--r--web/react/pages/signup_team_complete.jsx2
-rw-r--r--web/react/pages/signup_user_complete.jsx2
-rw-r--r--web/react/pages/verify.jsx2
-rw-r--r--web/react/stores/admin_store.jsx2
-rw-r--r--web/react/stores/browser_store.jsx2
-rw-r--r--web/react/stores/channel_store.jsx2
-rw-r--r--web/react/stores/error_store.jsx2
-rw-r--r--web/react/stores/post_store.jsx2
-rw-r--r--web/react/stores/socket_store.jsx2
-rw-r--r--web/react/stores/team_store.jsx2
-rw-r--r--web/react/stores/user_store.jsx2
-rw-r--r--web/react/utils/async_client.jsx2
-rw-r--r--web/react/utils/constants.jsx2
-rw-r--r--web/react/utils/emoticons.jsx50
-rw-r--r--web/react/utils/markdown.jsx12
-rw-r--r--web/react/utils/text_formatting.jsx9
-rw-r--r--web/react/utils/utils.jsx2
-rw-r--r--web/sass-files/sass/partials/_settings.scss1
-rw-r--r--web/templates/footer.html2
-rw-r--r--web/web.go28
-rw-r--r--web/web_test.go2
310 files changed, 842 insertions, 538 deletions
diff --git a/LICENSE.txt b/LICENSE.txt
index f7e182eac..c0c337525 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -5,7 +5,7 @@ SOFTWARE LICENSING
Mattermost server is made available under two separate licensing options:
- Free Software Foundation’s GNU AGPL v.3.0, subject to the exceptions outlined in this policy; or
-- Commercial licenses available from SpinPunch, Inc. by contacting commercial@mattermost.com
+- Commercial licenses available from Mattermost, Inc. by contacting commercial@mattermost.com
Admin Tools and Configuration Files (api/templates/, config/, model/, web/react/utils/, web/static/, web/templates/ and all
subdirectories thereof) are made available under:
@@ -33,7 +33,7 @@ commercial licenses are available from commercial@mattermost.com.
MATTERMOST TRADEMARK GUIDELINES
-Your use of the mark Mattermost is subject to SpinPunch’s prior written approval and our organization’s Trademark
+Your use of the mark Mattermost is subject to Mattermost, Inc's prior written approval and our organization’s Trademark
Standards of Use at http://www.mattermost.org/trademark-standards-of-use/. For trademark approval or any questions
you have about using these trademarks, please email trademark@mattermost.com
diff --git a/NOTICE.txt b/NOTICE.txt
index f908bbd28..cc9e35af8 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -1,5 +1,5 @@
Mattermost Platform
-© 2015 Spinpunch, Inc. All Rights Reserved. See LICENSE.txt for license information.
+© 2015 Mattermost, Inc. All Rights Reserved. See LICENSE.txt for license information.
NOTICES:
--------
diff --git a/api/admin.go b/api/admin.go
index d9714d6d2..2167868e0 100644
--- a/api/admin.go
+++ b/api/admin.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/admin_test.go b/api/admin_test.go
index ad7ac08f8..0e51644d8 100644
--- a/api/admin_test.go
+++ b/api/admin_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/api.go b/api/api.go
index a50cce946..5c3c0d8c6 100644
--- a/api/api.go
+++ b/api/api.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/api_test.go b/api/api_test.go
index 761f3e33f..bea949ad2 100644
--- a/api/api_test.go
+++ b/api/api_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/auto_channels.go b/api/auto_channels.go
index b72e5d538..ab1fe6ed3 100644
--- a/api/auto_channels.go
+++ b/api/auto_channels.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/auto_constants.go b/api/auto_constants.go
index 73ecb47f8..f5d5dab0c 100644
--- a/api/auto_constants.go
+++ b/api/auto_constants.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/auto_enviroment.go b/api/auto_enviroment.go
index dd663533c..c6453f5da 100644
--- a/api/auto_enviroment.go
+++ b/api/auto_enviroment.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/auto_posts.go b/api/auto_posts.go
index a014d22ae..b64217c55 100644
--- a/api/auto_posts.go
+++ b/api/auto_posts.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/auto_teams.go b/api/auto_teams.go
index dd82abe8d..6677ac9bf 100644
--- a/api/auto_teams.go
+++ b/api/auto_teams.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/auto_users.go b/api/auto_users.go
index 39ed201b9..d1e3d494e 100644
--- a/api/auto_users.go
+++ b/api/auto_users.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/channel.go b/api/channel.go
index 0d22d7c00..adf125378 100644
--- a/api/channel.go
+++ b/api/channel.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
@@ -26,11 +26,11 @@ func InitChannel(r *mux.Router) {
sr.Handle("/update_notify_props", ApiUserRequired(updateNotifyProps)).Methods("POST")
sr.Handle("/{id:[A-Za-z0-9]+}/", ApiUserRequiredActivity(getChannel, false)).Methods("GET")
sr.Handle("/{id:[A-Za-z0-9]+}/extra_info", ApiUserRequired(getChannelExtraInfo)).Methods("GET")
- sr.Handle("/{id:[A-Za-z0-9]+}/join", ApiUserRequired(joinChannel)).Methods("POST")
- sr.Handle("/{id:[A-Za-z0-9]+}/leave", ApiUserRequired(leaveChannel)).Methods("POST")
+ sr.Handle("/{id:[A-Za-z0-9]+}/join", ApiUserRequired(join)).Methods("POST")
+ sr.Handle("/{id:[A-Za-z0-9]+}/leave", ApiUserRequired(leave)).Methods("POST")
sr.Handle("/{id:[A-Za-z0-9]+}/delete", ApiUserRequired(deleteChannel)).Methods("POST")
- sr.Handle("/{id:[A-Za-z0-9]+}/add", ApiUserRequired(addChannelMember)).Methods("POST")
- sr.Handle("/{id:[A-Za-z0-9]+}/remove", ApiUserRequired(removeChannelMember)).Methods("POST")
+ sr.Handle("/{id:[A-Za-z0-9]+}/add", ApiUserRequired(addMember)).Methods("POST")
+ sr.Handle("/{id:[A-Za-z0-9]+}/remove", ApiUserRequired(removeMember)).Methods("POST")
sr.Handle("/{id:[A-Za-z0-9]+}/update_last_viewed_at", ApiUserRequired(updateLastViewedAt)).Methods("POST")
}
@@ -329,7 +329,7 @@ func getChannelCounts(c *Context, w http.ResponseWriter, r *http.Request) {
}
}
-func joinChannel(c *Context, w http.ResponseWriter, r *http.Request) {
+func join(c *Context, w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
channelId := params["id"]
@@ -360,43 +360,62 @@ func JoinChannel(c *Context, channelId string, role string) {
channel := cresult.Data.(*model.Channel)
user := uresult.Data.(*model.User)
- if !c.HasPermissionsToTeam(channel.TeamId, "joinChannel") {
- return
- }
-
- if channel.DeleteAt > 0 {
- c.Err = model.NewAppError("joinChannel", "The channel has been archived or deleted", "")
- c.Err.StatusCode = http.StatusBadRequest
+ if !c.HasPermissionsToTeam(channel.TeamId, "join") {
return
}
if channel.Type == model.CHANNEL_OPEN {
- cm := &model.ChannelMember{ChannelId: channel.Id, UserId: c.Session.UserId,
- Roles: role, NotifyProps: model.GetDefaultChannelNotifyProps()}
-
- if cmresult := <-Srv.Store.Channel().SaveMember(cm); cmresult.Err != nil {
- c.Err = cmresult.Err
- return
- }
-
- post := &model.Post{ChannelId: channel.Id, Message: fmt.Sprintf(
- `User %v has joined this channel.`,
- user.Username), Type: model.POST_JOIN_LEAVE}
- if _, err := CreatePost(c, post, false); err != nil {
- l4g.Error("Failed to post join message %v", err)
- c.Err = model.NewAppError("joinChannel", "Failed to send join request", "")
+ if _, err := AddUserToChannel(user, channel); err != nil {
+ c.Err = err
return
}
-
- UpdateChannelAccessCacheAndForget(c.Session.TeamId, c.Session.UserId, channel.Id)
+ PostUserAddRemoveMessageAndForget(c, channel.Id, fmt.Sprintf(`User %v has joined this channel.`, user.Username))
} else {
- c.Err = model.NewAppError("joinChannel", "You do not have the appropriate permissions", "")
+ c.Err = model.NewAppError("join", "You do not have the appropriate permissions", "")
c.Err.StatusCode = http.StatusForbidden
return
}
}
}
+func PostUserAddRemoveMessageAndForget(c *Context, channelId string, message string) {
+ go func() {
+ post := &model.Post{
+ ChannelId: channelId,
+ Message: message,
+ Type: model.POST_JOIN_LEAVE,
+ }
+ if _, err := CreatePost(c, post, false); err != nil {
+ l4g.Error("Failed to post join/leave message %v", err)
+ }
+ }()
+}
+
+func AddUserToChannel(user *model.User, channel *model.Channel) (*model.ChannelMember, *model.AppError) {
+ if channel.DeleteAt > 0 {
+ return nil, model.NewAppError("AddUserToChannel", "The channel has been archived or deleted", "")
+ }
+
+ if channel.Type != model.CHANNEL_OPEN && channel.Type != model.CHANNEL_PRIVATE {
+ return nil, model.NewAppError("AddUserToChannel", "Can not add user to this channel type", "")
+ }
+
+ newMember := &model.ChannelMember{ChannelId: channel.Id, UserId: user.Id, NotifyProps: model.GetDefaultChannelNotifyProps()}
+ if cmresult := <-Srv.Store.Channel().SaveMember(newMember); cmresult.Err != nil {
+ l4g.Error("Failed to add member user_id=%v channel_id=%v err=%v", user.Id, channel.Id, cmresult.Err)
+ return nil, model.NewAppError("AddUserToChannel", "Failed to add user to channel", "")
+ }
+
+ go func() {
+ UpdateChannelAccessCache(channel.TeamId, user.Id, channel.Id)
+
+ message := model.NewMessage(channel.TeamId, channel.Id, user.Id, model.ACTION_USER_ADDED)
+ PublishAndForget(message)
+ }()
+
+ return newMember, nil
+}
+
func JoinDefaultChannels(user *model.User, channelRole string) *model.AppError {
// We don't call JoinChannel here since c.Session is not populated on user creation
@@ -427,7 +446,7 @@ func JoinDefaultChannels(user *model.User, channelRole string) *model.AppError {
return err
}
-func leaveChannel(c *Context, w http.ResponseWriter, r *http.Request) {
+func leave(c *Context, w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
id := params["id"]
@@ -445,24 +464,18 @@ func leaveChannel(c *Context, w http.ResponseWriter, r *http.Request) {
channel := cresult.Data.(*model.Channel)
user := uresult.Data.(*model.User)
- if !c.HasPermissionsToTeam(channel.TeamId, "leaveChannel") {
- return
- }
-
- if channel.DeleteAt > 0 {
- c.Err = model.NewAppError("leaveChannel", "The channel has been archived or deleted", "")
- c.Err.StatusCode = http.StatusBadRequest
+ if !c.HasPermissionsToTeam(channel.TeamId, "leave") {
return
}
if channel.Type == model.CHANNEL_DIRECT {
- c.Err = model.NewAppError("leaveChannel", "Cannot leave a direct message channel", "")
+ c.Err = model.NewAppError("leave", "Cannot leave a direct message channel", "")
c.Err.StatusCode = http.StatusForbidden
return
}
if channel.Name == model.DEFAULT_CHANNEL {
- c.Err = model.NewAppError("leaveChannel", "Cannot leave the default channel "+model.DEFAULT_CHANNEL, "")
+ c.Err = model.NewAppError("leave", "Cannot leave the default channel "+model.DEFAULT_CHANNEL, "")
c.Err.StatusCode = http.StatusForbidden
return
}
@@ -472,16 +485,9 @@ func leaveChannel(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- UpdateChannelAccessCacheAndForget(c.Session.TeamId, c.Session.UserId, channel.Id)
+ RemoveUserFromChannel(c.Session.UserId, c.Session.UserId, channel)
- post := &model.Post{ChannelId: channel.Id, Message: fmt.Sprintf(
- `%v has left the channel.`,
- user.Username), Type: model.POST_JOIN_LEAVE}
- if _, err := CreatePost(c, post, false); err != nil {
- l4g.Error("Failed to post leave message %v", err)
- c.Err = model.NewAppError("leaveChannel", "Failed to send leave message", "")
- return
- }
+ PostUserAddRemoveMessageAndForget(c, channel.Id, fmt.Sprintf(`%v has left the channel.`, user.Username))
result := make(map[string]string)
result["id"] = channel.Id
@@ -656,7 +662,7 @@ func getChannelExtraInfo(c *Context, w http.ResponseWriter, r *http.Request) {
}
}
-func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
+func addMember(c *Context, w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
id := params["id"]
@@ -664,7 +670,7 @@ func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
userId := data["user_id"]
if len(userId) != 26 {
- c.SetInvalidParam("addChannelMember", "user_id")
+ c.SetInvalidParam("addMember", "user_id")
return
}
@@ -674,55 +680,35 @@ func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
nuc := Srv.Store.User().Get(userId)
// Only need to be a member of the channel to add a new member
- if !c.HasPermissionsToChannel(cchan, "addChannelMember") {
+ if !c.HasPermissionsToChannel(cchan, "addMember") {
return
}
if nresult := <-nuc; nresult.Err != nil {
- c.Err = model.NewAppError("addChannelMember", "Failed to find user to be added", "")
+ c.Err = model.NewAppError("addMember", "Failed to find user to be added", "")
return
} else if cresult := <-sc; cresult.Err != nil {
- c.Err = model.NewAppError("addChannelMember", "Failed to find channel", "")
+ c.Err = model.NewAppError("addMember", "Failed to find channel", "")
return
} else {
channel := cresult.Data.(*model.Channel)
nUser := nresult.Data.(*model.User)
- if channel.DeleteAt > 0 {
- c.Err = model.NewAppError("updateChannel", "The channel has been archived or deleted", "")
- c.Err.StatusCode = http.StatusBadRequest
- return
- }
-
if oresult := <-ouc; oresult.Err != nil {
- c.Err = model.NewAppError("addChannelMember", "Failed to find user doing the adding", "")
+ c.Err = model.NewAppError("addMember", "Failed to find user doing the adding", "")
return
} else {
oUser := oresult.Data.(*model.User)
- cm := &model.ChannelMember{ChannelId: channel.Id, UserId: userId, NotifyProps: model.GetDefaultChannelNotifyProps()}
-
- if cmresult := <-Srv.Store.Channel().SaveMember(cm); cmresult.Err != nil {
- l4g.Error("Failed to add member user_id=%v channel_id=%v err=%v", userId, id, cmresult.Err)
- c.Err = model.NewAppError("addChannelMember", "Failed to add user to channel", "")
+ cm, err := AddUserToChannel(nUser, channel)
+ if err != nil {
+ c.Err = err
return
}
c.LogAudit("name=" + channel.Name + " user_id=" + userId)
- go func() {
- post := &model.Post{ChannelId: id, Message: fmt.Sprintf(
- `%v added to the channel by %v`,
- nUser.Username, oUser.Username), Type: model.POST_JOIN_LEAVE}
- if _, err := CreatePost(c, post, false); err != nil {
- l4g.Error("Failed to post add member to channel message, err=%v", err)
- }
-
- UpdateChannelAccessCache(c.Session.TeamId, userId, channel.Id)
- message := model.NewMessage(c.Session.TeamId, channel.Id, userId, model.ACTION_USER_ADDED)
-
- PublishAndForget(message)
- }()
+ PostUserAddRemoveMessageAndForget(c, channel.Id, fmt.Sprintf(`%v added to the channel by %v`, nUser.Username, oUser.Username))
<-Srv.Store.Channel().UpdateLastViewedAt(id, oUser.Id)
w.Write([]byte(cm.ToJson()))
@@ -730,20 +716,20 @@ func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
}
}
-func removeChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
+func removeMember(c *Context, w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
- id := params["id"]
+ channelId := params["id"]
data := model.MapFromJson(r.Body)
- userId := data["user_id"]
+ userIdToRemove := data["user_id"]
- if len(userId) != 26 {
- c.SetInvalidParam("addChannelMember", "user_id")
+ if len(userIdToRemove) != 26 {
+ c.SetInvalidParam("removeMember", "user_id")
return
}
- sc := Srv.Store.Channel().Get(id)
- cmc := Srv.Store.Channel().GetMember(id, c.Session.UserId)
+ sc := Srv.Store.Channel().Get(channelId)
+ cmc := Srv.Store.Channel().GetMember(channelId, c.Session.UserId)
if cresult := <-sc; cresult.Err != nil {
c.Err = cresult.Err
@@ -753,48 +739,52 @@ func removeChannelMember(c *Context, w http.ResponseWriter, r *http.Request) {
return
} else {
channel := cresult.Data.(*model.Channel)
- channelMember := cmcresult.Data.(model.ChannelMember)
+ removerChannelMember := cmcresult.Data.(model.ChannelMember)
- if !c.HasPermissionsToTeam(channel.TeamId, "removeChannelMember") {
+ if !c.HasPermissionsToTeam(channel.TeamId, "removeMember") {
return
}
- if !strings.Contains(channelMember.Roles, model.CHANNEL_ROLE_ADMIN) && !strings.Contains(c.Session.Roles, model.ROLE_TEAM_ADMIN) {
+ if !strings.Contains(removerChannelMember.Roles, model.CHANNEL_ROLE_ADMIN) && !c.IsTeamAdmin() {
c.Err = model.NewAppError("updateChannel", "You do not have the appropriate permissions ", "")
c.Err.StatusCode = http.StatusForbidden
return
}
- if channel.DeleteAt > 0 {
- c.Err = model.NewAppError("updateChannel", "The channel has been archived or deleted", "")
- c.Err.StatusCode = http.StatusBadRequest
+ if err := RemoveUserFromChannel(userIdToRemove, c.Session.UserId, channel); err != nil {
+ c.Err = model.NewAppError("updateChannel", "Unable to remove user.", err.Message)
return
}
- if cmresult := <-Srv.Store.Channel().RemoveMember(id, userId); cmresult.Err != nil {
- c.Err = cmresult.Err
- return
- }
-
- c.LogAudit("name=" + channel.Name + " user_id=" + userId)
-
- go func() {
- UpdateChannelAccessCache(c.Session.TeamId, userId, id)
-
- message := model.NewMessage(c.Session.TeamId, "", userId, model.ACTION_USER_REMOVED)
- message.Add("channel_id", id)
- message.Add("remover", c.Session.UserId)
- PublishAndForget(message)
- }()
+ c.LogAudit("name=" + channel.Name + " user_id=" + userIdToRemove)
result := make(map[string]string)
result["channel_id"] = channel.Id
- result["removed_user_id"] = userId
+ result["removed_user_id"] = userIdToRemove
w.Write([]byte(model.MapToJson(result)))
}
}
+func RemoveUserFromChannel(userIdToRemove string, removerUserId string, channel *model.Channel) *model.AppError {
+ if channel.DeleteAt > 0 {
+ return model.NewAppError("updateChannel", "The channel has been archived or deleted", "")
+ }
+
+ if cmresult := <-Srv.Store.Channel().RemoveMember(channel.Id, userIdToRemove); cmresult.Err != nil {
+ return cmresult.Err
+ }
+
+ UpdateChannelAccessCacheAndForget(channel.TeamId, userIdToRemove, channel.Id)
+
+ message := model.NewMessage(channel.TeamId, "", userIdToRemove, model.ACTION_USER_REMOVED)
+ message.Add("channel_id", channel.Id)
+ message.Add("remover", removerUserId)
+ PublishAndForget(message)
+
+ return nil
+}
+
func updateNotifyProps(c *Context, w http.ResponseWriter, r *http.Request) {
data := model.MapFromJson(r.Body)
diff --git a/api/channel_benchmark_test.go b/api/channel_benchmark_test.go
index 7820f4a03..58e3fa18d 100644
--- a/api/channel_benchmark_test.go
+++ b/api/channel_benchmark_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/channel_test.go b/api/channel_test.go
index e6c7ed80e..899016065 100644
--- a/api/channel_test.go
+++ b/api/channel_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/command.go b/api/command.go
index 427922344..94b2cd2f8 100644
--- a/api/command.go
+++ b/api/command.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/command_test.go b/api/command_test.go
index 360c4da58..476748c6b 100644
--- a/api/command_test.go
+++ b/api/command_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/context.go b/api/context.go
index e80582b2a..bd9744bf8 100644
--- a/api/context.go
+++ b/api/context.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/context_test.go b/api/context_test.go
index 23a5b75b9..a9e2afa0f 100644
--- a/api/context_test.go
+++ b/api/context_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/export.go b/api/export.go
index aff34073f..fa9686005 100644
--- a/api/export.go
+++ b/api/export.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/file.go b/api/file.go
index bb9aa00d8..9ebcd821b 100644
--- a/api/file.go
+++ b/api/file.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/file_benchmark_test.go b/api/file_benchmark_test.go
index 47f8bff43..a02bffa0e 100644
--- a/api/file_benchmark_test.go
+++ b/api/file_benchmark_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/file_test.go b/api/file_test.go
index 657c08131..b337eadc4 100644
--- a/api/file_test.go
+++ b/api/file_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/import.go b/api/import.go
index c465825b4..81de78975 100644
--- a/api/import.go
+++ b/api/import.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/oauth.go b/api/oauth.go
index 26c3c5da8..5753db8bd 100644
--- a/api/oauth.go
+++ b/api/oauth.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/oauth_test.go b/api/oauth_test.go
index 18db49bc5..64d9c6fd9 100644
--- a/api/oauth_test.go
+++ b/api/oauth_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/post.go b/api/post.go
index 65dad0eb6..58fd3488a 100644
--- a/api/post.go
+++ b/api/post.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/post_benchmark_test.go b/api/post_benchmark_test.go
index 861c687fb..00eb3c468 100644
--- a/api/post_benchmark_test.go
+++ b/api/post_benchmark_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/post_test.go b/api/post_test.go
index 358611240..1971b6114 100644
--- a/api/post_test.go
+++ b/api/post_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/server.go b/api/server.go
index 3f23d8df6..347f0e2c9 100644
--- a/api/server.go
+++ b/api/server.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/server_test.go b/api/server_test.go
index 2d1d57392..a9837203f 100644
--- a/api/server_test.go
+++ b/api/server_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/sharding.go b/api/sharding.go
index 569d3a232..2a5db408c 100644
--- a/api/sharding.go
+++ b/api/sharding.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/slackimport.go b/api/slackimport.go
index 4e6c01dbb..06032c068 100644
--- a/api/slackimport.go
+++ b/api/slackimport.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/team.go b/api/team.go
index bb60e0720..6aa5ec1bb 100644
--- a/api/team.go
+++ b/api/team.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
@@ -248,7 +248,7 @@ func createTeam(c *Context, w http.ResponseWriter, r *http.Request) {
func CreateTeam(c *Context, team *model.Team) *model.Team {
if !utils.Cfg.EmailSettings.EnableSignUpWithEmail {
c.Err = model.NewAppError("createTeam", "Team sign-up with email is disabled.", "")
- c.Err.StatusCode = http.StatusNotImplemented
+ c.Err.StatusCode = http.StatusForbidden
return nil
}
diff --git a/api/team_test.go b/api/team_test.go
index e2a7cf430..9b701911b 100644
--- a/api/team_test.go
+++ b/api/team_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/templates/email_change_body.html b/api/templates/email_change_body.html
index ac3f0dd13..41fd6e4c3 100644
--- a/api/templates/email_change_body.html
+++ b/api/templates/email_change_body.html
@@ -18,7 +18,7 @@
<tr>
<td style="border-bottom: 1px solid #ddd; padding: 0 0 20px;">
<h2 style="font-weight: normal; margin-top: 10px;">You updated your email</h2>
- <p>You updated your email for {{.Props.TeamDisplayName}} on {{ .Props.TeamURL }}<br> If this change wasn't initiated by you, please reply to this email and let us know.</p>
+ <p>You email address for {{.Props.TeamDisplayName}} has been changed to {{.Props.NewEmail}}.<br>If you did not make this change, please contact the system administrator.</p>
</td>
</tr>
<tr>
@@ -37,7 +37,7 @@
<img width="65" src="{{.Props.SiteURL}}/static/images/circles.png" alt="">
</p>
<p style="padding: 0 50px;">
- (c) 2015 SpinPunch, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
+ (c) 2015 Mattermost, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
If you no longer wish to receive these emails, click on the following link: <a href="mailto:{{.ClientProps.FeedbackEmail}}?subject=Unsubscribe&body=Unsubscribe" style="text-decoration: none; color:#2389D7;">Unsubscribe</a>
</p>
</td>
@@ -51,4 +51,3 @@
</table>
{{end}}
-
diff --git a/api/templates/email_change_subject.html b/api/templates/email_change_subject.html
index 5690b148a..962ae868e 100644
--- a/api/templates/email_change_subject.html
+++ b/api/templates/email_change_subject.html
@@ -1 +1 @@
-{{define "email_change_subject"}}You updated your email for {{.Props.TeamDisplayName}} on {{ .Props.Domain }}{{end}}
+{{define "email_change_subject"}}[{{.ClientProps.SiteName}}] Your email address has changed for {{.Props.TeamDisplayName}}{{end}}
diff --git a/api/templates/email_change_verify_body.html b/api/templates/email_change_verify_body.html
new file mode 100644
index 000000000..1e1bcc22d
--- /dev/null
+++ b/api/templates/email_change_verify_body.html
@@ -0,0 +1,56 @@
+{{define "email_change_verify_body"}}
+
+<table align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="margin-top: 20px; line-height: 1.7; color: #555;">
+ <tr>
+ <td>
+ <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 660px; font-family: Helvetica, Arial, sans-serif; font-size: 14px; background: #FFF;">
+ <tr>
+ <td style="border: 1px solid #ddd;">
+ <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;">
+ <tr>
+ <td style="padding: 20px 20px 10px; text-align:left;">
+ <img src="{{.Props.SiteURL}}/static/images/{{.ClientProps.SiteName}}-logodark.png" width="130px" style="opacity: 0.5" alt="">
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table border="0" cellpadding="0" cellspacing="0" style="padding: 20px 50px 0; text-align: center; margin: 0 auto">
+ <tr>
+ <td style="border-bottom: 1px solid #ddd; padding: 0 0 20px;">
+ <h2 style="font-weight: normal; margin-top: 10px;">You updated your email</h2>
+ <p>To finish updating your email address for {{.Props.TeamDisplayName}}, please click the link below to confirm this is the right address.</p>
+ <p style="margin: 20px 0 15px">
+ <a href="{{.Props.VerifyUrl}}" style="background: #2389D7; border-radius: 3px; color: #fff; border: none; outline: none; min-width: 200px; padding: 15px 25px; font-size: 14px; font-family: inherit; cursor: pointer; -webkit-appearance: none;text-decoration: none;">Verify Email</a>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td style="color: #999; padding-top: 20px; line-height: 25px; font-size: 13px;">
+ Any questions at all, mail us any time: <a href="mailto:{{.ClientProps.FeedbackEmail}}" style="text-decoration: none; color:#2389D7;">{{.ClientProps.FeedbackEmail}}</a>.<br>
+ Best wishes,<br>
+ The {{.ClientProps.SiteName}} Team<br>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="text-align: center;color: #AAA; font-size: 11px; padding-bottom: 10px;">
+ <p style="margin: 25px 0;">
+ <img width="65" src="{{.Props.SiteURL}}/static/images/circles.png" alt="">
+ </p>
+ <p style="padding: 0 50px;">
+ (c) 2015 Mattermost, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
+ If you no longer wish to receive these emails, click on the following link: <a href="mailto:{{.ClientProps.FeedbackEmail}}?subject=Unsubscribe&body=Unsubscribe" style="text-decoration: none; color:#2389D7;">Unsubscribe</a>
+ </p>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+</table>
+
+{{end}}
diff --git a/api/templates/email_change_verify_subject.html b/api/templates/email_change_verify_subject.html
new file mode 100644
index 000000000..5e2ac1452
--- /dev/null
+++ b/api/templates/email_change_verify_subject.html
@@ -0,0 +1 @@
+{{define "email_change_verify_subject"}}[{{.ClientProps.SiteName}}] Verify new email address for {{.Props.TeamDisplayName}}{{end}}
diff --git a/api/templates/find_teams_body.html b/api/templates/find_teams_body.html
index 3046ee5f8..41f9dac01 100644
--- a/api/templates/find_teams_body.html
+++ b/api/templates/find_teams_body.html
@@ -45,7 +45,7 @@
<img width="65" src="{{.ClientProps.SiteURL}}/static/images/circles.png" alt="">
</p>
<p style="padding: 0 50px;">
- (c) 2015 SpinPunch, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
+ (c) 2015 Mattermost, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
If you no longer wish to receive these emails, click on the following link: <a href="mailto:{{.ClientProps.FeedbackEmail}}?subject=Unsubscribe&body=Unsubscribe" style="text-decoration: none; color:#2389D7;">Unsubscribe</a>
</p>
</td>
diff --git a/api/templates/invite_body.html b/api/templates/invite_body.html
index fdfcfa9f1..57feef5d9 100644
--- a/api/templates/invite_body.html
+++ b/api/templates/invite_body.html
@@ -40,7 +40,7 @@
<img width="65" src="{{.Props.SiteURL}}/static/images/circles.png" alt="">
</p>
<p style="padding: 0 50px;">
- (c) 2015 SpinPunch, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
+ (c) 2015 Mattermost, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
If you no longer wish to receive these emails, click on the following link: <a href="mailto:{{.ClientProps.FeedbackEmail}}?subject=Unsubscribe&body=Unsubscribe" style="text-decoration: none; color:#2389D7;">Unsubscribe</a>
</p>
</td>
diff --git a/api/templates/password_change_body.html b/api/templates/password_change_body.html
index c420d7a69..542df4b74 100644
--- a/api/templates/password_change_body.html
+++ b/api/templates/password_change_body.html
@@ -37,7 +37,7 @@
<img width="65" src="{{.Props.SiteURL}}/static/images/circles.png" alt="">
</p>
<p style="padding: 0 50px;">
- (c) 2015 SpinPunch, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
+ (c) 2015 Mattermost, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
If you no longer wish to receive these emails, click on the following link: <a href="mailto:{{.ClientProps.FeedbackEmail}}?subject=Unsubscribe&body=Unsubscribe" style="text-decoration: none; color:#2389D7;">Unsubscribe</a>
</p>
</td>
diff --git a/api/templates/post_body.html b/api/templates/post_body.html
index 1dd30ca45..63a53bf3c 100644
--- a/api/templates/post_body.html
+++ b/api/templates/post_body.html
@@ -40,7 +40,7 @@
<img width="65" src="{{.Props.SiteURL}}/static/images/circles.png" alt="">
</p>
<p style="padding: 0 50px;">
- (c) 2015 SpinPunch, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
+ (c) 2015 Mattermost, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
If you no longer wish to receive these emails, click on the following link: <a href="mailto:{{.ClientProps.FeedbackEmail}}?subject=Unsubscribe&body=Unsubscribe" style="text-decoration: none; color:#2389D7;">Unsubscribe</a>
</p>
</td>
diff --git a/api/templates/reset_body.html b/api/templates/reset_body.html
index d388689cf..4bafc57e8 100644
--- a/api/templates/reset_body.html
+++ b/api/templates/reset_body.html
@@ -40,7 +40,7 @@
<img width="65" src="{{.Props.SiteURL}}/static/images/circles.png" alt="">
</p>
<p style="padding: 0 50px;">
- (c) 2015 SpinPunch, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
+ (c) 2015 Mattermost, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
If you no longer wish to receive these emails, click on the following link: <a href="mailto:{{.ClientProps.FeedbackEmail}}?subject=Unsubscribe&body=Unsubscribe" style="text-decoration: none; color:#2389D7;">Unsubscribe</a>
</p>
</td>
diff --git a/api/templates/signup_team_body.html b/api/templates/signup_team_body.html
index 83c1679b9..dc2cb32ec 100644
--- a/api/templates/signup_team_body.html
+++ b/api/templates/signup_team_body.html
@@ -40,7 +40,7 @@
<img width="65" src="{{.Props.SiteURL}}/static/images/circles.png" alt="">
</p>
<p style="padding: 0 50px;">
- (c) 2015 SpinPunch, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
+ (c) 2015 Mattermost, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
If you no longer wish to receive these emails, click on the following link: <a href="mailto:{{.ClientProps.FeedbackEmail}}?subject=Unsubscribe&body=Unsubscribe" style="text-decoration: none; color:#2389D7;">Unsubscribe</a>
</p>
</td>
diff --git a/api/templates/verify_body.html b/api/templates/verify_body.html
index def067a84..0613b5dd5 100644
--- a/api/templates/verify_body.html
+++ b/api/templates/verify_body.html
@@ -40,7 +40,7 @@
<img width="65" src="{{.Props.SiteURL}}/static/images/circles.png" alt="">
</p>
<p style="padding: 0 50px;">
- (c) 2015 SpinPunch, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
+ (c) 2015 Mattermost, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
If you no longer wish to receive these emails, click on the following link: <a href="mailto:{{.ClientProps.FeedbackEmail}}?subject=Unsubscribe&body=Unsubscribe" style="text-decoration: none; color:#2389D7;">Unsubscribe</a>
</p>
</td>
diff --git a/api/templates/welcome_body.html b/api/templates/welcome_body.html
index ff31ee8d5..94b597cbb 100644
--- a/api/templates/welcome_body.html
+++ b/api/templates/welcome_body.html
@@ -31,7 +31,7 @@
<img width="65" src="{{.Props.SiteURL}}/static/images/circles.png" alt="">
</p>
<p style="padding: 0 50px;">
- (c) 2015 SpinPunch, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
+ (c) 2015 Mattermost, Inc. 855 El Camino Real, 13A-168, Palo Alto, CA, 94301.<br>
If you no longer wish to receive these emails, click on the following link: <a href="mailto:{{.ClientProps.FeedbackEmail}}?subject=Unsubscribe&body=Unsubscribe" style="text-decoration: none; color:#2389D7;">Unsubscribe</a>
</p>
</td>
diff --git a/api/user.go b/api/user.go
index 78f8768a4..faf828cf9 100644
--- a/api/user.go
+++ b/api/user.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
@@ -887,7 +887,11 @@ func updateUser(c *Context, w http.ResponseWriter, r *http.Request) {
l4g.Error(tresult.Err.Message)
} else {
team := tresult.Data.(*model.Team)
- fireAndForgetEmailChangeEmail(rusers[1].Email, team.DisplayName, c.GetTeamURLFromTeam(team), c.GetSiteURL())
+ fireAndForgetEmailChangeEmail(rusers[1].Email, rusers[0].Email, team.DisplayName, c.GetTeamURLFromTeam(team), c.GetSiteURL())
+
+ if utils.Cfg.EmailSettings.RequireEmailVerification {
+ FireAndForgetEmailChangeVerifyEmail(rusers[0].Id, rusers[0].Email, team.Name, team.DisplayName, c.GetSiteURL(), c.GetTeamURLFromTeam(team))
+ }
}
}
@@ -1328,7 +1332,7 @@ func fireAndForgetPasswordChangeEmail(email, teamDisplayName, teamURL, siteURL,
}()
}
-func fireAndForgetEmailChangeEmail(email, teamDisplayName, teamURL, siteURL string) {
+func fireAndForgetEmailChangeEmail(oldEmail, newEmail, teamDisplayName, teamURL, siteURL string) {
go func() {
subjectPage := NewServerTemplatePage("email_change_subject")
@@ -1338,14 +1342,34 @@ func fireAndForgetEmailChangeEmail(email, teamDisplayName, teamURL, siteURL stri
bodyPage.Props["SiteURL"] = siteURL
bodyPage.Props["TeamDisplayName"] = teamDisplayName
bodyPage.Props["TeamURL"] = teamURL
+ bodyPage.Props["NewEmail"] = newEmail
- if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil {
- l4g.Error("Failed to send update password email successfully err=%v", err)
+ if err := utils.SendMail(oldEmail, subjectPage.Render(), bodyPage.Render()); err != nil {
+ l4g.Error("Failed to send email change notification email successfully err=%v", err)
}
}()
}
+func FireAndForgetEmailChangeVerifyEmail(userId, newUserEmail, teamName, teamDisplayName, siteURL, teamURL string) {
+ go func() {
+
+ link := fmt.Sprintf("%s/verify_email?uid=%s&hid=%s&teamname=%s&email=%s", siteURL, userId, model.HashPassword(userId), teamName, newUserEmail)
+
+ subjectPage := NewServerTemplatePage("email_change_verify_subject")
+ subjectPage.Props["SiteURL"] = siteURL
+ subjectPage.Props["TeamDisplayName"] = teamDisplayName
+ bodyPage := NewServerTemplatePage("email_change_verify_body")
+ bodyPage.Props["SiteURL"] = siteURL
+ bodyPage.Props["TeamDisplayName"] = teamDisplayName
+ bodyPage.Props["VerifyUrl"] = link
+
+ if err := utils.SendMail(newUserEmail, subjectPage.Render(), bodyPage.Render()); err != nil {
+ l4g.Error("Failed to send email change verification email successfully err=%v", err)
+ }
+ }()
+}
+
func updateUserNotify(c *Context, w http.ResponseWriter, r *http.Request) {
props := model.MapFromJson(r.Body)
diff --git a/api/user_test.go b/api/user_test.go
index baa567dec..77309e5b2 100644
--- a/api/user_test.go
+++ b/api/user_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/web_conn.go b/api/web_conn.go
index 4315f5650..a5099e520 100644
--- a/api/web_conn.go
+++ b/api/web_conn.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/web_hub.go b/api/web_hub.go
index 15528c612..f80488824 100644
--- a/api/web_hub.go
+++ b/api/web_hub.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/web_socket.go b/api/web_socket.go
index 75936a8d5..298e44b44 100644
--- a/api/web_socket.go
+++ b/api/web_socket.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/web_socket_test.go b/api/web_socket_test.go
index 49a4c6870..63c4dd05d 100644
--- a/api/web_socket_test.go
+++ b/api/web_socket_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
@@ -55,12 +55,17 @@ func TestSocket(t *testing.T) {
time.Sleep(300 * time.Millisecond)
Client.Must(Client.JoinChannel(channel1.Id))
- // Read the join channel message that gets generated
+ // Read the user_added message that gets generated
var rmsg model.Message
if err := c2.ReadJSON(&rmsg); err != nil {
t.Fatal(err)
}
+ // Read the second user_added message that gets generated
+ if err := c2.ReadJSON(&rmsg); err != nil {
+ t.Fatal(err)
+ }
+
// Test sending message without a channelId
m := model.NewMessage("", "", "", model.ACTION_TYPING)
m.Add("RootId", model.NewId())
diff --git a/api/web_team_hub.go b/api/web_team_hub.go
index 31c8dfedf..c57de550f 100644
--- a/api/web_team_hub.go
+++ b/api/web_team_hub.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/webhook.go b/api/webhook.go
index e694b202c..de4ba6691 100644
--- a/api/webhook.go
+++ b/api/webhook.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/api/webhook_test.go b/api/webhook_test.go
index 22883f8ca..16b9c9529 100644
--- a/api/webhook_test.go
+++ b/api/webhook_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package api
diff --git a/config/config.json b/config/config.json
index 88da33215..919737da7 100644
--- a/config/config.json
+++ b/config/config.json
@@ -78,7 +78,7 @@
"PrivacySettings": {
"ShowEmailAddress": true,
"ShowFullName": true,
- "EnableDiagnostic": false
+ "EnableSecurityFixAlert": true
},
"GitLabSettings": {
"Enable": false,
diff --git a/docker/0.7/Dockerfile b/docker/0.7/Dockerfile
index 6e82fd809..202d42dbc 100644
--- a/docker/0.7/Dockerfile
+++ b/docker/0.7/Dockerfile
@@ -1,4 +1,4 @@
-# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+# Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
# See License.txt for license information.
FROM ubuntu:14.04
diff --git a/docker/0.7/docker-entry.sh b/docker/0.7/docker-entry.sh
index ce9f91c40..6bd2a1263 100755
--- a/docker/0.7/docker-entry.sh
+++ b/docker/0.7/docker-entry.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+# Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
# See License.txt for license information.
mkdir -p web/static/js
diff --git a/docker/1.0/Dockerfile b/docker/1.0/Dockerfile
index be87f9f89..a41c73514 100644
--- a/docker/1.0/Dockerfile
+++ b/docker/1.0/Dockerfile
@@ -1,4 +1,4 @@
-# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+# Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
# See License.txt for license information.
FROM ubuntu:14.04
diff --git a/docker/1.0/docker-entry.sh b/docker/1.0/docker-entry.sh
index ce9f91c40..6bd2a1263 100755
--- a/docker/1.0/docker-entry.sh
+++ b/docker/1.0/docker-entry.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+# Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
# See License.txt for license information.
mkdir -p web/static/js
diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile
index cdfdc1845..0e8b8853f 100644
--- a/docker/dev/Dockerfile
+++ b/docker/dev/Dockerfile
@@ -1,4 +1,4 @@
-# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+# Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
# See License.txt for license information.
FROM ubuntu:14.04
diff --git a/docker/dev/config_docker.json b/docker/dev/config_docker.json
index ef91a21ea..ab5b0a7be 100644
--- a/docker/dev/config_docker.json
+++ b/docker/dev/config_docker.json
@@ -78,7 +78,7 @@
"PrivacySettings": {
"ShowEmailAddress": true,
"ShowFullName": true,
- "EnableDiagnostic": false
+ "EnableSecurityFixAlert": true
},
"GitLabSettings": {
"Enable": false,
diff --git a/docker/dev/docker-entry.sh b/docker/dev/docker-entry.sh
index ce9f91c40..6bd2a1263 100755
--- a/docker/dev/docker-entry.sh
+++ b/docker/dev/docker-entry.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+# Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
# See License.txt for license information.
mkdir -p web/static/js
diff --git a/docker/local/Dockerfile b/docker/local/Dockerfile
index 55725e293..71da0a7fa 100644
--- a/docker/local/Dockerfile
+++ b/docker/local/Dockerfile
@@ -1,4 +1,4 @@
-# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+# Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
# See License.txt for license information.
FROM ubuntu:14.04
diff --git a/docker/local/config_docker.json b/docker/local/config_docker.json
index ef91a21ea..ab5b0a7be 100644
--- a/docker/local/config_docker.json
+++ b/docker/local/config_docker.json
@@ -78,7 +78,7 @@
"PrivacySettings": {
"ShowEmailAddress": true,
"ShowFullName": true,
- "EnableDiagnostic": false
+ "EnableSecurityFixAlert": true
},
"GitLabSettings": {
"Enable": false,
diff --git a/docker/local/docker-entry.sh b/docker/local/docker-entry.sh
index 16583e525..a03ea7d0d 100755
--- a/docker/local/docker-entry.sh
+++ b/docker/local/docker-entry.sh
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+# Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
# See License.txt for license information.
mkdir -p web/static/js
diff --git a/manualtesting/manual_testing.go b/manualtesting/manual_testing.go
index a517b0c0e..3fbdd5fd7 100644
--- a/manualtesting/manual_testing.go
+++ b/manualtesting/manual_testing.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package manualtesting
diff --git a/manualtesting/test_autolink.go b/manualtesting/test_autolink.go
index 5dfdadfb4..e4d49659a 100644
--- a/manualtesting/test_autolink.go
+++ b/manualtesting/test_autolink.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package manualtesting
diff --git a/mattermost.go b/mattermost.go
index e78e8d04a..6c0f0a1bf 100644
--- a/mattermost.go
+++ b/mattermost.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package main
@@ -6,6 +6,9 @@ package main
import (
"flag"
"fmt"
+ "io/ioutil"
+ "net/http"
+ "net/url"
"os"
"os/signal"
"runtime"
@@ -63,7 +66,7 @@ func main() {
manualtesting.InitManualTesting()
}
- diagnosticsJob()
+ securityAndDiagnosticsJob()
// wait for kill signal before attempting to gracefully shutdown
// the running service
@@ -75,49 +78,85 @@ func main() {
}
}
-func diagnosticsJob() {
+func securityAndDiagnosticsJob() {
go func() {
for {
- if utils.Cfg.PrivacySettings.EnableDiagnostic && !model.IsOfficalBuild() {
+ if utils.Cfg.PrivacySettings.EnableSecurityFixAlert && model.IsOfficalBuild() {
if result := <-api.Srv.Store.System().Get(); result.Err == nil {
props := result.Data.(model.StringMap)
- lastTime, _ := strconv.ParseInt(props["LastDiagnosticTime"], 10, 0)
+ lastSecurityTime, _ := strconv.ParseInt(props["LastSecurityTime"], 10, 0)
currentTime := model.GetMillis()
- if (currentTime - lastTime) > 1000*60*60*24*7 {
- l4g.Info("Sending error and diagnostic information to mattermost")
+ id := props["DiagnosticId"]
+ if len(id) == 0 {
+ id = model.NewId()
+ systemId := &model.System{Name: "DiagnosticId", Value: id}
+ <-api.Srv.Store.System().Save(systemId)
+ }
- id := props["DiagnosticId"]
- if len(id) == 0 {
- id = model.NewId()
- systemId := &model.System{Name: "DiagnosticId", Value: id}
- <-api.Srv.Store.System().Save(systemId)
- }
+ v := url.Values{}
+ v.Set(utils.PROP_DIAGNOSTIC_ID, id)
+ v.Set(utils.PROP_DIAGNOSTIC_BUILD, model.CurrentVersion+"."+model.BuildNumber)
+ v.Set(utils.PROP_DIAGNOSTIC_DATABASE, utils.Cfg.SqlSettings.DriverName)
+ v.Set(utils.PROP_DIAGNOSTIC_OS, runtime.GOOS)
+ v.Set(utils.PROP_DIAGNOSTIC_CATEGORY, utils.VAL_DIAGNOSTIC_CATEGORY_DEFAULT)
+
+ if (currentTime - lastSecurityTime) > 1000*60*60*24*1 {
+ l4g.Info("Checking for security update from Mattermost")
- systemLastTime := &model.System{Name: "LastDiagnosticTime", Value: strconv.FormatInt(currentTime, 10)}
- if lastTime == 0 {
- <-api.Srv.Store.System().Save(systemLastTime)
+ systemSecurityLastTime := &model.System{Name: "LastSecurityTime", Value: strconv.FormatInt(currentTime, 10)}
+ if lastSecurityTime == 0 {
+ <-api.Srv.Store.System().Save(systemSecurityLastTime)
} else {
- <-api.Srv.Store.System().Update(systemLastTime)
+ <-api.Srv.Store.System().Update(systemSecurityLastTime)
}
- m := make(map[string]string)
- m[utils.PROP_DIAGNOSTIC_ID] = id
- m[utils.PROP_DIAGNOSTIC_BUILD] = model.CurrentVersion + "." + model.BuildNumber
- m[utils.PROP_DIAGNOSTIC_DATABASE] = utils.Cfg.SqlSettings.DriverName
- m[utils.PROP_DIAGNOSTIC_OS] = runtime.GOOS
- m[utils.PROP_DIAGNOSTIC_CATEGORY] = utils.VAL_DIAGNOSTIC_CATEGORY_DEFALUT
-
- if ucr := <-api.Srv.Store.User().GetTotalUsersCount(); ucr.Err == nil {
- m[utils.PROP_DIAGNOSTIC_USER_COUNT] = strconv.FormatInt(ucr.Data.(int64), 10)
+ res, err := http.Get(utils.DIAGNOSTIC_URL + "/security?" + v.Encode())
+ if err != nil {
+ l4g.Error("Failed to get security update information from Mattermost.")
+ return
}
- utils.SendDiagnostic(m)
+ bulletins := model.SecurityBulletinsFromJson(res.Body)
+
+ for _, bulletin := range bulletins {
+ if bulletin.AppliesToVersion == model.CurrentVersion {
+ if props["SecurityBulletin_"+bulletin.Id] == "" {
+ if results := <-api.Srv.Store.User().GetSystemAdminProfiles(); results.Err != nil {
+ l4g.Error("Failed to get system admins for security update information from Mattermost.")
+ return
+ } else {
+ users := results.Data.(map[string]*model.User)
+
+ resBody, err := http.Get(utils.DIAGNOSTIC_URL + "/bulletins/" + bulletin.Id)
+ if err != nil {
+ l4g.Error("Failed to get security bulletin details")
+ return
+ }
+
+ body, err := ioutil.ReadAll(resBody.Body)
+ res.Body.Close()
+ if err != nil || resBody.StatusCode != 200 {
+ l4g.Error("Failed to read security bulletin details")
+ return
+ }
+
+ for _, user := range users {
+ l4g.Info("Sending security bulletin for " + bulletin.Id + " to " + user.Email)
+ utils.SendMail(user.Email, "Mattermost Security Bulletin", string(body))
+ }
+ }
+
+ bulletinSeen := &model.System{Name: "SecurityBulletin_" + bulletin.Id, Value: bulletin.Id}
+ <-api.Srv.Store.System().Save(bulletinSeen)
+ }
+ }
+ }
}
}
}
- time.Sleep(time.Hour * 24)
+ time.Sleep(time.Hour * 4)
}
}()
}
diff --git a/mkdocs.yml b/mkdocs.yml
index d7113e03e..a8b37ecad 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -3,7 +3,7 @@ site_url: http://docs.mattermost.org
repo_url: https://github.com/mattermost/platform
repo_name: GitHub
site_favicon: favicon.ico
-copyright: "Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved."
+copyright: "Copyright (c) 2015 Mattermost, Inc. All Rights Reserved."
strict: true
docs_dir: doc
site_dir: documentation-html
diff --git a/model/access.go b/model/access.go
index 44a0463ac..89a1271c1 100644
--- a/model/access.go
+++ b/model/access.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/access_test.go b/model/access_test.go
index e385c0586..a018a2919 100644
--- a/model/access_test.go
+++ b/model/access_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/audit.go b/model/audit.go
index 9f3640350..8fa1d5584 100644
--- a/model/audit.go
+++ b/model/audit.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/audit_test.go b/model/audit_test.go
index a309f5c65..f4a2b6bcc 100644
--- a/model/audit_test.go
+++ b/model/audit_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/audits.go b/model/audits.go
index 9c88deef9..36c80629f 100644
--- a/model/audits.go
+++ b/model/audits.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/audits_test.go b/model/audits_test.go
index 59b510f54..6c7104475 100644
--- a/model/audits_test.go
+++ b/model/audits_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/authorize.go b/model/authorize.go
index 6eaac97f1..4176a9b89 100644
--- a/model/authorize.go
+++ b/model/authorize.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/authorize_test.go b/model/authorize_test.go
index 14524ad84..3fedc37e4 100644
--- a/model/authorize_test.go
+++ b/model/authorize_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/channel.go b/model/channel.go
index a7f007960..076ddf0b5 100644
--- a/model/channel.go
+++ b/model/channel.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/channel_count.go b/model/channel_count.go
index 19d6ac150..6cc1b2f2d 100644
--- a/model/channel_count.go
+++ b/model/channel_count.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/channel_data.go b/model/channel_data.go
index 234bdec6e..731d50e70 100644
--- a/model/channel_data.go
+++ b/model/channel_data.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/channel_extra.go b/model/channel_extra.go
index 3a918b524..c6f0ca192 100644
--- a/model/channel_extra.go
+++ b/model/channel_extra.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/channel_list.go b/model/channel_list.go
index 09f14a986..49ba384a2 100644
--- a/model/channel_list.go
+++ b/model/channel_list.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/channel_member.go b/model/channel_member.go
index 3ae612700..e822ba443 100644
--- a/model/channel_member.go
+++ b/model/channel_member.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/channel_member_test.go b/model/channel_member_test.go
index edbb46e9b..cff48ae27 100644
--- a/model/channel_member_test.go
+++ b/model/channel_member_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/channel_test.go b/model/channel_test.go
index 21fe71889..e5dfa3734 100644
--- a/model/channel_test.go
+++ b/model/channel_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/client.go b/model/client.go
index a291cc4f2..11beb9a87 100644
--- a/model/client.go
+++ b/model/client.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/command.go b/model/command.go
index 83243cc98..2b26aad1c 100644
--- a/model/command.go
+++ b/model/command.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/command_test.go b/model/command_test.go
index e3b732c02..61302ea10 100644
--- a/model/command_test.go
+++ b/model/command_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/config.go b/model/config.go
index c67b36063..e4b99ad4a 100644
--- a/model/config.go
+++ b/model/config.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
@@ -110,9 +110,9 @@ type RateLimitSettings struct {
}
type PrivacySettings struct {
- ShowEmailAddress bool
- ShowFullName bool
- EnableDiagnostic bool
+ ShowEmailAddress bool
+ ShowFullName bool
+ EnableSecurityFixAlert bool
}
type TeamSettings struct {
diff --git a/model/file.go b/model/file.go
index 85545d718..b7806b3b4 100644
--- a/model/file.go
+++ b/model/file.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/gitlab.go b/model/gitlab.go
index d281b6ea0..9f86c7b72 100644
--- a/model/gitlab.go
+++ b/model/gitlab.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/message.go b/model/message.go
index 8598bea0e..122af4d9c 100644
--- a/model/message.go
+++ b/model/message.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/message_test.go b/model/message_test.go
index eb0c75193..182678d8e 100644
--- a/model/message_test.go
+++ b/model/message_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/oauth.go b/model/oauth.go
index 3b31e677d..0320e7ec7 100644
--- a/model/oauth.go
+++ b/model/oauth.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/oauth_test.go b/model/oauth_test.go
index 2530ead98..2ba36666c 100644
--- a/model/oauth_test.go
+++ b/model/oauth_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/post.go b/model/post.go
index 1fc5963c3..11f3ad0d5 100644
--- a/model/post.go
+++ b/model/post.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/post_list.go b/model/post_list.go
index 88e3a9193..862673ef3 100644
--- a/model/post_list.go
+++ b/model/post_list.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/post_list_test.go b/model/post_list_test.go
index 7ce36c399..8a34327ce 100644
--- a/model/post_list_test.go
+++ b/model/post_list_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/post_test.go b/model/post_test.go
index a6b880fa0..f498c83e6 100644
--- a/model/post_test.go
+++ b/model/post_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/security_bulletin.go b/model/security_bulletin.go
new file mode 100644
index 000000000..8d9be6d3b
--- /dev/null
+++ b/model/security_bulletin.go
@@ -0,0 +1,55 @@
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+package model
+
+import (
+ "encoding/json"
+ "io"
+)
+
+type SecurityBulletin struct {
+ Id string `json:"id"`
+ AppliesToVersion string `json:"applies_to_version"`
+}
+
+type SecurityBulletins []SecurityBulletin
+
+func (me *SecurityBulletin) ToJson() string {
+ b, err := json.Marshal(me)
+ if err != nil {
+ return ""
+ } else {
+ return string(b)
+ }
+}
+
+func SecurityBulletinFromJson(data io.Reader) *SecurityBulletin {
+ decoder := json.NewDecoder(data)
+ var o SecurityBulletin
+ err := decoder.Decode(&o)
+ if err == nil {
+ return &o
+ } else {
+ return nil
+ }
+}
+
+func (me SecurityBulletins) ToJson() string {
+ if b, err := json.Marshal(me); err != nil {
+ return "[]"
+ } else {
+ return string(b)
+ }
+}
+
+func SecurityBulletinsFromJson(data io.Reader) SecurityBulletins {
+ decoder := json.NewDecoder(data)
+ var o SecurityBulletins
+ err := decoder.Decode(&o)
+ if err == nil {
+ return o
+ } else {
+ return nil
+ }
+}
diff --git a/model/session.go b/model/session.go
index bb4d987a7..e2c1d4c55 100644
--- a/model/session.go
+++ b/model/session.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/session_test.go b/model/session_test.go
index 4df2a0d76..4cffcb9c0 100644
--- a/model/session_test.go
+++ b/model/session_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/suggest_command.go b/model/suggest_command.go
index 0c07ac58e..7bc35369c 100644
--- a/model/suggest_command.go
+++ b/model/suggest_command.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/suggest_command_test.go b/model/suggest_command_test.go
index a92b676ad..6be700859 100644
--- a/model/suggest_command_test.go
+++ b/model/suggest_command_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/system.go b/model/system.go
index c79391cca..033f660b3 100644
--- a/model/system.go
+++ b/model/system.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/system_test.go b/model/system_test.go
index 14ba0db2e..3f60eb5f9 100644
--- a/model/system_test.go
+++ b/model/system_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/team.go b/model/team.go
index f80fa3b11..c0f6524cd 100644
--- a/model/team.go
+++ b/model/team.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/team_signup.go b/model/team_signup.go
index 143ba8db1..e36420449 100644
--- a/model/team_signup.go
+++ b/model/team_signup.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/team_signup_test.go b/model/team_signup_test.go
index eb2fbc69f..a830842aa 100644
--- a/model/team_signup_test.go
+++ b/model/team_signup_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/team_test.go b/model/team_test.go
index 0dec07559..fd2428f03 100644
--- a/model/team_test.go
+++ b/model/team_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/user.go b/model/user.go
index d8000a7e2..15016f8dc 100644
--- a/model/user.go
+++ b/model/user.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/user_test.go b/model/user_test.go
index d9c1a00b6..662ae35a6 100644
--- a/model/user_test.go
+++ b/model/user_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/utils.go b/model/utils.go
index 93b8c4512..269144afc 100644
--- a/model/utils.go
+++ b/model/utils.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/utils_test.go b/model/utils_test.go
index 0f26526b2..7f14bcdf0 100644
--- a/model/utils_test.go
+++ b/model/utils_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/version.go b/model/version.go
index efa1697db..d03f64ba2 100644
--- a/model/version.go
+++ b/model/version.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/version_test.go b/model/version_test.go
index 24dbedaa6..33e8dc93e 100644
--- a/model/version_test.go
+++ b/model/version_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/webhook.go b/model/webhook.go
index 9b4db3246..3bf034908 100644
--- a/model/webhook.go
+++ b/model/webhook.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/model/webhook_test.go b/model/webhook_test.go
index ddbe18cd3..5297d7d90 100644
--- a/model/webhook_test.go
+++ b/model/webhook_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package model
diff --git a/store/sql_audit_store.go b/store/sql_audit_store.go
index a595d50e2..898cf8f78 100644
--- a/store/sql_audit_store.go
+++ b/store/sql_audit_store.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_audit_store_test.go b/store/sql_audit_store_test.go
index 4d804d150..e265db837 100644
--- a/store/sql_audit_store_test.go
+++ b/store/sql_audit_store_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_channel_store.go b/store/sql_channel_store.go
index 3bbe7e716..a54e6ba54 100644
--- a/store/sql_channel_store.go
+++ b/store/sql_channel_store.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_channel_store_test.go b/store/sql_channel_store_test.go
index b6d05684b..b4e0f7593 100644
--- a/store/sql_channel_store_test.go
+++ b/store/sql_channel_store_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_oauth_store.go b/store/sql_oauth_store.go
index 2a6fa3118..db52e379b 100644
--- a/store/sql_oauth_store.go
+++ b/store/sql_oauth_store.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_oauth_store_test.go b/store/sql_oauth_store_test.go
index 08e1388e0..3f05f1c92 100644
--- a/store/sql_oauth_store_test.go
+++ b/store/sql_oauth_store_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_post_store.go b/store/sql_post_store.go
index 8d62eaad0..07077bd64 100644
--- a/store/sql_post_store.go
+++ b/store/sql_post_store.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_post_store_test.go b/store/sql_post_store_test.go
index 62d7b0100..9a7679454 100644
--- a/store/sql_post_store_test.go
+++ b/store/sql_post_store_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_session_store.go b/store/sql_session_store.go
index 22411389d..15ec6924b 100644
--- a/store/sql_session_store.go
+++ b/store/sql_session_store.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_session_store_test.go b/store/sql_session_store_test.go
index 3d8aafe25..068e5fc19 100644
--- a/store/sql_session_store_test.go
+++ b/store/sql_session_store_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_store.go b/store/sql_store.go
index 3ef9cfbc4..9ec899f7c 100644
--- a/store/sql_store.go
+++ b/store/sql_store.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_store_test.go b/store/sql_store_test.go
index 84dbf5705..a9e25cb33 100644
--- a/store/sql_store_test.go
+++ b/store/sql_store_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_system_store.go b/store/sql_system_store.go
index ca22de2a6..a4cb52d4d 100644
--- a/store/sql_system_store.go
+++ b/store/sql_system_store.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_system_store_test.go b/store/sql_system_store_test.go
index 0f03b8f0e..8ff5445cc 100644
--- a/store/sql_system_store_test.go
+++ b/store/sql_system_store_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_team_store.go b/store/sql_team_store.go
index 109fe5401..ff1d4ac35 100644
--- a/store/sql_team_store.go
+++ b/store/sql_team_store.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_team_store_test.go b/store/sql_team_store_test.go
index 1f13e466c..3d9b4d435 100644
--- a/store/sql_team_store_test.go
+++ b/store/sql_team_store_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_user_store.go b/store/sql_user_store.go
index 0a723d965..f36226cf8 100644
--- a/store/sql_user_store.go
+++ b/store/sql_user_store.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
@@ -370,6 +370,37 @@ func (us SqlUserStore) GetProfiles(teamId string) StoreChannel {
return storeChannel
}
+func (us SqlUserStore) GetSystemAdminProfiles() StoreChannel {
+
+ storeChannel := make(StoreChannel)
+
+ go func() {
+ result := StoreResult{}
+
+ var users []*model.User
+
+ if _, err := us.GetReplica().Select(&users, "SELECT * FROM Users WHERE Roles = :Roles", map[string]interface{}{"Roles": "system_admin"}); err != nil {
+ result.Err = model.NewAppError("SqlUserStore.GetSystemAdminProfiles", "We encounted an error while finding user profiles", err.Error())
+ } else {
+
+ userMap := make(map[string]*model.User)
+
+ for _, u := range users {
+ u.Password = ""
+ u.AuthData = ""
+ userMap[u.Id] = u
+ }
+
+ result.Data = userMap
+ }
+
+ storeChannel <- result
+ close(storeChannel)
+ }()
+
+ return storeChannel
+}
+
func (us SqlUserStore) GetByEmail(teamId string, email string) StoreChannel {
storeChannel := make(StoreChannel)
diff --git a/store/sql_user_store_test.go b/store/sql_user_store_test.go
index e2a454023..be21c8bd2 100644
--- a/store/sql_user_store_test.go
+++ b/store/sql_user_store_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
@@ -259,6 +259,29 @@ func TestUserStoreGetProfiles(t *testing.T) {
}
}
+func TestUserStoreGetSystemAdminProfiles(t *testing.T) {
+ Setup()
+
+ u1 := model.User{}
+ u1.TeamId = model.NewId()
+ u1.Email = model.NewId()
+ Must(store.User().Save(&u1))
+
+ u2 := model.User{}
+ u2.TeamId = u1.TeamId
+ u2.Email = model.NewId()
+ Must(store.User().Save(&u2))
+
+ if r1 := <-store.User().GetSystemAdminProfiles(); r1.Err != nil {
+ t.Fatal(r1.Err)
+ } else {
+ users := r1.Data.(map[string]*model.User)
+ if len(users) <= 0 {
+ t.Fatal("invalid returned system admin users")
+ }
+ }
+}
+
func TestUserStoreGetByEmail(t *testing.T) {
Setup()
diff --git a/store/sql_webhook_store.go b/store/sql_webhook_store.go
index e309f79e4..42a91a80e 100644
--- a/store/sql_webhook_store.go
+++ b/store/sql_webhook_store.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/sql_webhook_store_test.go b/store/sql_webhook_store_test.go
index 0a015eaf9..6f4ef4354 100644
--- a/store/sql_webhook_store_test.go
+++ b/store/sql_webhook_store_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
diff --git a/store/store.go b/store/store.go
index 887913bc6..1c4d08e36 100644
--- a/store/store.go
+++ b/store/store.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package store
@@ -104,6 +104,7 @@ type UserStore interface {
UpdateFailedPasswordAttempts(userId string, attempts int) StoreChannel
GetForExport(teamId string) StoreChannel
GetTotalUsersCount() StoreChannel
+ GetSystemAdminProfiles() StoreChannel
}
type SessionStore interface {
diff --git a/utils/apns.go b/utils/apns.go
index f73c6d8f8..3d07f17ec 100644
--- a/utils/apns.go
+++ b/utils/apns.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package utils
diff --git a/utils/config.go b/utils/config.go
index 90e44259a..44ee14a6e 100644
--- a/utils/config.go
+++ b/utils/config.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package utils
@@ -191,6 +191,7 @@ func getClientProperties(c *model.Config) map[string]string {
props["SendEmailNotifications"] = strconv.FormatBool(c.EmailSettings.SendEmailNotifications)
props["EnableSignUpWithEmail"] = strconv.FormatBool(c.EmailSettings.EnableSignUpWithEmail)
+ props["RequireEmailVerification"] = strconv.FormatBool(c.EmailSettings.RequireEmailVerification)
props["FeedbackEmail"] = c.EmailSettings.FeedbackEmail
props["EnableSignUpWithGitLab"] = strconv.FormatBool(c.GitLabSettings.Enable)
diff --git a/utils/config_test.go b/utils/config_test.go
index 4d37b4e88..0b334d36c 100644
--- a/utils/config_test.go
+++ b/utils/config_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package utils
diff --git a/utils/diagnostic.go b/utils/diagnostic.go
index 9a61ae934..da02e771b 100644
--- a/utils/diagnostic.go
+++ b/utils/diagnostic.go
@@ -1,45 +1,35 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package utils
import (
"net/http"
-
- l4g "code.google.com/p/log4go"
+ "net/url"
"github.com/mattermost/platform/model"
)
const (
+ DIAGNOSTIC_URL = "https://d7zmvsa9e04kk.cloudfront.net"
+
PROP_DIAGNOSTIC_ID = "id"
PROP_DIAGNOSTIC_CATEGORY = "c"
- VAL_DIAGNOSTIC_CATEGORY_DEFALUT = "d"
+ VAL_DIAGNOSTIC_CATEGORY_DEFAULT = "d"
PROP_DIAGNOSTIC_BUILD = "b"
PROP_DIAGNOSTIC_DATABASE = "db"
PROP_DIAGNOSTIC_OS = "os"
PROP_DIAGNOSTIC_USER_COUNT = "uc"
)
-func SendDiagnostic(data model.StringMap) *model.AppError {
- if Cfg.PrivacySettings.EnableDiagnostic && !model.IsOfficalBuild() {
-
- query := "?"
- for name, value := range data {
- if len(query) > 1 {
- query += "&"
- }
+func SendDiagnostic(values url.Values) {
+ if Cfg.PrivacySettings.EnableSecurityFixAlert && model.IsOfficalBuild() {
- query += name + "=" + UrlEncode(value)
- }
-
- res, err := http.Get("http://d7zmvsa9e04kk.cloudfront.net/i" + query)
+ res, err := http.Get(DIAGNOSTIC_URL + "/i?" + values.Encode())
if err != nil {
- l4g.Error("Failed to send diagnostics %v", err.Error())
+ return
}
res.Body.Close()
}
-
- return nil
}
diff --git a/utils/mail.go b/utils/mail.go
index f6fe1ce00..c91c15a6a 100644
--- a/utils/mail.go
+++ b/utils/mail.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package utils
diff --git a/utils/random.go b/utils/random.go
index ca2ace949..99743e777 100644
--- a/utils/random.go
+++ b/utils/random.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package utils
diff --git a/utils/textgeneration.go b/utils/textgeneration.go
index 6d353cc24..420d6fb29 100644
--- a/utils/textgeneration.go
+++ b/utils/textgeneration.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package utils
diff --git a/utils/urlencode.go b/utils/urlencode.go
index 63a8f7880..dc8b9acfd 100644
--- a/utils/urlencode.go
+++ b/utils/urlencode.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package utils
diff --git a/web/react/components/about_build_modal.jsx b/web/react/components/about_build_modal.jsx
index d582f6bc8..e8a46086a 100644
--- a/web/react/components/about_build_modal.jsx
+++ b/web/react/components/about_build_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Modal = ReactBootstrap.Modal;
diff --git a/web/react/components/access_history_modal.jsx b/web/react/components/access_history_modal.jsx
index 0dfd36717..2ad4d5b00 100644
--- a/web/react/components/access_history_modal.jsx
+++ b/web/react/components/access_history_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/activity_log_modal.jsx b/web/react/components/activity_log_modal.jsx
index ff370c32e..1fe2133ec 100644
--- a/web/react/components/activity_log_modal.jsx
+++ b/web/react/components/activity_log_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/admin_console/admin_controller.jsx b/web/react/components/admin_console/admin_controller.jsx
index f40e48f70..f2fb8ac78 100644
--- a/web/react/components/admin_console/admin_controller.jsx
+++ b/web/react/components/admin_console/admin_controller.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AdminSidebar = require('./admin_sidebar.jsx');
diff --git a/web/react/components/admin_console/admin_navbar_dropdown.jsx b/web/react/components/admin_console/admin_navbar_dropdown.jsx
index a3ab81079..21ec5c3cf 100644
--- a/web/react/components/admin_console/admin_navbar_dropdown.jsx
+++ b/web/react/components/admin_console/admin_navbar_dropdown.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Utils = require('../../utils/utils.jsx');
diff --git a/web/react/components/admin_console/admin_sidebar.jsx b/web/react/components/admin_console/admin_sidebar.jsx
index f102661b2..bc6ad1931 100644
--- a/web/react/components/admin_console/admin_sidebar.jsx
+++ b/web/react/components/admin_console/admin_sidebar.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AdminSidebarHeader = require('./admin_sidebar_header.jsx');
diff --git a/web/react/components/admin_console/admin_sidebar_header.jsx b/web/react/components/admin_console/admin_sidebar_header.jsx
index 81798da45..c80811bcd 100644
--- a/web/react/components/admin_console/admin_sidebar_header.jsx
+++ b/web/react/components/admin_console/admin_sidebar_header.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AdminNavbarDropdown = require('./admin_navbar_dropdown.jsx');
diff --git a/web/react/components/admin_console/email_settings.jsx b/web/react/components/admin_console/email_settings.jsx
index 3432f69ff..c028d605d 100644
--- a/web/react/components/admin_console/email_settings.jsx
+++ b/web/react/components/admin_console/email_settings.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/admin_console/gitlab_settings.jsx b/web/react/components/admin_console/gitlab_settings.jsx
index 759892ad3..6b97287e4 100644
--- a/web/react/components/admin_console/gitlab_settings.jsx
+++ b/web/react/components/admin_console/gitlab_settings.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/admin_console/image_settings.jsx b/web/react/components/admin_console/image_settings.jsx
index e08d39ca8..24ed5a0a8 100644
--- a/web/react/components/admin_console/image_settings.jsx
+++ b/web/react/components/admin_console/image_settings.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/admin_console/log_settings.jsx b/web/react/components/admin_console/log_settings.jsx
index 608ef9cc0..367605f14 100644
--- a/web/react/components/admin_console/log_settings.jsx
+++ b/web/react/components/admin_console/log_settings.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/admin_console/logs.jsx b/web/react/components/admin_console/logs.jsx
index 0bb749bbd..3449c78d9 100644
--- a/web/react/components/admin_console/logs.jsx
+++ b/web/react/components/admin_console/logs.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AdminStore = require('../../stores/admin_store.jsx');
diff --git a/web/react/components/admin_console/privacy_settings.jsx b/web/react/components/admin_console/privacy_settings.jsx
index c74d321e6..a32ca3136 100644
--- a/web/react/components/admin_console/privacy_settings.jsx
+++ b/web/react/components/admin_console/privacy_settings.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
@@ -30,7 +30,7 @@ export default class PrivacySettings extends React.Component {
var config = this.props.config;
config.PrivacySettings.ShowEmailAddress = React.findDOMNode(this.refs.ShowEmailAddress).checked;
config.PrivacySettings.ShowFullName = React.findDOMNode(this.refs.ShowFullName).checked;
- config.PrivacySettings.EnableDiagnostic = React.findDOMNode(this.refs.EnableDiagnostic).checked;
+ config.PrivacySettings.EnableSecurityFixAlert = React.findDOMNode(this.refs.EnableSecurityFixAlert).checked;
Client.saveConfig(
config,
@@ -140,7 +140,7 @@ export default class PrivacySettings extends React.Component {
<div className='form-group'>
<label
className='control-label col-sm-4'
- htmlFor='EnableDiagnostic'
+ htmlFor='EnableSecurityFixAlert'
>
{'Send Error and Diagnostic: '}
</label>
@@ -148,10 +148,10 @@ export default class PrivacySettings extends React.Component {
<label className='radio-inline'>
<input
type='radio'
- name='EnableDiagnostic'
+ name='EnableSecurityFixAlert'
value='true'
- ref='EnableDiagnostic'
- defaultChecked={this.props.config.PrivacySettings.EnableDiagnostic}
+ ref='EnableSecurityFixAlert'
+ defaultChecked={this.props.config.PrivacySettings.EnableSecurityFixAlert}
onChange={this.handleChange}
/>
{'true'}
@@ -159,14 +159,14 @@ export default class PrivacySettings extends React.Component {
<label className='radio-inline'>
<input
type='radio'
- name='EnableDiagnostic'
+ name='EnableSecurityFixAlert'
value='false'
- defaultChecked={!this.props.config.PrivacySettings.EnableDiagnostic}
+ defaultChecked={!this.props.config.PrivacySettings.EnableSecurityFixAlert}
onChange={this.handleChange}
/>
{'false'}
</label>
- <p className='help-text'>{'When true, The server will periodically send error and diagnostic information to Mattermost.'}</p>
+ <p className='help-text'>{'When true, System Administrators are notified by email if a relevant security fix alert has been announced in the last 12 hours. Requires email to be enabled.'}</p>
</div>
</div>
diff --git a/web/react/components/admin_console/rate_settings.jsx b/web/react/components/admin_console/rate_settings.jsx
index 0081daca3..65c39ac42 100644
--- a/web/react/components/admin_console/rate_settings.jsx
+++ b/web/react/components/admin_console/rate_settings.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/admin_console/reset_password_modal.jsx b/web/react/components/admin_console/reset_password_modal.jsx
index 0b83edb17..75264be45 100644
--- a/web/react/components/admin_console/reset_password_modal.jsx
+++ b/web/react/components/admin_console/reset_password_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/admin_console/select_team_modal.jsx b/web/react/components/admin_console/select_team_modal.jsx
index 343f65131..21d1c25c3 100644
--- a/web/react/components/admin_console/select_team_modal.jsx
+++ b/web/react/components/admin_console/select_team_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Modal = ReactBootstrap.Modal;
diff --git a/web/react/components/admin_console/service_settings.jsx b/web/react/components/admin_console/service_settings.jsx
index b2d1b7b4d..3968d9820 100644
--- a/web/react/components/admin_console/service_settings.jsx
+++ b/web/react/components/admin_console/service_settings.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/admin_console/sql_settings.jsx b/web/react/components/admin_console/sql_settings.jsx
index 0e0ceb9af..16a69e664 100644
--- a/web/react/components/admin_console/sql_settings.jsx
+++ b/web/react/components/admin_console/sql_settings.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/admin_console/team_settings.jsx b/web/react/components/admin_console/team_settings.jsx
index 0f6f819d3..a517c56fe 100644
--- a/web/react/components/admin_console/team_settings.jsx
+++ b/web/react/components/admin_console/team_settings.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/admin_console/team_users.jsx b/web/react/components/admin_console/team_users.jsx
index 0a971ff15..ffb412159 100644
--- a/web/react/components/admin_console/team_users.jsx
+++ b/web/react/components/admin_console/team_users.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/admin_console/user_item.jsx b/web/react/components/admin_console/user_item.jsx
index c5c6e19d4..665ccd719 100644
--- a/web/react/components/admin_console/user_item.jsx
+++ b/web/react/components/admin_console/user_item.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/authorize.jsx b/web/react/components/authorize.jsx
index dd4479ad4..74709bcab 100644
--- a/web/react/components/authorize.jsx
+++ b/web/react/components/authorize.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../utils/client.jsx');
diff --git a/web/react/components/change_url_modal.jsx b/web/react/components/change_url_modal.jsx
index 3553e1107..f8db13392 100644
--- a/web/react/components/change_url_modal.jsx
+++ b/web/react/components/change_url_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Modal = ReactBootstrap.Modal;
diff --git a/web/react/components/channel_header.jsx b/web/react/components/channel_header.jsx
index f15974d35..e47db073d 100644
--- a/web/react/components/channel_header.jsx
+++ b/web/react/components/channel_header.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const ChannelStore = require('../stores/channel_store.jsx');
@@ -58,7 +58,9 @@ export default class ChannelHeader extends React.Component {
$('.channel-header__info .description').popover({placement: 'bottom', trigger: 'hover', html: true, delay: {show: 500, hide: 500}});
}
onSocketChange(msg) {
- if (msg.action === 'new_user') {
+ if (msg.action === 'new_user' ||
+ msg.action === 'user_added' ||
+ (msg.action === 'user_removed' && msg.user_id !== UserStore.getCurrentId())) {
AsyncClient.getChannelExtraInfo(true);
}
}
diff --git a/web/react/components/channel_info_modal.jsx b/web/react/components/channel_info_modal.jsx
index fdd9a5c17..d6de958e7 100644
--- a/web/react/components/channel_info_modal.jsx
+++ b/web/react/components/channel_info_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var ChannelStore = require('../stores/channel_store.jsx');
diff --git a/web/react/components/channel_invite_modal.jsx b/web/react/components/channel_invite_modal.jsx
index 82fc51184..1e621c683 100644
--- a/web/react/components/channel_invite_modal.jsx
+++ b/web/react/components/channel_invite_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/channel_loader.jsx b/web/react/components/channel_loader.jsx
index 39c86405c..d16069725 100644
--- a/web/react/components/channel_loader.jsx
+++ b/web/react/components/channel_loader.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
/* This is a special React control with the sole purpose of making all the AsyncClient calls
diff --git a/web/react/components/channel_members.jsx b/web/react/components/channel_members.jsx
index 53c854eb7..0cd384977 100644
--- a/web/react/components/channel_members.jsx
+++ b/web/react/components/channel_members.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/channel_notifications.jsx b/web/react/components/channel_notifications.jsx
index ed76b7bce..2114be905 100644
--- a/web/react/components/channel_notifications.jsx
+++ b/web/react/components/channel_notifications.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var SettingItemMin = require('./setting_item_min.jsx');
diff --git a/web/react/components/command_list.jsx b/web/react/components/command_list.jsx
index e027e87ae..a6d9d5d70 100644
--- a/web/react/components/command_list.jsx
+++ b/web/react/components/command_list.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var client = require('../utils/client.jsx');
diff --git a/web/react/components/confirm_modal.jsx b/web/react/components/confirm_modal.jsx
index cb3b9c5e3..12002f33f 100644
--- a/web/react/components/confirm_modal.jsx
+++ b/web/react/components/confirm_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
export default class ConfirmModal extends React.Component {
diff --git a/web/react/components/create_comment.jsx b/web/react/components/create_comment.jsx
index 550f85d3d..add4125d7 100644
--- a/web/react/components/create_comment.jsx
+++ b/web/react/components/create_comment.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/components/create_post.jsx b/web/react/components/create_post.jsx
index 6e83f4faf..ed265ab02 100644
--- a/web/react/components/create_post.jsx
+++ b/web/react/components/create_post.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/components/delete_channel_modal.jsx b/web/react/components/delete_channel_modal.jsx
index 71c636921..9358c98d7 100644
--- a/web/react/components/delete_channel_modal.jsx
+++ b/web/react/components/delete_channel_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Client = require('../utils/client.jsx');
diff --git a/web/react/components/delete_post_modal.jsx b/web/react/components/delete_post_modal.jsx
index 8e48a7a1c..ea7d76b1e 100644
--- a/web/react/components/delete_post_modal.jsx
+++ b/web/react/components/delete_post_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../utils/client.jsx');
diff --git a/web/react/components/edit_channel_modal.jsx b/web/react/components/edit_channel_modal.jsx
index 27219aba5..6ccf12be6 100644
--- a/web/react/components/edit_channel_modal.jsx
+++ b/web/react/components/edit_channel_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Client = require('../utils/client.jsx');
diff --git a/web/react/components/edit_post_modal.jsx b/web/react/components/edit_post_modal.jsx
index ad7bd30b5..165a28a64 100644
--- a/web/react/components/edit_post_modal.jsx
+++ b/web/react/components/edit_post_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../utils/client.jsx');
diff --git a/web/react/components/email_verify.jsx b/web/react/components/email_verify.jsx
index 391de3326..2b413b848 100644
--- a/web/react/components/email_verify.jsx
+++ b/web/react/components/email_verify.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
export default class EmailVerify extends React.Component {
diff --git a/web/react/components/error_bar.jsx b/web/react/components/error_bar.jsx
index 5aa55be93..b100fd337 100644
--- a/web/react/components/error_bar.jsx
+++ b/web/react/components/error_bar.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var ErrorStore = require('../stores/error_store.jsx');
diff --git a/web/react/components/file_attachment.jsx b/web/react/components/file_attachment.jsx
index 888f24aa5..659da4f5e 100644
--- a/web/react/components/file_attachment.jsx
+++ b/web/react/components/file_attachment.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var utils = require('../utils/utils.jsx');
diff --git a/web/react/components/file_attachment_list.jsx b/web/react/components/file_attachment_list.jsx
index 212d4a958..ae08e5635 100644
--- a/web/react/components/file_attachment_list.jsx
+++ b/web/react/components/file_attachment_list.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var ViewImageModal = require('./view_image.jsx');
diff --git a/web/react/components/file_preview.jsx b/web/react/components/file_preview.jsx
index 33382a439..a40ed1dcf 100644
--- a/web/react/components/file_preview.jsx
+++ b/web/react/components/file_preview.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/file_upload.jsx b/web/react/components/file_upload.jsx
index 0e9297b7b..e947fc50c 100644
--- a/web/react/components/file_upload.jsx
+++ b/web/react/components/file_upload.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var client = require('../utils/client.jsx');
diff --git a/web/react/components/file_upload_overlay.jsx b/web/react/components/file_upload_overlay.jsx
index 265924206..4fcee6cb0 100644
--- a/web/react/components/file_upload_overlay.jsx
+++ b/web/react/components/file_upload_overlay.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
export default class FileUploadOverlay extends React.Component {
diff --git a/web/react/components/find_team.jsx b/web/react/components/find_team.jsx
index eb2683a88..59c4e08e3 100644
--- a/web/react/components/find_team.jsx
+++ b/web/react/components/find_team.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var utils = require('../utils/utils.jsx');
diff --git a/web/react/components/get_link_modal.jsx b/web/react/components/get_link_modal.jsx
index 6e0728862..234013b93 100644
--- a/web/react/components/get_link_modal.jsx
+++ b/web/react/components/get_link_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/invite_member_modal.jsx b/web/react/components/invite_member_modal.jsx
index 395b98630..2ca39d1b1 100644
--- a/web/react/components/invite_member_modal.jsx
+++ b/web/react/components/invite_member_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var utils = require('../utils/utils.jsx');
diff --git a/web/react/components/loading_screen.jsx b/web/react/components/loading_screen.jsx
index b0f42ce86..9849205f2 100644
--- a/web/react/components/loading_screen.jsx
+++ b/web/react/components/loading_screen.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
export default class LoadingScreen extends React.Component {
diff --git a/web/react/components/login.jsx b/web/react/components/login.jsx
index 54df75cbc..997abce68 100644
--- a/web/react/components/login.jsx
+++ b/web/react/components/login.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/member_list.jsx b/web/react/components/member_list.jsx
index 65495b569..fe744760f 100644
--- a/web/react/components/member_list.jsx
+++ b/web/react/components/member_list.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var MemberListItem = require('./member_list_item.jsx');
diff --git a/web/react/components/member_list_item.jsx b/web/react/components/member_list_item.jsx
index 158ff65be..5c3695ad4 100644
--- a/web/react/components/member_list_item.jsx
+++ b/web/react/components/member_list_item.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/member_list_team.jsx b/web/react/components/member_list_team.jsx
index 064330c8d..5ca40a39d 100644
--- a/web/react/components/member_list_team.jsx
+++ b/web/react/components/member_list_team.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const MemberListTeamItem = require('./member_list_team_item.jsx');
diff --git a/web/react/components/member_list_team_item.jsx b/web/react/components/member_list_team_item.jsx
index 629fb2ec4..9a104aa32 100644
--- a/web/react/components/member_list_team_item.jsx
+++ b/web/react/components/member_list_team_item.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/mention.jsx b/web/react/components/mention.jsx
index ef7cec408..aeed724a8 100644
--- a/web/react/components/mention.jsx
+++ b/web/react/components/mention.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/mention_list.jsx b/web/react/components/mention_list.jsx
index 72f51013c..b9ba5f58c 100644
--- a/web/react/components/mention_list.jsx
+++ b/web/react/components/mention_list.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/message_wrapper.jsx b/web/react/components/message_wrapper.jsx
index 5adf4f228..00c427c79 100644
--- a/web/react/components/message_wrapper.jsx
+++ b/web/react/components/message_wrapper.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var TextFormatting = require('../utils/text_formatting.jsx');
diff --git a/web/react/components/more_channels.jsx b/web/react/components/more_channels.jsx
index 487192d91..884b0d6ca 100644
--- a/web/react/components/more_channels.jsx
+++ b/web/react/components/more_channels.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var utils = require('../utils/utils.jsx');
diff --git a/web/react/components/more_direct_channels.jsx b/web/react/components/more_direct_channels.jsx
index c71abd43a..31ecb4c5d 100644
--- a/web/react/components/more_direct_channels.jsx
+++ b/web/react/components/more_direct_channels.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var ChannelStore = require('../stores/channel_store.jsx');
diff --git a/web/react/components/msg_typing.jsx b/web/react/components/msg_typing.jsx
index d9823c3cf..569942390 100644
--- a/web/react/components/msg_typing.jsx
+++ b/web/react/components/msg_typing.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var SocketStore = require('../stores/socket_store.jsx');
diff --git a/web/react/components/navbar.jsx b/web/react/components/navbar.jsx
index bdb50cd9e..6503bd801 100644
--- a/web/react/components/navbar.jsx
+++ b/web/react/components/navbar.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../utils/client.jsx');
diff --git a/web/react/components/navbar_dropdown.jsx b/web/react/components/navbar_dropdown.jsx
index ff7a53848..b6defc393 100644
--- a/web/react/components/navbar_dropdown.jsx
+++ b/web/react/components/navbar_dropdown.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/new_channel_flow.jsx b/web/react/components/new_channel_flow.jsx
index df6a119d5..186cfc2b0 100644
--- a/web/react/components/new_channel_flow.jsx
+++ b/web/react/components/new_channel_flow.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/new_channel_modal.jsx b/web/react/components/new_channel_modal.jsx
index c8ef59b4a..c3d9c046d 100644
--- a/web/react/components/new_channel_modal.jsx
+++ b/web/react/components/new_channel_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/notify_counts.jsx b/web/react/components/notify_counts.jsx
index f34b4669f..54b9e4289 100644
--- a/web/react/components/notify_counts.jsx
+++ b/web/react/components/notify_counts.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var utils = require('../utils/utils.jsx');
diff --git a/web/react/components/password_reset.jsx b/web/react/components/password_reset.jsx
index 399d3b7b9..54d126144 100644
--- a/web/react/components/password_reset.jsx
+++ b/web/react/components/password_reset.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var PasswordResetSendLink = require('./password_reset_send_link.jsx');
diff --git a/web/react/components/password_reset_form.jsx b/web/react/components/password_reset_form.jsx
index dae582627..0ef187114 100644
--- a/web/react/components/password_reset_form.jsx
+++ b/web/react/components/password_reset_form.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var client = require('../utils/client.jsx');
diff --git a/web/react/components/password_reset_send_link.jsx b/web/react/components/password_reset_send_link.jsx
index 37d4a58cb..78fbcaa2f 100644
--- a/web/react/components/password_reset_send_link.jsx
+++ b/web/react/components/password_reset_send_link.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/popover_list_members.jsx b/web/react/components/popover_list_members.jsx
index aaaea3c6f..5d9052fd7 100644
--- a/web/react/components/popover_list_members.jsx
+++ b/web/react/components/popover_list_members.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/post.jsx b/web/react/components/post.jsx
index ac9c9252e..64d6776b4 100644
--- a/web/react/components/post.jsx
+++ b/web/react/components/post.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var PostHeader = require('./post_header.jsx');
diff --git a/web/react/components/post_body.jsx b/web/react/components/post_body.jsx
index 1d94cab47..e87ac6743 100644
--- a/web/react/components/post_body.jsx
+++ b/web/react/components/post_body.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const FileAttachmentList = require('./file_attachment_list.jsx');
diff --git a/web/react/components/post_deleted_modal.jsx b/web/react/components/post_deleted_modal.jsx
index 3f487d20f..87afc6a7f 100644
--- a/web/react/components/post_deleted_modal.jsx
+++ b/web/react/components/post_deleted_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/post_header.jsx b/web/react/components/post_header.jsx
index dd79b3e36..0ba5ce6b5 100644
--- a/web/react/components/post_header.jsx
+++ b/web/react/components/post_header.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserProfile = require('./user_profile.jsx');
diff --git a/web/react/components/post_info.jsx b/web/react/components/post_info.jsx
index c1e8979a4..87962641f 100644
--- a/web/react/components/post_info.jsx
+++ b/web/react/components/post_info.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/post_list.jsx b/web/react/components/post_list.jsx
index 6741a9bdd..643b38af5 100644
--- a/web/react/components/post_list.jsx
+++ b/web/react/components/post_list.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var PostStore = require('../stores/post_store.jsx');
@@ -379,13 +379,9 @@ export default class PostList extends React.Component {
<p className='channel-intro__content'>
Welcome to {channel.display_name}!
<br/><br/>
- This is the first channel teammates see when they
- <br/>
- sign up - use it for posting updates everyone needs to know.
+ This is the first channel teammates see when they sign up - use it for posting updates everyone needs to know.
<br/><br/>
- To create a new channel or join an existing one, go to
- <br/>
- the Left Hand Sidebar under “Channels” and click “More…”.
+ To create a new channel or join an existing one, go to the Left Sidebar under “Channels” and click “More…”.
<br/>
</p>
</div>
diff --git a/web/react/components/post_list_container.jsx b/web/react/components/post_list_container.jsx
index e59d85d41..09cee6218 100644
--- a/web/react/components/post_list_container.jsx
+++ b/web/react/components/post_list_container.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const PostList = require('./post_list.jsx');
diff --git a/web/react/components/register_app_modal.jsx b/web/react/components/register_app_modal.jsx
index 473ff3f91..e93c44126 100644
--- a/web/react/components/register_app_modal.jsx
+++ b/web/react/components/register_app_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../utils/client.jsx');
diff --git a/web/react/components/removed_from_channel_modal.jsx b/web/react/components/removed_from_channel_modal.jsx
index b7ec85457..ca35d6fb0 100644
--- a/web/react/components/removed_from_channel_modal.jsx
+++ b/web/react/components/removed_from_channel_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var ChannelStore = require('../stores/channel_store.jsx');
@@ -26,13 +26,13 @@ export default class RemovedFromChannelModal extends React.Component {
BrowserStore.removeItem('channel-removed-state');
}
+ var townSquare = ChannelStore.getByName('town-square');
+ setTimeout(() => utils.switchChannel(townSquare), 1);
+
this.setState(newState);
}
handleClose() {
- var townSquare = ChannelStore.getByName('town-square');
- utils.switchChannel(townSquare);
-
this.setState({channelName: '', remover: ''});
}
@@ -98,4 +98,4 @@ export default class RemovedFromChannelModal extends React.Component {
return <div/>;
}
-} \ No newline at end of file
+}
diff --git a/web/react/components/rename_channel_modal.jsx b/web/react/components/rename_channel_modal.jsx
index d60206ecf..7f7d4554c 100644
--- a/web/react/components/rename_channel_modal.jsx
+++ b/web/react/components/rename_channel_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/rhs_comment.jsx b/web/react/components/rhs_comment.jsx
index aa355f8cc..d1ed9b2c0 100644
--- a/web/react/components/rhs_comment.jsx
+++ b/web/react/components/rhs_comment.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var PostStore = require('../stores/post_store.jsx');
diff --git a/web/react/components/rhs_header_post.jsx b/web/react/components/rhs_header_post.jsx
index f55c4095e..856eea91d 100644
--- a/web/react/components/rhs_header_post.jsx
+++ b/web/react/components/rhs_header_post.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/components/rhs_root_post.jsx b/web/react/components/rhs_root_post.jsx
index 13ab0c982..c44844f34 100644
--- a/web/react/components/rhs_root_post.jsx
+++ b/web/react/components/rhs_root_post.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var ChannelStore = require('../stores/channel_store.jsx');
diff --git a/web/react/components/rhs_thread.jsx b/web/react/components/rhs_thread.jsx
index 27a784701..41fd74adb 100644
--- a/web/react/components/rhs_thread.jsx
+++ b/web/react/components/rhs_thread.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var PostStore = require('../stores/post_store.jsx');
diff --git a/web/react/components/search_bar.jsx b/web/react/components/search_bar.jsx
index 77166fef9..a6f9441ec 100644
--- a/web/react/components/search_bar.jsx
+++ b/web/react/components/search_bar.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var client = require('../utils/client.jsx');
diff --git a/web/react/components/search_results.jsx b/web/react/components/search_results.jsx
index 6ee817171..5eea3c501 100644
--- a/web/react/components/search_results.jsx
+++ b/web/react/components/search_results.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var PostStore = require('../stores/post_store.jsx');
diff --git a/web/react/components/search_results_header.jsx b/web/react/components/search_results_header.jsx
index 4e8a3ef10..fdd449c2d 100644
--- a/web/react/components/search_results_header.jsx
+++ b/web/react/components/search_results_header.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/components/search_results_item.jsx b/web/react/components/search_results_item.jsx
index bdefdbee8..75d2e7a45 100644
--- a/web/react/components/search_results_item.jsx
+++ b/web/react/components/search_results_item.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var PostStore = require('../stores/post_store.jsx');
diff --git a/web/react/components/setting_item_max.jsx b/web/react/components/setting_item_max.jsx
index 1bffa7c79..d2cbc798e 100644
--- a/web/react/components/setting_item_max.jsx
+++ b/web/react/components/setting_item_max.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
export default class SettingItemMax extends React.Component {
diff --git a/web/react/components/setting_item_min.jsx b/web/react/components/setting_item_min.jsx
index 2c0fdf2f4..2a72be207 100644
--- a/web/react/components/setting_item_min.jsx
+++ b/web/react/components/setting_item_min.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
export default class SettingItemMin extends React.Component {
diff --git a/web/react/components/setting_picture.jsx b/web/react/components/setting_picture.jsx
index ddad4fd53..c9031e67c 100644
--- a/web/react/components/setting_picture.jsx
+++ b/web/react/components/setting_picture.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
export default class SettingPicture extends React.Component {
diff --git a/web/react/components/setting_upload.jsx b/web/react/components/setting_upload.jsx
index ccb26cc58..c7107b84d 100644
--- a/web/react/components/setting_upload.jsx
+++ b/web/react/components/setting_upload.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
export default class SettingsUpload extends React.Component {
diff --git a/web/react/components/settings_sidebar.jsx b/web/react/components/settings_sidebar.jsx
index 4c4675788..b5d2132d7 100644
--- a/web/react/components/settings_sidebar.jsx
+++ b/web/react/components/settings_sidebar.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
export default class SettingsSidebar extends React.Component {
diff --git a/web/react/components/sidebar.jsx b/web/react/components/sidebar.jsx
index 88eaed335..4ac1fd4a0 100644
--- a/web/react/components/sidebar.jsx
+++ b/web/react/components/sidebar.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var ChannelStore = require('../stores/channel_store.jsx');
@@ -262,7 +262,7 @@ export default class Sidebar extends React.Component {
if (msg.user_id === UserStore.getCurrentId()) {
AsyncClient.getChannels(true);
- if (msg.props.channel_id === ChannelStore.getCurrentId() && $('#removed_from_channel').length > 0) {
+ if (msg.props.remover !== msg.user_id && msg.props.channel_id === ChannelStore.getCurrentId() && $('#removed_from_channel').length > 0) {
var sentState = {};
sentState.channelName = ChannelStore.getCurrent().display_name;
sentState.remover = UserStore.getProfile(msg.props.remover).username;
diff --git a/web/react/components/sidebar_header.jsx b/web/react/components/sidebar_header.jsx
index 33de35064..c3709bc0a 100644
--- a/web/react/components/sidebar_header.jsx
+++ b/web/react/components/sidebar_header.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var NavbarDropdown = require('./navbar_dropdown.jsx');
diff --git a/web/react/components/sidebar_right.jsx b/web/react/components/sidebar_right.jsx
index 573515a46..4e6985a86 100644
--- a/web/react/components/sidebar_right.jsx
+++ b/web/react/components/sidebar_right.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var SearchResults = require('./search_results.jsx');
diff --git a/web/react/components/sidebar_right_menu.jsx b/web/react/components/sidebar_right_menu.jsx
index 2df2c8ffd..ea2bcf9a4 100644
--- a/web/react/components/sidebar_right_menu.jsx
+++ b/web/react/components/sidebar_right_menu.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/signup_team.jsx b/web/react/components/signup_team.jsx
index 4112138fa..48cf2c73c 100644
--- a/web/react/components/signup_team.jsx
+++ b/web/react/components/signup_team.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const ChoosePage = require('./team_signup_choose_auth.jsx');
diff --git a/web/react/components/signup_team_complete.jsx b/web/react/components/signup_team_complete.jsx
index 9c03c5c2f..c30132885 100644
--- a/web/react/components/signup_team_complete.jsx
+++ b/web/react/components/signup_team_complete.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var WelcomePage = require('./team_signup_welcome_page.jsx');
diff --git a/web/react/components/signup_user_complete.jsx b/web/react/components/signup_user_complete.jsx
index 4e17c6d06..75661f812 100644
--- a/web/react/components/signup_user_complete.jsx
+++ b/web/react/components/signup_user_complete.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/team_export_tab.jsx b/web/react/components/team_export_tab.jsx
index 2914904ad..e15e3a372 100644
--- a/web/react/components/team_export_tab.jsx
+++ b/web/react/components/team_export_tab.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../utils/client.jsx');
diff --git a/web/react/components/team_general_tab.jsx b/web/react/components/team_general_tab.jsx
index ca438df78..923180e27 100644
--- a/web/react/components/team_general_tab.jsx
+++ b/web/react/components/team_general_tab.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const SettingItemMin = require('./setting_item_min.jsx');
diff --git a/web/react/components/team_import_tab.jsx b/web/react/components/team_import_tab.jsx
index 79f03510f..40f06c382 100644
--- a/web/react/components/team_import_tab.jsx
+++ b/web/react/components/team_import_tab.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var utils = require('../utils/utils.jsx');
diff --git a/web/react/components/team_members.jsx b/web/react/components/team_members.jsx
index 0cd22437e..0f60d93b2 100644
--- a/web/react/components/team_members.jsx
+++ b/web/react/components/team_members.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
diff --git a/web/react/components/team_settings.jsx b/web/react/components/team_settings.jsx
index e91aa20bc..e14da4f04 100644
--- a/web/react/components/team_settings.jsx
+++ b/web/react/components/team_settings.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var TeamStore = require('../stores/team_store.jsx');
diff --git a/web/react/components/team_settings_modal.jsx b/web/react/components/team_settings_modal.jsx
index a96aadccf..b55373dba 100644
--- a/web/react/components/team_settings_modal.jsx
+++ b/web/react/components/team_settings_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const SettingsSidebar = require('./settings_sidebar.jsx');
diff --git a/web/react/components/team_signup_choose_auth.jsx b/web/react/components/team_signup_choose_auth.jsx
index 8cdeace03..fa898f63c 100644
--- a/web/react/components/team_signup_choose_auth.jsx
+++ b/web/react/components/team_signup_choose_auth.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
export default class ChooseAuthPage extends React.Component {
diff --git a/web/react/components/team_signup_display_name_page.jsx b/web/react/components/team_signup_display_name_page.jsx
index c0d0ed366..65da4bc96 100644
--- a/web/react/components/team_signup_display_name_page.jsx
+++ b/web/react/components/team_signup_display_name_page.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var utils = require('../utils/utils.jsx');
diff --git a/web/react/components/team_signup_email_item.jsx b/web/react/components/team_signup_email_item.jsx
index 01330a46c..219f14eef 100644
--- a/web/react/components/team_signup_email_item.jsx
+++ b/web/react/components/team_signup_email_item.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/team_signup_password_page.jsx b/web/react/components/team_signup_password_page.jsx
index 105e4817a..dce8105ca 100644
--- a/web/react/components/team_signup_password_page.jsx
+++ b/web/react/components/team_signup_password_page.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../utils/client.jsx');
diff --git a/web/react/components/team_signup_send_invites_page.jsx b/web/react/components/team_signup_send_invites_page.jsx
index 8d8fb92ff..e7bc0272d 100644
--- a/web/react/components/team_signup_send_invites_page.jsx
+++ b/web/react/components/team_signup_send_invites_page.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var EmailItem = require('./team_signup_email_item.jsx');
diff --git a/web/react/components/team_signup_url_page.jsx b/web/react/components/team_signup_url_page.jsx
index a682bb49e..398a52f7d 100644
--- a/web/react/components/team_signup_url_page.jsx
+++ b/web/react/components/team_signup_url_page.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/team_signup_username_page.jsx b/web/react/components/team_signup_username_page.jsx
index 0053b011d..53a389c4c 100644
--- a/web/react/components/team_signup_username_page.jsx
+++ b/web/react/components/team_signup_username_page.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/team_signup_welcome_page.jsx b/web/react/components/team_signup_welcome_page.jsx
index 019456c9f..78a41eed5 100644
--- a/web/react/components/team_signup_welcome_page.jsx
+++ b/web/react/components/team_signup_welcome_page.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/team_signup_with_email.jsx b/web/react/components/team_signup_with_email.jsx
index f27def191..9376a4564 100644
--- a/web/react/components/team_signup_with_email.jsx
+++ b/web/react/components/team_signup_with_email.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Utils = require('../utils/utils.jsx');
@@ -14,8 +14,8 @@ export default class EmailSignUpPage extends React.Component {
}
handleSubmit(e) {
e.preventDefault();
- let team = {};
- let state = {serverError: ''};
+ var team = {};
+ var state = {serverError: ''};
team.email = React.findDOMNode(this.refs.email).value.trim().toLowerCase();
if (!team.email || !Utils.isEmail(team.email)) {
@@ -31,20 +31,25 @@ export default class EmailSignUpPage extends React.Component {
}
Client.signupTeam(team.email,
- function success(data) {
+ (data) => {
if (data.follow_link) {
window.location.href = data.follow_link;
} else {
window.location.href = `/signup_team_confirm/?email=${encodeURIComponent(team.email)}`;
}
},
- function fail(err) {
+ (err) => {
state.serverError = err.message;
this.setState(state);
- }.bind(this)
+ }
);
}
render() {
+ var serverError = null;
+ if (this.state.serverError) {
+ serverError = <div className='form-group has-error'><label className='control-label'>{this.state.serverError}</label></div>;
+ }
+
return (
<form
role='form'
@@ -65,8 +70,9 @@ export default class EmailSignUpPage extends React.Component {
className='btn btn-md btn-primary'
type='submit'
>
- Sign up
+ {'Sign up'}
</button>
+ {serverError}
</div>
<div className='form-group margin--extra-2x'>
<span><a href='/find_team'>{`Find my teams`}</a></span>
diff --git a/web/react/components/team_signup_with_sso.jsx b/web/react/components/team_signup_with_sso.jsx
index 5267f44b6..011bfebff 100644
--- a/web/react/components/team_signup_with_sso.jsx
+++ b/web/react/components/team_signup_with_sso.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var utils = require('../utils/utils.jsx');
@@ -40,17 +40,17 @@ export default class SSOSignUpPage extends React.Component {
client.createTeamWithSSO(team,
this.props.service,
- function success(data) {
+ (data) => {
if (data.follow_link) {
window.location.href = data.follow_link;
} else {
window.location.href = '/' + team.name + '/channels/town-square';
}
},
- function fail(err) {
+ (err) => {
state.serverError = err.message;
this.setState(state);
- }.bind(this)
+ }
);
}
nameChange() {
@@ -85,7 +85,7 @@ export default class SSOSignUpPage extends React.Component {
disabled={disabled}
>
<span className='icon'/>
- <span>Create team with GitLab Account</span>
+ <span>{'Create team with GitLab Account'}</span>
</a>
);
}
diff --git a/web/react/components/textbox.jsx b/web/react/components/textbox.jsx
index 5f5316013..0563c294a 100644
--- a/web/react/components/textbox.jsx
+++ b/web/react/components/textbox.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/components/unread_channel_indicator.jsx b/web/react/components/unread_channel_indicator.jsx
index 12a67633e..6ae06528b 100644
--- a/web/react/components/unread_channel_indicator.jsx
+++ b/web/react/components/unread_channel_indicator.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
// Indicator for the left sidebar which indicate if there's unread posts in a channel that is not shown
diff --git a/web/react/components/user_profile.jsx b/web/react/components/user_profile.jsx
index ceb8f52a7..948f06444 100644
--- a/web/react/components/user_profile.jsx
+++ b/web/react/components/user_profile.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Utils = require('../utils/utils.jsx');
diff --git a/web/react/components/user_settings/custom_theme_chooser.jsx b/web/react/components/user_settings/custom_theme_chooser.jsx
index c680d75d1..44b3f4544 100644
--- a/web/react/components/user_settings/custom_theme_chooser.jsx
+++ b/web/react/components/user_settings/custom_theme_chooser.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Constants = require('../../utils/constants.jsx');
diff --git a/web/react/components/user_settings/import_theme_modal.jsx b/web/react/components/user_settings/import_theme_modal.jsx
index 3301c6596..de0663874 100644
--- a/web/react/components/user_settings/import_theme_modal.jsx
+++ b/web/react/components/user_settings/import_theme_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const UserStore = require('../../stores/user_store.jsx');
diff --git a/web/react/components/user_settings/manage_incoming_hooks.jsx b/web/react/components/user_settings/manage_incoming_hooks.jsx
index 899dbcd05..90b4039c7 100644
--- a/web/react/components/user_settings/manage_incoming_hooks.jsx
+++ b/web/react/components/user_settings/manage_incoming_hooks.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Client = require('../../utils/client.jsx');
diff --git a/web/react/components/user_settings/premade_theme_chooser.jsx b/web/react/components/user_settings/premade_theme_chooser.jsx
index 8116bffcc..22cfcebcd 100644
--- a/web/react/components/user_settings/premade_theme_chooser.jsx
+++ b/web/react/components/user_settings/premade_theme_chooser.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Utils = require('../../utils/utils.jsx');
diff --git a/web/react/components/user_settings/user_settings.jsx b/web/react/components/user_settings/user_settings.jsx
index 0eab333c4..5ce9b6330 100644
--- a/web/react/components/user_settings/user_settings.jsx
+++ b/web/react/components/user_settings/user_settings.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../../stores/user_store.jsx');
diff --git a/web/react/components/user_settings/user_settings_appearance.jsx b/web/react/components/user_settings/user_settings_appearance.jsx
index be6cf1f42..6d64e83b6 100644
--- a/web/react/components/user_settings/user_settings_appearance.jsx
+++ b/web/react/components/user_settings/user_settings_appearance.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../../stores/user_store.jsx');
diff --git a/web/react/components/user_settings/user_settings_developer.jsx b/web/react/components/user_settings/user_settings_developer.jsx
index d9fb43902..c2d7a9710 100644
--- a/web/react/components/user_settings/user_settings_developer.jsx
+++ b/web/react/components/user_settings/user_settings_developer.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var SettingItemMin = require('../setting_item_min.jsx');
diff --git a/web/react/components/user_settings/user_settings_general.jsx b/web/react/components/user_settings/user_settings_general.jsx
index c1d4c4ab5..c23c61948 100644
--- a/web/react/components/user_settings/user_settings_general.jsx
+++ b/web/react/components/user_settings/user_settings_general.jsx
@@ -1,7 +1,8 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../../stores/user_store.jsx');
+var ErrorStore = require('../../stores/error_store.jsx');
var SettingItemMin = require('../setting_item_min.jsx');
var SettingItemMax = require('../setting_item_max.jsx');
var SettingPicture = require('../setting_picture.jsx');
@@ -27,6 +28,7 @@ export default class UserSettingsGeneralTab extends React.Component {
this.updateLastName = this.updateLastName.bind(this);
this.updateNickname = this.updateNickname.bind(this);
this.updateEmail = this.updateEmail.bind(this);
+ this.updateConfirmEmail = this.updateConfirmEmail.bind(this);
this.updatePicture = this.updatePicture.bind(this);
this.updateSection = this.updateSection.bind(this);
@@ -96,6 +98,7 @@ export default class UserSettingsGeneralTab extends React.Component {
var user = UserStore.getCurrentUser();
var email = this.state.email.trim().toLowerCase();
+ var confirmEmail = this.state.confirmEmail.trim().toLowerCase();
if (user.email === email) {
return;
@@ -106,8 +109,12 @@ export default class UserSettingsGeneralTab extends React.Component {
return;
}
- user.email = email;
+ if (email !== confirmEmail) {
+ this.setState({emailError: 'The new emails you entered do not match'});
+ return;
+ }
+ user.email = email;
this.submitUser(user);
}
submitUser(user) {
@@ -115,6 +122,13 @@ export default class UserSettingsGeneralTab extends React.Component {
function updateSuccess() {
this.updateSection('');
AsyncClient.getMe();
+ const verificationEnabled = global.window.config.SendEmailNotifications === 'true' && global.window.config.RequireEmailVerification === 'true';
+
+ if (verificationEnabled) {
+ ErrorStore.storeLastError({message: 'Check your email at ' + user.email + ' to verify the address.'});
+ ErrorStore.emitChange();
+ this.setState({emailChangeInProgress: true});
+ }
}.bind(this),
function updateFailure(err) {
var state = this.setupInitialState(this.props);
@@ -177,6 +191,9 @@ export default class UserSettingsGeneralTab extends React.Component {
updateEmail(e) {
this.setState({email: e.target.value});
}
+ updateConfirmEmail(e) {
+ this.setState({confirmEmail: e.target.value});
+ }
updatePicture(e) {
if (e.target.files && e.target.files[0]) {
this.setState({picture: e.target.files[0]});
@@ -188,7 +205,8 @@ export default class UserSettingsGeneralTab extends React.Component {
}
}
updateSection(section) {
- this.setState(assign({}, this.setupInitialState(this.props), {clientError: '', serverError: '', emailError: ''}));
+ const emailChangeInProgress = this.state.emailChangeInProgress;
+ this.setState(assign({}, this.setupInitialState(this.props), {emailChangeInProgress: emailChangeInProgress, clientError: '', serverError: '', emailError: ''}));
this.submitActive = false;
this.props.updateSection(section);
}
@@ -208,9 +226,9 @@ export default class UserSettingsGeneralTab extends React.Component {
}
setupInitialState(props) {
var user = props.user;
- var emailEnabled = global.window.config.SendEmailNotifications === 'true';
+
return {username: user.username, firstName: user.first_name, lastName: user.last_name, nickname: user.nickname,
- email: user.email, picture: null, loadingPicture: false, emailEnabled: emailEnabled};
+ email: user.email, confirmEmail: '', picture: null, loadingPicture: false, emailChangeInProgress: false};
}
render() {
var user = this.props.user;
@@ -434,10 +452,19 @@ export default class UserSettingsGeneralTab extends React.Component {
}
var emailSection;
if (this.props.activeSection === 'email') {
- let helpText = <div>Email is used for notifications, and requires verification if changed.</div>;
+ const emailEnabled = global.window.config.SendEmailNotifications === 'true';
+ const emailVerificationEnabled = global.window.config.RequireEmailVerification === 'true';
+ let helpText = 'Email is used for notifications, and requires verification if changed.';
- if (!this.state.emailEnabled) {
+ if (!emailEnabled) {
helpText = <div className='setting-list__hint text-danger'>{'Email has been disabled by your system administrator. No notification emails will be sent until it is enabled.'}</div>;
+ } else if (!emailVerificationEnabled) {
+ helpText = 'Email is used for notifications.';
+ } else if (this.state.emailChangeInProgress) {
+ const newEmail = UserStore.getCurrentUser().email;
+ if (newEmail) {
+ helpText = 'A verification email was sent to ' + newEmail + '.';
+ }
}
inputs.push(
@@ -453,6 +480,22 @@ export default class UserSettingsGeneralTab extends React.Component {
/>
</div>
</div>
+ </div>
+ );
+
+ inputs.push(
+ <div key='confirmEmailSetting'>
+ <div className='form-group'>
+ <label className='col-sm-5 control-label'>{'Confirm Email'}</label>
+ <div className='col-sm-7'>
+ <input
+ className='form-control'
+ type='text'
+ onChange={this.updateConfirmEmail}
+ value={this.state.confirmEmail}
+ />
+ </div>
+ </div>
{helpText}
</div>
);
@@ -471,10 +514,22 @@ export default class UserSettingsGeneralTab extends React.Component {
/>
);
} else {
+ let describe = '';
+ if (this.state.emailChangeInProgress) {
+ const newEmail = UserStore.getCurrentUser().email;
+ if (newEmail) {
+ describe = 'New Address: ' + newEmail + '\nCheck your email to verify the above address.';
+ } else {
+ describe = 'Check your email to verify your new address';
+ }
+ } else {
+ describe = UserStore.getCurrentUser().email;
+ }
+
emailSection = (
<SettingItemMin
title='Email'
- describe={UserStore.getCurrentUser().email}
+ describe={describe}
updateSection={function updateEmailSection() {
this.updateSection('email');
}.bind(this)}
diff --git a/web/react/components/user_settings/user_settings_integrations.jsx b/web/react/components/user_settings/user_settings_integrations.jsx
index cb45c5178..ea3f72f27 100644
--- a/web/react/components/user_settings/user_settings_integrations.jsx
+++ b/web/react/components/user_settings/user_settings_integrations.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var SettingItemMin = require('../setting_item_min.jsx');
diff --git a/web/react/components/user_settings/user_settings_modal.jsx b/web/react/components/user_settings/user_settings_modal.jsx
index 5113d2429..19b97fc85 100644
--- a/web/react/components/user_settings/user_settings_modal.jsx
+++ b/web/react/components/user_settings/user_settings_modal.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var SettingsSidebar = require('../settings_sidebar.jsx');
diff --git a/web/react/components/user_settings/user_settings_notifications.jsx b/web/react/components/user_settings/user_settings_notifications.jsx
index e83f18aab..4728a33ee 100644
--- a/web/react/components/user_settings/user_settings_notifications.jsx
+++ b/web/react/components/user_settings/user_settings_notifications.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../../stores/user_store.jsx');
diff --git a/web/react/components/user_settings/user_settings_security.jsx b/web/react/components/user_settings/user_settings_security.jsx
index 4ff4775a7..74190781c 100644
--- a/web/react/components/user_settings/user_settings_security.jsx
+++ b/web/react/components/user_settings/user_settings_security.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var SettingItemMin = require('../setting_item_min.jsx');
diff --git a/web/react/components/view_image.jsx b/web/react/components/view_image.jsx
index fe34034dc..8ef68dd0a 100644
--- a/web/react/components/view_image.jsx
+++ b/web/react/components/view_image.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Client = require('../utils/client.jsx');
diff --git a/web/react/components/view_image_popover_bar.jsx b/web/react/components/view_image_popover_bar.jsx
index 132212afb..5b3ee540c 100644
--- a/web/react/components/view_image_popover_bar.jsx
+++ b/web/react/components/view_image_popover_bar.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
export default class ViewImagePopoverBar extends React.Component {
diff --git a/web/react/dispatcher/app_dispatcher.jsx b/web/react/dispatcher/app_dispatcher.jsx
index 04e026f46..388e82a51 100644
--- a/web/react/dispatcher/app_dispatcher.jsx
+++ b/web/react/dispatcher/app_dispatcher.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Dispatcher = require('flux').Dispatcher;
diff --git a/web/react/pages/admin_console.jsx b/web/react/pages/admin_console.jsx
index 689a6b3a2..7e7dcfae8 100644
--- a/web/react/pages/admin_console.jsx
+++ b/web/react/pages/admin_console.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var ErrorBar = require('../components/error_bar.jsx');
diff --git a/web/react/pages/authorize.jsx b/web/react/pages/authorize.jsx
index 8ea8b13eb..1338e6cc2 100644
--- a/web/react/pages/authorize.jsx
+++ b/web/react/pages/authorize.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Authorize = require('../components/authorize.jsx');
diff --git a/web/react/pages/channel.jsx b/web/react/pages/channel.jsx
index c333fd57d..4d6d3fd15 100644
--- a/web/react/pages/channel.jsx
+++ b/web/react/pages/channel.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/pages/find_team.jsx b/web/react/pages/find_team.jsx
index dd11857ac..d901e380b 100644
--- a/web/react/pages/find_team.jsx
+++ b/web/react/pages/find_team.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var FindTeam = require('../components/find_team.jsx');
diff --git a/web/react/pages/home.jsx b/web/react/pages/home.jsx
index 2299c306e..5f0fa9d96 100644
--- a/web/react/pages/home.jsx
+++ b/web/react/pages/home.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var ChannelStore = require('../stores/channel_store.jsx');
diff --git a/web/react/pages/login.jsx b/web/react/pages/login.jsx
index f78e0f37a..17835c47f 100644
--- a/web/react/pages/login.jsx
+++ b/web/react/pages/login.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var Login = require('../components/login.jsx');
diff --git a/web/react/pages/password_reset.jsx b/web/react/pages/password_reset.jsx
index b7bfdcd5e..6f9c5eab1 100644
--- a/web/react/pages/password_reset.jsx
+++ b/web/react/pages/password_reset.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var PasswordReset = require('../components/password_reset.jsx');
diff --git a/web/react/pages/signup_team.jsx b/web/react/pages/signup_team.jsx
index d0e08f446..06b5cfad9 100644
--- a/web/react/pages/signup_team.jsx
+++ b/web/react/pages/signup_team.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var SignupTeam = require('../components/signup_team.jsx');
diff --git a/web/react/pages/signup_team_complete.jsx b/web/react/pages/signup_team_complete.jsx
index ec77e6602..572117867 100644
--- a/web/react/pages/signup_team_complete.jsx
+++ b/web/react/pages/signup_team_complete.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var SignupTeamComplete = require('../components/signup_team_complete.jsx');
diff --git a/web/react/pages/signup_user_complete.jsx b/web/react/pages/signup_user_complete.jsx
index cc7607187..63a55b4a1 100644
--- a/web/react/pages/signup_user_complete.jsx
+++ b/web/react/pages/signup_user_complete.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var SignupUserComplete = require('../components/signup_user_complete.jsx');
diff --git a/web/react/pages/verify.jsx b/web/react/pages/verify.jsx
index 16a9846e5..7f06ff6fb 100644
--- a/web/react/pages/verify.jsx
+++ b/web/react/pages/verify.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var EmailVerify = require('../components/email_verify.jsx');
diff --git a/web/react/stores/admin_store.jsx b/web/react/stores/admin_store.jsx
index 7b2aeb631..cf16d031c 100644
--- a/web/react/stores/admin_store.jsx
+++ b/web/react/stores/admin_store.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/stores/browser_store.jsx b/web/react/stores/browser_store.jsx
index 27a74fb2b..c2e7df58e 100644
--- a/web/react/stores/browser_store.jsx
+++ b/web/react/stores/browser_store.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore;
diff --git a/web/react/stores/channel_store.jsx b/web/react/stores/channel_store.jsx
index b9ba37c27..d1f548d50 100644
--- a/web/react/stores/channel_store.jsx
+++ b/web/react/stores/channel_store.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/stores/error_store.jsx b/web/react/stores/error_store.jsx
index ece7d8522..a4c42dcb7 100644
--- a/web/react/stores/error_store.jsx
+++ b/web/react/stores/error_store.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/stores/post_store.jsx b/web/react/stores/post_store.jsx
index 29ce47300..d8da48000 100644
--- a/web/react/stores/post_store.jsx
+++ b/web/react/stores/post_store.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/stores/socket_store.jsx b/web/react/stores/socket_store.jsx
index 9f354965e..77e7067ad 100644
--- a/web/react/stores/socket_store.jsx
+++ b/web/react/stores/socket_store.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/stores/team_store.jsx b/web/react/stores/team_store.jsx
index fd9117747..7001acdb1 100644
--- a/web/react/stores/team_store.jsx
+++ b/web/react/stores/team_store.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/stores/user_store.jsx b/web/react/stores/user_store.jsx
index 8842263fa..fa74f812d 100644
--- a/web/react/stores/user_store.jsx
+++ b/web/react/stores/user_store.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/react/utils/async_client.jsx b/web/react/utils/async_client.jsx
index 7db3ef30d..a903f055b 100644
--- a/web/react/utils/async_client.jsx
+++ b/web/react/utils/async_client.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var client = require('./client.jsx');
diff --git a/web/react/utils/constants.jsx b/web/react/utils/constants.jsx
index 8fd0ab79b..affc49196 100644
--- a/web/react/utils/constants.jsx
+++ b/web/react/utils/constants.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var keyMirror = require('keymirror');
diff --git a/web/react/utils/emoticons.jsx b/web/react/utils/emoticons.jsx
index a7c837199..94bb91503 100644
--- a/web/react/utils/emoticons.jsx
+++ b/web/react/utils/emoticons.jsx
@@ -1,27 +1,27 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const emoticonPatterns = {
- smile: /:-?\)/g, // :)
- open_mouth: /:o/gi, // :o
- scream: /:-o/gi, // :-o
- smirk: /:-?]/g, // :]
- grinning: /:-?d/gi, // :D
- stuck_out_tongue_closed_eyes: /x-d/gi, // x-d
- stuck_out_tongue_winking_eye: /:-?p/gi, // :p
- rage: /:-?[\[@]/g, // :@
- frowning: /:-?\(/g, // :(
- sob: /:['’]-?\(|:&#x27;\(/g, // :`(
- kissing_heart: /:-?\*/g, // :*
- pensive: /:-?\//g, // :/
- confounded: /:-?s/gi, // :s
- flushed: /:-?\|/g, // :|
- relaxed: /:-?\$/g, // :$
- mask: /:-x/gi, // :-x
- heart: /<3|&lt;3/g, // <3
- broken_heart: /<\/3|&lt;&#x2F;3/g, // </3
- thumbsup: /:\+1:/g, // :+1:
- thumbsdown: /:\-1:/g // :-1:
+ smile: /(^|\s)(:-?\))($|\s)/g, // :)
+ open_mouth: /(^|\s)(:o)($|\s)/gi, // :o
+ scream: /(^|\s)(:-o)($|\s)/gi, // :-o
+ smirk: /(^|\s)(:-?])($|\s)/g, // :]
+ grinning: /(^|\s)(:-?d)($|\s)/gi, // :D
+ stuck_out_tongue_closed_eyes: /(^|\s)(x-d)($|\s)/gi, // x-d
+ stuck_out_tongue: /(^|\s)(:-?p)($|\s)/gi, // :p
+ rage: /(^|\s)(:-?[\[@])($|\s)/g, // :@
+ frowning: /(^|\s)(:-?\()($|\s)/g, // :(
+ sob: /(^|\s)(:['’]-?\(|:&#x27;\(|:&#39;\()($|\s)/g, // :`(
+ kissing_heart: /(^|\s)(:-?\*)($|\s)/g, // :*
+ pensive: /(^|\s)(:-?\/)($|\s)/g, // :/
+ confounded: /(^|\s)(:-?s)($|\s)/gi, // :s
+ flushed: /(^|\s)(:-?\|)($|\s)/g, // :|
+ relaxed: /(^|\s)(:-?\$)($|\s)/g, // :$
+ mask: /(^|\s)(:-x)($|\s)/gi, // :-x
+ heart: /(^|\s)(<3|&lt;3)($|\s)/g, // <3
+ broken_heart: /(^|\s)(<\/3|&lt;&#x2F;3)($|\s)/g, // </3
+ thumbsup: /(^|\s)(:\+1:)($|\s)/g, // :+1:
+ thumbsdown: /(^|\s)(:\-1:)($|\s)/g // :-1:
};
function initializeEmoticonMap() {
@@ -126,7 +126,7 @@ const emoticonMap = initializeEmoticonMap();
export function handleEmoticons(text, tokens) {
let output = text;
- function replaceEmoticonWithToken(match, name) {
+ function replaceEmoticonWithToken(match, prefix, name, suffix) {
if (emoticonMap[name]) {
const index = tokens.size;
const alias = `MM_EMOTICON${index}`;
@@ -136,18 +136,18 @@ export function handleEmoticons(text, tokens) {
originalText: match
});
- return alias;
+ return prefix + alias + suffix;
}
return match;
}
- output = output.replace(/:([a-zA-Z0-9_-]+):/g, replaceEmoticonWithToken);
+ output = output.replace(/(^|\s):([a-zA-Z0-9_-]+):($|\s)/g, replaceEmoticonWithToken);
$.each(emoticonPatterns, (name, pattern) => {
// this might look a bit funny, but since the name isn't contained in the actual match
// like with the named emoticons, we need to add it in manually
- output = output.replace(pattern, (match) => replaceEmoticonWithToken(match, name));
+ output = output.replace(pattern, (match, prefix, emoticon, suffix) => replaceEmoticonWithToken(match, prefix, name, suffix));
});
return output;
diff --git a/web/react/utils/markdown.jsx b/web/react/utils/markdown.jsx
index 7e88f8644..12d6dd424 100644
--- a/web/react/utils/markdown.jsx
+++ b/web/react/utils/markdown.jsx
@@ -1,7 +1,8 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const TextFormatting = require('./text_formatting.jsx');
+const Utils = require('./utils.jsx');
const marked = require('marked');
@@ -39,7 +40,14 @@ export class MattermostMarkdownRenderer extends marked.Renderer {
if (title) {
output += ' title="' + title + '"';
}
- output += ' target="_blank">' + text + '</a>';
+
+ if (outHref.lastIndexOf(Utils.getTeamURLFromAddressBar(), 0) === 0) {
+ output += '>';
+ } else {
+ output += ' target="_blank">';
+ }
+
+ output += text + '</a>';
return output;
}
diff --git a/web/react/utils/text_formatting.jsx b/web/react/utils/text_formatting.jsx
index 34e42cbae..a90a8bcc1 100644
--- a/web/react/utils/text_formatting.jsx
+++ b/web/react/utils/text_formatting.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
const Autolinker = require('autolinker');
@@ -96,8 +96,13 @@ function autolinkUrls(text, tokens) {
const index = tokens.size;
const alias = `MM_LINK${index}`;
+ var target = 'target="_blank"';
+ if (url.lastIndexOf(Utils.getTeamURLFromAddressBar(), 0) === 0) {
+ target = '';
+ }
+
tokens.set(alias, {
- value: `<a class='theme' target='_blank' href='${url}'>${linkText}</a>`,
+ value: '<a class="theme"' + target + ' href="${url}">${linkText}</a>',
originalText: linkText
});
diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx
index f79f3492f..f9166063e 100644
--- a/web/react/utils/utils.jsx
+++ b/web/react/utils/utils.jsx
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
diff --git a/web/sass-files/sass/partials/_settings.scss b/web/sass-files/sass/partials/_settings.scss
index 9369cc097..8debb0b4e 100644
--- a/web/sass-files/sass/partials/_settings.scss
+++ b/web/sass-files/sass/partials/_settings.scss
@@ -132,6 +132,7 @@
.section-describe {
@include opacity(0.7);
+ white-space:pre;
}
.divider-dark {
diff --git a/web/templates/footer.html b/web/templates/footer.html
index 4b15295b4..296e902cf 100644
--- a/web/templates/footer.html
+++ b/web/templates/footer.html
@@ -4,7 +4,7 @@
<span class="pull-right footer-site-name">{{ .ClientProps.SiteName }}</span>
</div>
<div class="col-xs-12">
- <span class="pull-right footer-link copyright">© 2015 SpinPunch</span>
+ <span class="pull-right footer-link copyright">© 2015 Mattermost, Inc.</span>
<a id="help_link" class="pull-right footer-link" href="#">Help</a>
<a id="terms_link" class="pull-right footer-link" href="#">Terms</a>
<a id="privacy_link" class="pull-right footer-link" href="#">Privacy</a>
diff --git a/web/web.go b/web/web.go
index b87636187..7ab50a073 100644
--- a/web/web.go
+++ b/web/web.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package web
@@ -372,11 +372,22 @@ func getChannel(c *api.Context, w http.ResponseWriter, r *http.Request) {
return
}
- //api.Handle404(w, r)
- //Bad channel urls just redirect to the town-square for now
+ // We will attempt to auto-join open channels
+ if cr := <-api.Srv.Store.Channel().GetByName(c.Session.TeamId, name); cr.Err != nil {
+ http.Redirect(w, r, c.GetTeamURL()+"/channels/town-square", http.StatusFound)
+ } else {
+ channel := cr.Data.(*model.Channel)
+ if channel.Type == model.CHANNEL_OPEN {
+ api.JoinChannel(c, channel.Id, "")
+ if c.Err != nil {
+ return
+ }
- http.Redirect(w, r, c.GetTeamURL()+"/channels/town-square", http.StatusFound)
- return
+ channelId = channel.Id
+ } else {
+ http.Redirect(w, r, c.GetTeamURL()+"/channels/town-square", http.StatusFound)
+ }
+ }
}
}
@@ -414,7 +425,12 @@ func verifyEmail(c *api.Context, w http.ResponseWriter, r *http.Request) {
return
} else {
user := result.Data.(*model.User)
- api.FireAndForgetVerifyEmail(user.Id, user.Email, team.Name, team.DisplayName, c.GetSiteURL(), c.GetTeamURLFromTeam(team))
+
+ if user.LastActivityAt > 0 {
+ api.FireAndForgetEmailChangeVerifyEmail(user.Id, user.Email, team.Name, team.DisplayName, c.GetSiteURL(), c.GetTeamURLFromTeam(team))
+ } else {
+ api.FireAndForgetVerifyEmail(user.Id, user.Email, team.Name, team.DisplayName, c.GetSiteURL(), c.GetTeamURLFromTeam(team))
+ }
newAddress := strings.Replace(r.URL.String(), "&resend=true", "&resend_success=true", -1)
http.Redirect(w, r, newAddress, http.StatusFound)
diff --git a/web/web_test.go b/web/web_test.go
index 165c2ba09..ae29356c1 100644
--- a/web/web_test.go
+++ b/web/web_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package web