diff --git a/app/main.go b/app/main.go index 16b5ed2d..eeb591b3 100644 --- a/app/main.go +++ b/app/main.go @@ -43,8 +43,9 @@ var opts struct { FacebookCID string `long:"facebook-cid" env:"REMARK_FACEBOOK_CID" description:"Facebook OAuth client ID"` FacebookCSEC string `long:"facebook-csec" env:"REMARK_FACEBOOK_CSEC" description:"Facebook OAuth client secret"` - AvatarStore string `long:"avatars" env:"AVATAR_STORE" default:"./var/avatars" description:"path to avatars directory"` - Port int `long:"port" env:"REMARK_PORT" default:"8080" description:"port"` + AvatarStore string `long:"avatars" env:"AVATAR_STORE" default:"./var/avatars" description:"path to avatars directory"` + DefaultAvatar string `long:"avatar-def" env:"AVATAR_DEF" default:"./var/avatars/remark.image" description:"default avatar"` + Port int `long:"port" env:"REMARK_PORT" default:"8080" description:"port"` } `command:"server" description:"run server"` ImportCommand struct { @@ -106,7 +107,11 @@ func main() { Exporter: &exporter, AuthProviders: makeAuthProviders(sessionStore), Cache: common.NewLoadingCache(4*time.Hour, 15*time.Minute, postFlushFn), - AvatarProxy: avatar.Proxy{StorePath: opts.ServerCommand.AvatarStore, RoutePath: "/api/v1/avatar"}, + AvatarProxy: avatar.Proxy{ + StorePath: opts.ServerCommand.AvatarStore, + RoutePath: "/api/v1/avatar", + DefaultAvatar: opts.ServerCommand.DefaultAvatar, + }, } if opts.DevMode { diff --git a/app/rest/avatar/avatar.go b/app/rest/avatar/avatar.go index 68a2c382..f070932e 100644 --- a/app/rest/avatar/avatar.go +++ b/app/rest/avatar/avatar.go @@ -34,7 +34,11 @@ type Proxy struct { // Put gets original avatar url from user info and returns proxied func (p *Proxy) Put(u store.User) (avatarURL string, err error) { + if u.Picture == "" { + if p.DefaultAvatar != "" { + return p.RoutePath + "/" + p.DefaultAvatar, nil + } return "", errors.Errorf("no picture for %s", u.ID) } @@ -82,8 +86,14 @@ func (p *Proxy) Routes() chi.Router { avFile := path.Join(location, avatar) fh, err := os.Open(avFile) if err != nil { - common.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't load avatar") - return + if p.DefaultAvatar == "" { + common.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't load avatar") + return + } + if fh, err = os.Open(path.Join(p.StorePath, p.DefaultAvatar)); err != nil { + common.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't load default avatar") + return + } } defer func() {