remove avatar default

This commit is contained in:
Umputun
2018-05-01 21:09:03 -05:00
parent 10dc6e0cd0
commit 84acf6ed0d
5 changed files with 17 additions and 71 deletions
+3 -4
View File
@@ -34,6 +34,7 @@ var opts struct {
MaxBackupFiles int `long:"max-back" env:"MAX_BACKUP_FILES" default:"10" description:"max backups to keep"`
SessionStore string `long:"session" env:"SESSION_STORE" default:"./var" description:"path to session store directory"`
AvatarStore string `long:"avatars" env:"AVATAR_STORE" default:"./var/avatars" description:"path to avatars directory"`
StoreKey string `long:"store-key" env:"STORE_KEY" default:"secure-store-key" description:"store key"`
GoogleCID string `long:"google-cid" env:"REMARK_GOOGLE_CID" description:"Google OAuth client ID"`
@@ -45,10 +46,8 @@ var opts struct {
DisqusCID string `long:"disqus-cid" env:"REMARK_DISQUS_CID" description:"Disqus OAuth client ID"`
DisqusCSEC string `long:"disqus-csec" env:"REMARK_DISQUS_CSEC" description:"Disqus OAuth client secret"`
AvatarStore string `long:"avatars" env:"AVATAR_STORE" default:"./var/avatars" description:"path to avatars directory"`
DefaultAvatar string `long:"avatar-def" env:"AVATAR_DEF" default:"remark.image" description:"default avatar"`
Port int `long:"port" env:"REMARK_PORT" default:"8080" description:"port"`
WebRoot string `long:"web-root" env:"REMARK_WEB_ROOT" default:"./web" description:"web root directory"`
Port int `long:"port" env:"REMARK_PORT" default:"8080" description:"port"`
WebRoot string `long:"web-root" env:"REMARK_WEB_ROOT" default:"./web" description:"web root directory"`
}
var revision = "unknown"
+3 -4
View File
@@ -50,10 +50,9 @@ func (s *Rest) Run(port int) {
}
s.amdminService = admin{
dataService: s.DataService,
exporter: s.Exporter,
cache: s.Cache,
defAvatarURL: s.Authenticator.AvatarProxy.Default(),
dataService: s.DataService,
exporter: s.Exporter,
cache: s.Cache,
}
router := chi.NewRouter()
+1
View File
@@ -23,6 +23,7 @@ import (
"github.com/umputun/remark/app/store"
)
var testDb = "/tmp/test-remark.db"
var testHTML = "/tmp/test-remark.html"
+5 -20
View File
@@ -22,10 +22,9 @@ import (
// AvatarProxy provides avatar store and http handler for avatars
type AvatarProxy struct {
StorePath string
DefaultAvatar string
RoutePath string
RemarkURL string
StorePath string
RoutePath string
RemarkURL string
once sync.Once
ctcTable *crc64.Table
@@ -38,9 +37,6 @@ func (p *AvatarProxy) Put(u store.User) (avatarURL string, err error) {
// no picture for user, try default avatar
if u.Picture == "" {
if p.DefaultAvatar != "" {
return p.Default(), nil
}
return "", errors.Errorf("no picture for %s", u.ID)
}
@@ -96,14 +92,8 @@ func (p *AvatarProxy) Routes() (string, chi.Router) {
avFile := path.Join(location, avatar)
fh, err := os.Open(avFile)
if err != nil {
if p.DefaultAvatar == "" {
rest.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't load avatar")
return
}
if fh, err = os.Open(path.Join(p.StorePath, p.DefaultAvatar)); err != nil {
rest.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't load default avatar")
return
}
rest.SendErrorJSON(w, r, http.StatusBadRequest, err, "can't load avatar")
return
}
defer func() {
@@ -124,11 +114,6 @@ func (p *AvatarProxy) Routes() (string, chi.Router) {
return p.RoutePath, router
}
// Default returns full default avatar url
func (p *AvatarProxy) Default() string {
return strings.TrimRight(p.RemarkURL, "/") + p.RoutePath + "/" + p.DefaultAvatar
}
// get location for user id by adding partion to final path in order to keep files
// in different subdirectories and avoid too many files in a single place.
// the end result is a full path like this - /tmp/avatars.test/92
+5 -43
View File
@@ -4,7 +4,6 @@ import (
"bytes"
"fmt"
"io"
"io/ioutil"
"net/http"
"net/http/httptest"
"os"
@@ -48,20 +47,11 @@ func TestPut(t *testing.T) {
assert.Equal(t, int64(21), fi.Size())
}
func TestPutDefault(t *testing.T) {
p := AvatarProxy{StorePath: "/tmp/avatars.test", RoutePath: "/avatar", DefaultAvatar: "default.image"}
os.MkdirAll("/tmp/avatars.test", 0700)
ioutil.WriteFile("/tmp/avatars.test/default.image", []byte("1234567890"), 0600)
defer os.RemoveAll("/tmp/avatars.test")
func TestPutNoAvatar(t *testing.T) {
p := AvatarProxy{StorePath: "/tmp/avatars.test", RoutePath: "/avatar"}
u := store.User{ID: "user1", Name: "user1 name"}
res, err := p.Put(u)
assert.NoError(t, err)
assert.Equal(t, "/avatar/default.image", res)
fi, err := os.Stat("/tmp/avatars.test/default.image")
assert.NoError(t, err)
assert.Equal(t, int64(10), fi.Size())
_, err := p.Put(u)
assert.Error(t, err)
}
func TestRoutes(t *testing.T) {
@@ -76,7 +66,7 @@ func TestRoutes(t *testing.T) {
}))
defer ts.Close()
p := AvatarProxy{StorePath: "/tmp/avatars.test", RoutePath: "/avatar", DefaultAvatar: "default.image"}
p := AvatarProxy{StorePath: "/tmp/avatars.test", RoutePath: "/avatar"}
os.MkdirAll("/tmp/avatars.test", 0700)
defer os.RemoveAll("/tmp/avatars.test")
@@ -103,34 +93,6 @@ func TestRoutes(t *testing.T) {
assert.Equal(t, "some picture bin data", bb.String())
}
func TestRoutesDefault(t *testing.T) {
p := AvatarProxy{StorePath: "/tmp/avatars.test", RoutePath: "/avatar", DefaultAvatar: "default.image"}
os.MkdirAll("/tmp/avatars.test", 0700)
ioutil.WriteFile("/tmp/avatars.test/default.image", []byte("1234567890"), 0600)
defer os.RemoveAll("/tmp/avatars.test")
u := store.User{ID: "user1", Name: "user1 name"}
_, err := p.Put(u)
assert.NoError(t, err)
req, err := http.NewRequest("GET", "/no-such-thing.image", nil)
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
_, routes := p.Routes()
handler := http.Handler(routes)
handler.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code)
assert.Equal(t, http.Header{"Content-Type": []string{"image/*"}}, rr.HeaderMap)
bb := bytes.Buffer{}
sz, err := io.Copy(&bb, rr.Body)
assert.NoError(t, err)
assert.Equal(t, int64(10), sz)
}
func TestLocation(t *testing.T) {
p := AvatarProxy{StorePath: "/tmp/avatars.test"}