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

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

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

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

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