Backend: Enable service discovery in API #225

Signed-off-by: Michael Mayer <michael@liquidbytes.net>
This commit is contained in:
Michael Mayer 2020-03-29 12:02:01 +02:00
parent 1e681440a3
commit a9ece37feb
5 changed files with 28 additions and 18 deletions

View file

@ -83,6 +83,12 @@ func CreateAccount(router *gin.RouterGroup, conf *config.Config) {
return return
} }
if err := f.ServiceDiscovery(); err != nil {
log.Error(err)
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": err})
return
}
m, err := entity.CreateAccount(f, conf.Db()) m, err := entity.CreateAccount(f, conf.Db())
log.Debugf("create account: %+v %+v", f, m) log.Debugf("create account: %+v %+v", f, m)

View file

@ -3,6 +3,7 @@ package form
import ( import (
"database/sql" "database/sql"
"github.com/photoprism/photoprism/internal/service"
"github.com/ulule/deepcopier" "github.com/ulule/deepcopier"
) )
@ -40,3 +41,15 @@ func NewAccount(m interface{}) (f Account, err error) {
return f, err return f, err
} }
func (f *Account) ServiceDiscovery() error {
acc, err := service.Discover(f.AccURL, f.AccUser, f.AccPass)
if err != nil {
return err
}
err = deepcopier.Copy(acc).To(f)
return err
}

View file

@ -34,15 +34,11 @@ const (
type Account struct { type Account struct {
AccName string AccName string
AccOwner string
AccURL string AccURL string
AccType string AccType string
AccKey string AccKey string
AccUser string AccUser string
AccPass string AccPass string
AccShare bool
AccSync bool
RetryLimit uint
} }
type Heuristic struct { type Heuristic struct {
@ -153,10 +149,9 @@ func Discover(rawUrl, user, pass string) (result Account, err error) {
if serviceUrl := h.Discover(u.String(), result.AccUser); serviceUrl != nil { if serviceUrl := h.Discover(u.String(), result.AccUser); serviceUrl != nil {
serviceUrl.User = nil serviceUrl.User = nil
result.AccURL = serviceUrl.String()
result.RetryLimit = 3
result.AccName = serviceUrl.Host result.AccName = serviceUrl.Host
result.AccType = string(h.ServiceType) result.AccType = string(h.ServiceType)
result.AccURL = serviceUrl.String()
return result, nil return result, nil
} }

View file

@ -19,7 +19,6 @@ func TestDiscover(t *testing.T) {
assert.Equal(t, "http://webdav-dummy/", r.AccURL) assert.Equal(t, "http://webdav-dummy/", r.AccURL)
assert.Equal(t, "admin", r.AccUser) assert.Equal(t, "admin", r.AccUser)
assert.Equal(t, "photoprism", r.AccPass) assert.Equal(t, "photoprism", r.AccPass)
assert.Equal(t, uint(3), r.RetryLimit)
}) })
t.Run("webdav password", func(t *testing.T) { t.Run("webdav password", func(t *testing.T) {
@ -34,7 +33,6 @@ func TestDiscover(t *testing.T) {
assert.Equal(t, "http://webdav-dummy/", r.AccURL) assert.Equal(t, "http://webdav-dummy/", r.AccURL)
assert.Equal(t, "admin", r.AccUser) assert.Equal(t, "admin", r.AccUser)
assert.Equal(t, "photoprism", r.AccPass) assert.Equal(t, "photoprism", r.AccPass)
assert.Equal(t, uint(3), r.RetryLimit)
}) })
t.Run("https", func(t *testing.T) { t.Run("https", func(t *testing.T) {
@ -49,7 +47,6 @@ func TestDiscover(t *testing.T) {
assert.Equal(t, "https://dl.photoprism.org/fixtures/testdata/import/", r.AccURL) assert.Equal(t, "https://dl.photoprism.org/fixtures/testdata/import/", r.AccURL)
assert.Equal(t, "", r.AccUser) assert.Equal(t, "", r.AccUser)
assert.Equal(t, "", r.AccPass) assert.Equal(t, "", r.AccPass)
assert.Equal(t, uint(3), r.RetryLimit)
}) })
t.Run("facebook", func(t *testing.T) { t.Run("facebook", func(t *testing.T) {
@ -64,6 +61,5 @@ func TestDiscover(t *testing.T) {
assert.Equal(t, "https://www.facebook.com/ob.boris.palmer", r.AccURL) assert.Equal(t, "https://www.facebook.com/ob.boris.palmer", r.AccURL)
assert.Equal(t, "", r.AccUser) assert.Equal(t, "", r.AccUser)
assert.Equal(t, "", r.AccPass) assert.Equal(t, "", r.AccPass)
assert.Equal(t, uint(3), r.RetryLimit)
}) })
} }