summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReed Garmsen <rgarmsen2295@gmail.com>2015-06-17 11:29:13 -0700
committerReed Garmsen <rgarmsen2295@gmail.com>2015-06-17 11:29:13 -0700
commit9c2379a7110fb4589961a331e2d2598020d16119 (patch)
tree0fdb9eff471d0347ebca7ab3ec33401de30bc109
parent31d795b459c396d8e2e3df0ee11c096392109464 (diff)
parent12f0559e28d4e2a9217fc4333769e1344ec2711e (diff)
downloadchat-9c2379a7110fb4589961a331e2d2598020d16119.tar.gz
chat-9c2379a7110fb4589961a331e2d2598020d16119.tar.bz2
chat-9c2379a7110fb4589961a331e2d2598020d16119.zip
Merge pull request #6 from rgarmsen2295/master
Remerging
-rw-r--r--Dockerfile8
-rw-r--r--config/config.json2
-rw-r--r--config/config_docker.json85
-rwxr-xr-xdocker/docker-entry.sh (renamed from docker-entry.sh)4
-rw-r--r--docker/main.cf (renamed from config/main.cf)13
-rw-r--r--utils/config.go5
-rw-r--r--utils/config_test.go4
-rw-r--r--utils/mail.go98
-rw-r--r--web/react/components/textbox.jsx2
9 files changed, 167 insertions, 54 deletions
diff --git a/Dockerfile b/Dockerfile
index da57550c0..5c389c056 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,3 +1,5 @@
+# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+# See License.txt for license information.
FROM ubuntu:14.04
# Install Dependancies
@@ -83,15 +85,15 @@ RUN wget http://download.redis.io/redis-stable.tar.gz; \
ADD . /go/src/github.com/mattermost/platform
# Insert postfix config
-ADD ./config/main.cf /etc/postfix/
+ADD ./docker/main.cf /etc/postfix/
RUN go get github.com/tools/godep
RUN cd /go/src/github.com/mattermost/platform; godep restore
RUN go install github.com/mattermost/platform
RUN cd /go/src/github.com/mattermost/platform/web/react; npm install
-RUN chmod +x /go/src/github.com/mattermost/platform/docker-entry.sh
-ENTRYPOINT /go/src/github.com/mattermost/platform/docker-entry.sh
+RUN chmod +x /go/src/github.com/mattermost/platform/docker/docker-entry.sh
+ENTRYPOINT /go/src/github.com/mattermost/platform/docker/docker-entry.sh
# Ports
EXPOSE 80
diff --git a/config/config.json b/config/config.json
index 6e5fb8d0e..1b844c259 100644
--- a/config/config.json
+++ b/config/config.json
@@ -9,7 +9,7 @@
},
"ServiceSettings": {
"SiteName": "Mattermost Preview",
- "Domain": "",
+ "Domain": "xxxxxxmustbefilledin.com",
"Mode" : "dev",
"AllowTesting" : false,
"UseSSL": false,
diff --git a/config/config_docker.json b/config/config_docker.json
new file mode 100644
index 000000000..f2e56bef8
--- /dev/null
+++ b/config/config_docker.json
@@ -0,0 +1,85 @@
+{
+ "LogSettings": {
+ "ConsoleEnable": false,
+ "ConsoleLevel": "DEBUG",
+ "FileEnable": true,
+ "FileLevel": "INFO",
+ "FileFormat": "",
+ "FileLocation": ""
+ },
+ "ServiceSettings": {
+ "SiteName": "Mattermost Preview",
+ "Domain": "",
+ "Mode" : "prod",
+ "AllowTesting" : false,
+ "UseSSL": false,
+ "Port": "80",
+ "Version": "developer",
+ "Shards": {
+ },
+ "InviteSalt": "gxHVDcKUyP2y1eiyW8S8na1UYQAfq6J6",
+ "PublicLinkSalt": "TO3pTyXIZzwHiwyZgGql7lM7DG3zeId4",
+ "ResetSalt": "IPxFzSfnDFsNsRafZxz8NaYqFKhf9y2t",
+ "AnalyticsUrl": ""
+ },
+ "SqlSettings": {
+ "DriverName": "mysql",
+ "DataSource": "mmuser:mostest@tcp(localhost:3306)/mattermost_test",
+ "DataSourceReplicas": ["mmuser:mostest@tcp(localhost:3306)/mattermost_test"],
+ "MaxIdleConns": 10,
+ "MaxOpenConns": 10,
+ "Trace": false,
+ "AtRestEncryptKey": "Ya0xMrybACJ3sZZVWQC7e31h5nSDWZFS"
+ },
+ "RedisSettings": {
+ "DataSource": "localhost:6379",
+ "MaxOpenConns": 1000
+ },
+ "AWSSettings": {
+ "S3AccessKeyId": "",
+ "S3SecretAccessKey": "",
+ "S3Bucket": "",
+ "S3Region": "",
+ "Route53AccessKeyId": "",
+ "Route53SecretAccessKey": "",
+ "Route53ZoneId": "",
+ "Route53Region": ""
+ },
+ "ImageSettings": {
+ "ThumbnailWidth": 200,
+ "ThumbnailHeight": 0,
+ "PreviewWidth": 1024,
+ "PreviewHeight": 0,
+ "ProfileWidth": 128,
+ "ProfileHeight": 128
+ },
+ "EmailSettings": {
+ "SMTPUsername": "",
+ "SMTPPassword": "",
+ "SMTPServer": "localhost:25",
+ "UseTLS": false,
+ "FeedbackEmail": "feedback@xxxxxxmustbefilledin.com",
+ "FeedbackName": "",
+ "ApplePushServer": "",
+ "ApplePushCertPublic": "",
+ "ApplePushCertPrivate": ""
+ },
+ "PrivacySettings": {
+ "ShowEmailAddress": true,
+ "ShowPhoneNumber": true,
+ "ShowSkypeId": true,
+ "ShowFullName": true
+ },
+ "TeamSettings": {
+ "MaxUsersPerTeam": 150,
+ "AllowPublicLink": true,
+ "AllowValet": false,
+ "TermsLink": "/static/help/configure_links.html",
+ "PrivacyLink": "/static/help/configure_links.html",
+ "AboutLink": "/static/help/configure_links.html",
+ "HelpLink": "/static/help/configure_links.html",
+ "ReportProblemLink": "/static/help/configure_links.html",
+ "TourLink": "/static/help/configure_links.html",
+ "DefaultThemeColor": "#2389D7"
+ }
+}
diff --git a/docker-entry.sh b/docker/docker-entry.sh
index db6ccaa18..cfa589041 100755
--- a/docker-entry.sh
+++ b/docker/docker-entry.sh
@@ -1,4 +1,6 @@
#!/bin/bash
+# Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+# See License.txt for license information.
mkdir -p web/static/js
@@ -114,7 +116,7 @@ echo starting react processor
cd /go/src/github.com/mattermost/platform/web/react && npm start &
echo starting go web server
-cd /go/src/github.com/mattermost/platform/; go run mattermost.go -config=config.json &
+cd /go/src/github.com/mattermost/platform/; go run mattermost.go -config=config_docker.json &
echo starting compass watch
cd /go/src/github.com/mattermost/platform/web/sass-files && compass watch
diff --git a/config/main.cf b/docker/main.cf
index 72eba333f..ed97d37ef 100644
--- a/config/main.cf
+++ b/docker/main.cf
@@ -1,21 +1,11 @@
-# See /usr/share/postfix/main.cf.dist for a commented, more complete version
-
-
-# Debian specific: Specifying a file name will cause the first
-# line of that file to be used as the name. The Debian default
-# is /etc/mailname.
myorigin = mattermost.com
myhostname = mattermost.com
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
-# appending .domain is the MUA's job.
append_dot_mydomain = no
-# Uncomment the next line to generate "delayed mail" warnings
-#delay_warning_time = 4h
-
readme_directory = no
# TLS parameters
@@ -26,9 +16,6 @@ smtp_use_tls=no
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
-# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
-# information on enabling SSL in the smtp client.
-
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
diff --git a/utils/config.go b/utils/config.go
index 745887c70..418041706 100644
--- a/utils/config.go
+++ b/utils/config.go
@@ -222,6 +222,11 @@ func LoadConfig(fileName string) {
config.ServiceSettings.Domain = os.Getenv("MATTERMOST_DOMAIN")
}
+ // Validates our mail settings
+ if err := CheckMailSettings(); err != nil {
+ l4g.Error("Email settings are not valid err=%v", err)
+ }
+
configureLog(config.LogSettings)
Cfg = &config
diff --git a/utils/config_test.go b/utils/config_test.go
index f6746f3ac..9067dc647 100644
--- a/utils/config_test.go
+++ b/utils/config_test.go
@@ -4,7 +4,7 @@
package utils
import (
- //"os"
+ "os"
"testing"
)
@@ -12,7 +12,6 @@ func TestConfig(t *testing.T) {
LoadConfig("config.json")
}
-/*
func TestEnvOverride(t *testing.T) {
os.Setenv("MATTERMOST_DOMAIN", "testdomain.com")
@@ -26,4 +25,3 @@ func TestEnvOverride(t *testing.T) {
t.Fail()
}
}
-*/
diff --git a/utils/mail.go b/utils/mail.go
index bf1cc9d46..2fb7f801d 100644
--- a/utils/mail.go
+++ b/utils/mail.go
@@ -13,32 +13,27 @@ import (
"net/smtp"
)
-func SendMail(to, subject, body string) *model.AppError {
-
- fromMail := mail.Address{"", Cfg.EmailSettings.FeedbackEmail}
- toMail := mail.Address{"", to}
-
- headers := make(map[string]string)
- headers["From"] = fromMail.String()
- headers["To"] = toMail.String()
- headers["Subject"] = subject
- headers["MIME-version"] = "1.0"
- headers["Content-Type"] = "text/html"
-
- message := ""
- for k, v := range headers {
- message += fmt.Sprintf("%s: %s\r\n", k, v)
- }
- message += "\r\n<html><body>" + body + "</body></html>"
-
+func CheckMailSettings() *model.AppError {
if len(Cfg.EmailSettings.SMTPServer) == 0 {
- l4g.Warn("Skipping sending of email because EmailSettings are not configured")
- return nil
+ return model.NewAppError("CheckMailSettings", "No email settings present, mail will not be sent", "")
}
+ conn, err := connectToSMTPServer()
+ if err != nil {
+ return err
+ }
+ defer conn.Close()
+ c, err2 := newSMTPClient(conn)
+ if err2 != nil {
+ return err
+ }
+ defer c.Quit()
+ defer c.Close()
- host, _, _ := net.SplitHostPort(Cfg.EmailSettings.SMTPServer)
+ return nil
+}
- auth := smtp.PlainAuth("", Cfg.EmailSettings.SMTPUsername, Cfg.EmailSettings.SMTPPassword, host)
+func connectToSMTPServer() (net.Conn, *model.AppError) {
+ host, _, _ := net.SplitHostPort(Cfg.EmailSettings.SMTPServer)
var conn net.Conn
var err error
@@ -51,38 +46,77 @@ func SendMail(to, subject, body string) *model.AppError {
conn, err = tls.Dial("tcp", Cfg.EmailSettings.SMTPServer, tlsconfig)
if err != nil {
- return model.NewAppError("SendMail", "Failed to open TLS connection", err.Error())
+ return nil, model.NewAppError("SendMail", "Failed to open TLS connection", err.Error())
}
} else {
conn, err = net.Dial("tcp", Cfg.EmailSettings.SMTPServer)
if err != nil {
- return model.NewAppError("SendMail", "Failed to open connection", err.Error())
+ return nil, model.NewAppError("SendMail", "Failed to open connection", err.Error())
}
}
- defer conn.Close()
+ return conn, nil
+}
+func newSMTPClient(conn net.Conn) (*smtp.Client, *model.AppError) {
+ host, _, _ := net.SplitHostPort(Cfg.EmailSettings.SMTPServer)
c, err := smtp.NewClient(conn, host)
if err != nil {
l4g.Error("Failed to open a connection to SMTP server %v", err)
- return model.NewAppError("SendMail", "Failed to open TLS connection", err.Error())
+ return nil, model.NewAppError("SendMail", "Failed to open TLS connection", err.Error())
}
- defer c.Quit()
- defer c.Close()
-
// GO does not support plain auth over a non encrypted connection.
// so if not tls then no auth
+ auth := smtp.PlainAuth("", Cfg.EmailSettings.SMTPUsername, Cfg.EmailSettings.SMTPPassword, host)
if Cfg.EmailSettings.UseTLS {
if err = c.Auth(auth); err != nil {
- return model.NewAppError("SendMail", "Failed to authenticate on SMTP server", err.Error())
+ return nil, model.NewAppError("SendMail", "Failed to authenticate on SMTP server", err.Error())
}
}
+ return c, nil
+}
+
+func SendMail(to, subject, body string) *model.AppError {
+
+ fromMail := mail.Address{"", Cfg.EmailSettings.FeedbackEmail}
+ toMail := mail.Address{"", to}
+
+ headers := make(map[string]string)
+ headers["From"] = fromMail.String()
+ headers["To"] = toMail.String()
+ headers["Subject"] = subject
+ headers["MIME-version"] = "1.0"
+ headers["Content-Type"] = "text/html"
+
+ message := ""
+ for k, v := range headers {
+ message += fmt.Sprintf("%s: %s\r\n", k, v)
+ }
+ message += "\r\n<html><body>" + body + "</body></html>"
+
+ if len(Cfg.EmailSettings.SMTPServer) == 0 {
+ l4g.Warn("Skipping sending of email because EmailSettings are not configured")
+ return nil
+ }
+
+ conn, err1 := connectToSMTPServer()
+ if err1 != nil {
+ return err1
+ }
+ defer conn.Close()
+
+ c, err2 := newSMTPClient(conn)
+ if err2 != nil {
+ return err2
+ }
+ defer c.Quit()
+ defer c.Close()
- if err = c.Mail(fromMail.Address); err != nil {
+ if err := c.Mail(fromMail.Address); err != nil {
return model.NewAppError("SendMail", "Failed to add from email address", err.Error())
}
- if err = c.Rcpt(toMail.Address); err != nil {
+ if err := c.Rcpt(toMail.Address); err != nil {
return model.NewAppError("SendMail", "Failed to add to email address", err.Error())
}
diff --git a/web/react/components/textbox.jsx b/web/react/components/textbox.jsx
index 45798809f..7a4762e07 100644
--- a/web/react/components/textbox.jsx
+++ b/web/react/components/textbox.jsx
@@ -204,7 +204,7 @@ module.exports = React.createClass({
// If there is a space after the last @, nothing to do.
if (lastSpace > atIndex || lastCharSpace > atIndex) {
- this.setState({ mentionText: '-1' });
+ this.updateMentionTab('-1', null);
return;
}