iw/app/controllers/useravatar.go

41 lines
1.0 KiB
Go

package controllers
import (
"github.com/revel/revel"
"bytes"
"github.com/mikkolehtisalo/revel/ldapuserdetails"
"time"
"regexp"
"github.com/revel/revel/cache"
"fmt"
)
type UserAvatars struct {
*revel.Controller
}
func (u UserAvatars) Read(user string) revel.Result {
revel.TRACE.Printf("UserAvatars Read() user:%+v", user)
var avatar []byte
err := cache.Get(fmt.Sprintf("avatar:%s", user), &avatar)
if err != nil {
// Not in cache, generate
re := regexp.MustCompile("^(\\w*)\\.(jpeg|jpg|png)")
if !re.MatchString(user) {
revel.TRACE.Printf("UserAvatars Read() invalid user: %+v", user)
return u.RenderText("{\"success\":false}")
}
username := re.FindStringSubmatch(user)[1]
dets := ldapuserdetails.Get_user_details(username)
avatar = dets.Photo
go cache.Set(fmt.Sprintf("avatar:%s", user), avatar, cache.DEFAULT)
}
return u.RenderBinary(bytes.NewReader(avatar), user, "inline", time.Now())
}