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
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue