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
}
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)

View file

@ -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
}

View file

@ -34,15 +34,11 @@ const (
type Account struct {
AccName string
AccOwner string
AccURL string
AccType string
AccKey string
AccUser string
AccPass string
AccShare bool
AccSync bool
RetryLimit uint
}
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
}

View file

@ -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)
})
}