mirror of https://github.com/mikkolehtisalo/iw.git
41 lines
1.0 KiB
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())
|
|
|
|
}
|