summaryrefslogtreecommitdiffstats
path: root/api/user.go
diff options
context:
space:
mode:
Diffstat (limited to 'api/user.go')
-rw-r--r--api/user.go99
1 files changed, 38 insertions, 61 deletions
diff --git a/api/user.go b/api/user.go
index c0ebc05e0..f8382cf2f 100644
--- a/api/user.go
+++ b/api/user.go
@@ -5,7 +5,6 @@ package api
import (
"bytes"
- "code.google.com/p/draw2d/draw2d"
l4g "code.google.com/p/log4go"
"fmt"
"github.com/goamz/goamz/aws"
@@ -19,6 +18,7 @@ import (
"hash/fnv"
"image"
"image/color"
+ "image/draw"
_ "image/gif"
_ "image/jpeg"
"image/png"
@@ -563,7 +563,7 @@ func getAudits(c *Context, w http.ResponseWriter, r *http.Request) {
}
}
-func createProfileImage(username string, userId string) *image.RGBA {
+func createProfileImage(username string, userId string) ([]byte, *model.AppError) {
colors := []color.NRGBA{
{197, 8, 126, 255},
@@ -598,48 +598,20 @@ func createProfileImage(username string, userId string) *image.RGBA {
h.Write([]byte(userId))
seed := h.Sum32()
- initials := ""
- parts := strings.Split(username, " ")
+ color := colors[int(seed)%len(colors)]
+ img := image.NewRGBA(image.Rect(0, 0, int(utils.Cfg.ImageSettings.ProfileWidth), int(utils.Cfg.ImageSettings.ProfileHeight)))
+ draw.Draw(img, img.Bounds(), &image.Uniform{color}, image.ZP, draw.Src)
- for _, v := range parts {
-
- if len(v) > 0 {
- initials += string(strings.ToUpper(v)[0])
- }
- }
-
- if len(initials) == 0 {
- initials = "^"
- }
+ buf := new(bytes.Buffer)
- if len(initials) > 2 {
- initials = initials[0:2]
+ if imgErr := png.Encode(buf, img); imgErr != nil {
+ return nil, model.NewAppError("getProfileImage", "Could not encode default profile image", imgErr.Error())
+ } else {
+ return buf.Bytes(), nil
}
-
- draw2d.SetFontFolder(utils.FindDir("web/static/fonts"))
- i := image.NewRGBA(image.Rect(0, 0, 128, 128))
- gc := draw2d.NewGraphicContext(i)
- draw2d.Rect(gc, 0, 0, 128, 128)
- gc.SetFillColor(colors[int(seed)%len(colors)])
- gc.Fill()
- gc.SetFontSize(50)
- gc.SetFontData(draw2d.FontData{"luxi", draw2d.FontFamilyMono, draw2d.FontStyleBold | draw2d.FontStyleItalic})
- left, top, right, bottom := gc.GetStringBounds("CH")
- width := (128 - (right - left + 10)) / 2
- height := (128 - (top - bottom + 6)) / 2
- gc.Translate(width, height)
- gc.SetFillColor(image.White)
- gc.FillString(initials)
- return i
}
func getProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
- if !utils.IsS3Configured() {
- c.Err = model.NewAppError("getProfileImage", "Unable to get image. Amazon S3 not configured. ", "")
- c.Err.StatusCode = http.StatusNotImplemented
- return
- }
-
params := mux.Vars(r)
id := params["id"]
@@ -647,36 +619,41 @@ func getProfileImage(c *Context, w http.ResponseWriter, r *http.Request) {
c.Err = result.Err
return
} else {
- var auth aws.Auth
- auth.AccessKey = utils.Cfg.AWSSettings.S3AccessKeyId
- auth.SecretKey = utils.Cfg.AWSSettings.S3SecretAccessKey
+ var img []byte
+ var err *model.AppError
- s := s3.New(auth, aws.Regions[utils.Cfg.AWSSettings.S3Region])
- bucket := s.Bucket(utils.Cfg.AWSSettings.S3Bucket)
+ if !utils.IsS3Configured() {
+ img, err = createProfileImage(result.Data.(*model.User).Username, id)
+ if err != nil {
+ c.Err = err
+ return
+ }
+ } else {
+ var auth aws.Auth
+ auth.AccessKey = utils.Cfg.AWSSettings.S3AccessKeyId
+ auth.SecretKey = utils.Cfg.AWSSettings.S3SecretAccessKey
- path := "teams/" + c.Session.TeamId + "/users/" + id + "/profile.png"
+ s := s3.New(auth, aws.Regions[utils.Cfg.AWSSettings.S3Region])
+ bucket := s.Bucket(utils.Cfg.AWSSettings.S3Bucket)
- var img []byte
+ path := "teams/" + c.Session.TeamId + "/users/" + id + "/profile.png"
- if data, getErr := bucket.Get(path); getErr != nil {
- rawImg := createProfileImage(result.Data.(*model.User).Username, id)
- buf := new(bytes.Buffer)
+ if data, getErr := bucket.Get(path); getErr != nil {
+ img, err = createProfileImage(result.Data.(*model.User).Username, id)
+ if err != nil {
+ c.Err = err
+ return
+ }
- if imgErr := png.Encode(buf, rawImg); imgErr != nil {
- c.Err = model.NewAppError("getProfileImage", "Could not encode default profile image", imgErr.Error())
- return
- } else {
- img = buf.Bytes()
- }
+ 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())
+ return
+ }
- options := s3.Options{}
- if err := bucket.Put(path, buf.Bytes(), "image", s3.Private, options); err != nil {
- c.Err = model.NewAppError("getImage", "Couldn't upload default profile image", err.Error())
- return
+ } else {
+ img = data
}
-
- } else {
- img = data
}
if c.Session.UserId == id {