remove avatar default
This commit is contained in:
+3
-4
@@ -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"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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"}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user