Backend: Enable service discovery in API #225
Signed-off-by: Michael Mayer <michael@liquidbytes.net>
This commit is contained in:
parent
1e681440a3
commit
a9ece37feb
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue