summaryrefslogtreecommitdiffstats
path: root/api/user.go
diff options
context:
space:
mode:
Diffstat (limited to 'api/user.go')
-rw-r--r--api/user.go121
1 files changed, 51 insertions, 70 deletions
diff --git a/api/user.go b/api/user.go
index f6422f844..7035613ea 100644
--- a/api/user.go
+++ b/api/user.go
@@ -7,8 +7,6 @@ import (
"bytes"
l4g "code.google.com/p/log4go"
"fmt"
- "github.com/goamz/goamz/aws"
- "github.com/goamz/goamz/s3"
"github.com/gorilla/mux"
"github.com/mattermost/platform/model"
"github.com/mattermost/platform/store"
@@ -181,14 +179,13 @@ func CreateUser(c *Context, team *model.Team, user *model.User) *model.User {
l4g.Error("Encountered an issue joining default channels user_id=%s, team_id=%s, err=%v", ruser.Id, ruser.TeamId, err)
}
- //fireAndForgetWelcomeEmail(ruser.FirstName, ruser.Email, team.Name, c.TeamUrl+"/channels/town-square")
-
+ //fireAndForgetWelcomeEmail(ruser.FirstName, ruser.Email, team.Name, c.TeamURL+"/channels/town-square")
if user.EmailVerified {
if cresult := <-Srv.Store.User().VerifyEmail(ruser.Id); cresult.Err != nil {
l4g.Error("Failed to set email verified err=%v", cresult.Err)
}
} else {
- FireAndForgetVerifyEmail(result.Data.(*model.User).Id, ruser.FirstName, ruser.Email, team.Name, c.TeamUrl)
+ FireAndForgetVerifyEmail(result.Data.(*model.User).Id, ruser.FirstName, ruser.Email, team.DisplayName, c.GetTeamURLFromTeam(team))
}
ruser.Sanitize(map[string]bool{})
@@ -202,13 +199,13 @@ func CreateUser(c *Context, team *model.Team, user *model.User) *model.User {
}
}
-func fireAndForgetWelcomeEmail(name, email, teamName, link string) {
+func fireAndForgetWelcomeEmail(name, email, teamDisplayName, link string) {
go func() {
subjectPage := NewServerTemplatePage("welcome_subject", link)
bodyPage := NewServerTemplatePage("welcome_body", link)
bodyPage.Props["Nickname"] = name
- bodyPage.Props["TeamName"] = teamName
+ bodyPage.Props["TeamDisplayName"] = teamDisplayName
bodyPage.Props["FeedbackName"] = utils.Cfg.EmailSettings.FeedbackName
if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil {
@@ -218,16 +215,16 @@ func fireAndForgetWelcomeEmail(name, email, teamName, link string) {
}()
}
-func FireAndForgetVerifyEmail(userId, name, email, teamName, teamUrl string) {
+func FireAndForgetVerifyEmail(userId, name, email, teamDisplayName, teamURL string) {
go func() {
- link := fmt.Sprintf("%s/verify?uid=%s&hid=%s", teamUrl, userId, model.HashPassword(userId))
+ link := fmt.Sprintf("%s/verify_email?uid=%s&hid=%s", teamURL, userId, model.HashPassword(userId))
- subjectPage := NewServerTemplatePage("verify_subject", teamUrl)
- subjectPage.Props["TeamName"] = teamName
- bodyPage := NewServerTemplatePage("verify_body", teamUrl)
+ subjectPage := NewServerTemplatePage("verify_subject", teamURL)
+ subjectPage.Props["TeamDisplayName"] = teamDisplayName
+ bodyPage := NewServerTemplatePage("verify_body", teamURL)
bodyPage.Props["Nickname"] = name
- bodyPage.Props["TeamName"] = teamName
+ bodyPage.Props["TeamDisplayName"] = teamDisplayName
bodyPage.Props["VerifyUrl"] = link
if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil {
@@ -251,10 +248,10 @@ func login(c *Context, w http.ResponseWriter, r *http.Request) {
}
var team *model.Team
- if result.Data == nil && len(props["email"]) != 0 && len(props["domain"]) != 0 {
- extraInfo = props["email"] + " in " + props["domain"]
+ if result.Data == nil && len(props["email"]) != 0 && len(props["name"]) != 0 {
+ extraInfo = props["email"] + " in " + props["name"]
- if nr := <-Srv.Store.Team().GetByDomain(props["domain"]); nr.Err != nil {
+ if nr := <-Srv.Store.Team().GetByName(props["name"]); nr.Err != nil {
c.Err = nr.Err
return
} else {
@@ -517,7 +514,6 @@ func getProfiles(c *Context, w http.ResponseWriter, r *http.Request) {
}
w.Header().Set(model.HEADER_ETAG_SERVER, etag)
- w.Header().Set("Cache-Control", "max-age=120, public") // 2 mins
w.Write([]byte(model.UserMapToJson(profiles)))
return
}
@@ -600,7 +596,7 @@ func createProfileImage(username string, userId string) ([]byte, *model.AppError
buf := new(bytes.Buffer)
if imgErr := png.Encode(buf, img); imgErr != nil {
- return nil, model.NewAppError("getProfileImage", "Could not encode default profile image", imgErr.Error())
+ return nil, model.NewAppError("createProfileImage", "Could not encode default profile image", imgErr.Error())
} else {
return buf.Bytes(), nil
}
@@ -615,34 +611,25 @@ func getProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
return
} else {
var img []byte
- var err *model.AppError
- if !utils.IsS3Configured() {
- img, err = createProfileImage(result.Data.(*model.User).Username, id)
- if err != nil {
+ if !utils.IsS3Configured() && !utils.Cfg.ServiceSettings.UseLocalStorage {
+ var err *model.AppError
+ if img, err = createProfileImage(result.Data.(*model.User).Username, id); err != nil {
c.Err = err
return
}
} else {
- var auth aws.Auth
- auth.AccessKey = utils.Cfg.AWSSettings.S3AccessKeyId
- auth.SecretKey = utils.Cfg.AWSSettings.S3SecretAccessKey
-
- s := s3.New(auth, aws.Regions[utils.Cfg.AWSSettings.S3Region])
- bucket := s.Bucket(utils.Cfg.AWSSettings.S3Bucket)
-
path := "teams/" + c.Session.TeamId + "/users/" + id + "/profile.png"
- if data, getErr := bucket.Get(path); getErr != nil {
- img, err = createProfileImage(result.Data.(*model.User).Username, id)
- if err != nil {
+ if data, err := readFile(path); err != nil {
+
+ if img, err = createProfileImage(result.Data.(*model.User).Username, id); err != nil {
c.Err = err
return
}
- options := s3.Options{}
- if err := bucket.Put(path, img, "image", s3.Private, options); err != nil {
- c.Err = model.NewAppError("getImage", "Couldn't upload default profile image", err.Error())
+ if err := writeFile(img, path); err != nil {
+ c.Err = err
return
}
@@ -662,8 +649,8 @@ func getProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
}
func uploadProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
- if !utils.IsS3Configured() {
- c.Err = model.NewAppError("uploadProfileImage", "Unable to upload image. Amazon S3 not configured. ", "")
+ if !utils.IsS3Configured() && !utils.Cfg.ServiceSettings.UseLocalStorage {
+ c.Err = model.NewAppError("uploadProfileImage", "Unable to upload file. Amazon S3 not configured and local server storage turned off. ", "")
c.Err.StatusCode = http.StatusNotImplemented
return
}
@@ -673,13 +660,6 @@ func uploadProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- var auth aws.Auth
- auth.AccessKey = utils.Cfg.AWSSettings.S3AccessKeyId
- auth.SecretKey = utils.Cfg.AWSSettings.S3SecretAccessKey
-
- s := s3.New(auth, aws.Regions[utils.Cfg.AWSSettings.S3Region])
- bucket := s.Bucket(utils.Cfg.AWSSettings.S3Bucket)
-
m := r.MultipartForm
imageArray, ok := m.File["image"]
@@ -723,8 +703,7 @@ func uploadProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
path := "teams/" + c.Session.TeamId + "/users/" + c.Session.UserId + "/profile.png"
- options := s3.Options{}
- if err := bucket.Put(path, buf.Bytes(), "image", s3.Private, options); err != nil {
+ if err := writeFile(buf.Bytes(), path); err != nil {
c.Err = model.NewAppError("uploadProfileImage", "Couldn't upload profile image", "")
return
}
@@ -758,7 +737,8 @@ func updateUser(c *Context, w http.ResponseWriter, r *http.Request) {
if tresult := <-Srv.Store.Team().Get(rusers[1].TeamId); tresult.Err != nil {
l4g.Error(tresult.Err.Message)
} else {
- fireAndForgetEmailChangeEmail(rusers[1].Email, tresult.Data.(*model.Team).Name, c.TeamUrl)
+ team := tresult.Data.(*model.Team)
+ fireAndForgetEmailChangeEmail(rusers[1].Email, team.DisplayName, c.GetTeamURLFromTeam(team))
}
}
@@ -829,7 +809,8 @@ func updatePassword(c *Context, w http.ResponseWriter, r *http.Request) {
if tresult := <-tchan; tresult.Err != nil {
l4g.Error(tresult.Err.Message)
} else {
- fireAndForgetPasswordChangeEmail(user.Email, tresult.Data.(*model.Team).Name, c.TeamUrl, "using the settings menu")
+ team := tresult.Data.(*model.Team)
+ fireAndForgetPasswordChangeEmail(user.Email, team.DisplayName, c.GetTeamURLFromTeam(team), "using the settings menu")
}
data := make(map[string]string)
@@ -988,14 +969,14 @@ func sendPasswordReset(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- domain := props["domain"]
- if len(domain) == 0 {
- c.SetInvalidParam("sendPasswordReset", "domain")
+ name := props["name"]
+ if len(name) == 0 {
+ c.SetInvalidParam("sendPasswordReset", "name")
return
}
var team *model.Team
- if result := <-Srv.Store.Team().GetByDomain(domain); result.Err != nil {
+ if result := <-Srv.Store.Team().GetByName(name); result.Err != nil {
c.Err = result.Err
return
} else {
@@ -1017,10 +998,10 @@ func sendPasswordReset(c *Context, w http.ResponseWriter, r *http.Request) {
data := model.MapToJson(newProps)
hash := model.HashPassword(fmt.Sprintf("%v:%v", data, utils.Cfg.ServiceSettings.ResetSalt))
- link := fmt.Sprintf("%s/reset_password?d=%s&h=%s", c.TeamUrl, url.QueryEscape(data), url.QueryEscape(hash))
+ link := fmt.Sprintf("%s/reset_password?d=%s&h=%s", c.GetTeamURLFromTeam(team), url.QueryEscape(data), url.QueryEscape(hash))
- subjectPage := NewServerTemplatePage("reset_subject", c.TeamUrl)
- bodyPage := NewServerTemplatePage("reset_body", c.TeamUrl)
+ subjectPage := NewServerTemplatePage("reset_subject", c.GetTeamURLFromTeam(team))
+ bodyPage := NewServerTemplatePage("reset_body", c.GetTeamURLFromTeam(team))
bodyPage.Props["ResetUrl"] = link
if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil {
@@ -1062,16 +1043,16 @@ func resetPassword(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- domain := props["domain"]
- if len(domain) == 0 {
- c.SetInvalidParam("resetPassword", "domain")
+ name := props["name"]
+ if len(name) == 0 {
+ c.SetInvalidParam("resetPassword", "name")
return
}
c.LogAuditWithUserId(userId, "attempt")
var team *model.Team
- if result := <-Srv.Store.Team().GetByDomain(domain); result.Err != nil {
+ if result := <-Srv.Store.Team().GetByName(name); result.Err != nil {
c.Err = result.Err
return
} else {
@@ -1110,19 +1091,19 @@ func resetPassword(c *Context, w http.ResponseWriter, r *http.Request) {
c.LogAuditWithUserId(userId, "success")
}
- fireAndForgetPasswordChangeEmail(user.Email, team.Name, c.TeamUrl, "using a reset password link")
+ fireAndForgetPasswordChangeEmail(user.Email, team.DisplayName, c.GetTeamURLFromTeam(team), "using a reset password link")
props["new_password"] = ""
w.Write([]byte(model.MapToJson(props)))
}
-func fireAndForgetPasswordChangeEmail(email, teamName, teamUrl, method string) {
+func fireAndForgetPasswordChangeEmail(email, teamDisplayName, teamURL, method string) {
go func() {
- subjectPage := NewServerTemplatePage("password_change_subject", teamUrl)
- subjectPage.Props["TeamName"] = teamName
- bodyPage := NewServerTemplatePage("password_change_body", teamUrl)
- bodyPage.Props["TeamName"] = teamName
+ subjectPage := NewServerTemplatePage("password_change_subject", teamURL)
+ subjectPage.Props["TeamDisplayName"] = teamDisplayName
+ bodyPage := NewServerTemplatePage("password_change_body", teamURL)
+ bodyPage.Props["TeamDisplayName"] = teamDisplayName
bodyPage.Props["Method"] = method
if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil {
@@ -1132,13 +1113,13 @@ func fireAndForgetPasswordChangeEmail(email, teamName, teamUrl, method string) {
}()
}
-func fireAndForgetEmailChangeEmail(email, teamName, teamUrl string) {
+func fireAndForgetEmailChangeEmail(email, teamDisplayName, teamURL string) {
go func() {
- subjectPage := NewServerTemplatePage("email_change_subject", teamUrl)
- subjectPage.Props["TeamName"] = teamName
- bodyPage := NewServerTemplatePage("email_change_body", teamUrl)
- bodyPage.Props["TeamName"] = teamName
+ subjectPage := NewServerTemplatePage("email_change_subject", teamURL)
+ subjectPage.Props["TeamDisplayName"] = teamDisplayName
+ bodyPage := NewServerTemplatePage("email_change_body", teamURL)
+ bodyPage.Props["TeamDisplayName"] = teamDisplayName
if err := utils.SendMail(email, subjectPage.Render(), bodyPage.Render()); err != nil {
l4g.Error("Failed to send update password email successfully err=%v", err)