From a9ece37feb541b4580e0657c1f0571c0bfa56a36 Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Sun, 29 Mar 2020 12:02:01 +0200 Subject: [PATCH] Backend: Enable service discovery in API #225 Signed-off-by: Michael Mayer --- internal/api/account.go | 6 ++++++ internal/entity/file_sync.go | 4 ++-- internal/form/account.go | 13 +++++++++++++ internal/service/service.go | 19 +++++++------------ internal/service/service_test.go | 4 ---- 5 files changed, 28 insertions(+), 18 deletions(-) diff --git a/internal/api/account.go b/internal/api/account.go index 589b125a9..c85f8235e 100644 --- a/internal/api/account.go +++ b/internal/api/account.go @@ -83,6 +83,12 @@ func CreateAccount(router *gin.RouterGroup, conf *config.Config) { 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()) log.Debugf("create account: %+v %+v", f, m) diff --git a/internal/entity/file_sync.go b/internal/entity/file_sync.go index 4bb01b5de..266d3df19 100644 --- a/internal/entity/file_sync.go +++ b/internal/entity/file_sync.go @@ -30,8 +30,8 @@ func (FileSync) TableName() string { // NewFileSync creates a new entity. func NewFileSync(accountID uint, remoteName string) *FileSync { result := &FileSync{ - AccountID: accountID, - RemoteName: remoteName, + AccountID: accountID, + RemoteName: remoteName, } return result diff --git a/internal/form/account.go b/internal/form/account.go index e9a41a337..e7cf86126 100644 --- a/internal/form/account.go +++ b/internal/form/account.go @@ -3,6 +3,7 @@ package form import ( "database/sql" + "github.com/photoprism/photoprism/internal/service" "github.com/ulule/deepcopier" ) @@ -40,3 +41,15 @@ func NewAccount(m interface{}) (f Account, err error) { 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 +} diff --git a/internal/service/service.go b/internal/service/service.go index d7eed2e43..e08ae958b 100644 --- a/internal/service/service.go +++ b/internal/service/service.go @@ -33,16 +33,12 @@ const ( ) type Account struct { - AccName string - AccOwner string - AccURL string - AccType string - AccKey string - AccUser string - AccPass string - AccShare bool - AccSync bool - RetryLimit uint + AccName string + AccURL string + AccType string + AccKey string + AccUser string + AccPass string } 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 { serviceUrl.User = nil - result.AccURL = serviceUrl.String() - result.RetryLimit = 3 result.AccName = serviceUrl.Host result.AccType = string(h.ServiceType) + result.AccURL = serviceUrl.String() return result, nil } diff --git a/internal/service/service_test.go b/internal/service/service_test.go index f73515bb9..d1c5b7536 100644 --- a/internal/service/service_test.go +++ b/internal/service/service_test.go @@ -19,7 +19,6 @@ func TestDiscover(t *testing.T) { assert.Equal(t, "http://webdav-dummy/", r.AccURL) assert.Equal(t, "admin", r.AccUser) assert.Equal(t, "photoprism", r.AccPass) - assert.Equal(t, uint(3), r.RetryLimit) }) 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, "admin", r.AccUser) assert.Equal(t, "photoprism", r.AccPass) - assert.Equal(t, uint(3), r.RetryLimit) }) 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, "", r.AccUser) assert.Equal(t, "", r.AccPass) - assert.Equal(t, uint(3), r.RetryLimit) }) 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, "", r.AccUser) assert.Equal(t, "", r.AccPass) - assert.Equal(t, uint(3), r.RetryLimit) }) }