diff --git a/app/main.go b/app/main.go index c60e41c8..2e8e9d2d 100644 --- a/app/main.go +++ b/app/main.go @@ -79,10 +79,11 @@ func main() { if p.Active != nil && p.Command.Find("import") == p.Active { // import mode params := migrator.ImportParams{ - DataStore: dataStore, - InputFile: opts.ImportCommand.InputFile, - Provider: opts.ImportCommand.Provider, - SiteID: opts.ImportCommand.SiteID, + DataStore: dataStore, + InputFile: opts.ImportCommand.InputFile, + Provider: opts.ImportCommand.Provider, + SiteID: opts.ImportCommand.SiteID, + DefaultAvatarURL: opts.RemarkURL + "/api/v1/avatar/" + opts.ServerCommand.DefaultAvatar, } if err := migrator.ImportComments(params); err != nil { log.Fatalf("[ERROR] failed to import, %+v", err) diff --git a/app/migrator/disqus.go b/app/migrator/disqus.go index 042612aa..7dc0d073 100644 --- a/app/migrator/disqus.go +++ b/app/migrator/disqus.go @@ -14,7 +14,8 @@ import ( // Disqus implements Importer from disqus xml type Disqus struct { - DataStore store.Interface + DataStore store.Interface + DefaultAvatarURL string } type disqusThread struct { @@ -118,9 +119,14 @@ func (d *Disqus) convert(r io.Reader, siteID string) (ch chan store.Comment) { continue } c := store.Comment{ - ID: comment.UID, - Locator: store.Locator{URL: postsMap[comment.Tid.Val], SiteID: siteID}, - User: store.User{ID: "disqus_" + comment.AuthorUserName, Name: comment.AuthorName, IP: comment.IP}, + ID: comment.UID, + Locator: store.Locator{URL: postsMap[comment.Tid.Val], SiteID: siteID}, + User: store.User{ + ID: "disqus_" + comment.AuthorUserName, + Name: comment.AuthorName, + Picture: d.DefaultAvatarURL, + IP: comment.IP, + }, Text: d.cleanText(comment.Message), Timestamp: comment.CreatedAt, ParentID: comment.Pid.Val, diff --git a/app/migrator/disqus_test.go b/app/migrator/disqus_test.go index 08687164..da887f88 100644 --- a/app/migrator/disqus_test.go +++ b/app/migrator/disqus_test.go @@ -16,7 +16,7 @@ func TestDisqus_Import(t *testing.T) { defer os.Remove("/tmp/remark-test.db") dataStore, err := store.NewBoltDB(store.BoltSite{FileName: "/tmp/remark-test.db", SiteID: "test"}) require.Nil(t, err, "create store") - d := Disqus{DataStore: dataStore} + d := Disqus{DataStore: dataStore, DefaultAvatarURL: "http://localhost:8080/avatar.png"} err = d.Import(strings.NewReader(xmlTest), "test") assert.Nil(t, err) @@ -24,6 +24,16 @@ func TestDisqus_Import(t *testing.T) { assert.Nil(t, err) assert.Equal(t, 3, len(last), "3 comments imported") + c := last[0] + assert.True(t, strings.HasPrefix(c.Text, "

Google App Engine")) + assert.Equal(t, "299986072", c.ID) + assert.Equal(t, "", c.ParentID) + assert.Equal(t, store.Locator{SiteID: "test", URL: "http://radio-t.umputun.com/2011/03/229_8880.html"}, c.Locator) + assert.Equal(t, "Dmitry Noname", c.User.Name) + assert.Equal(t, "disqus_google-74b9e7568ef6860e93862c5d77590123", c.User.ID) + assert.Equal(t, "89.89.89.139", c.User.IP) + assert.Equal(t, "http://localhost:8080/avatar.png", c.User.Picture) + posts, err := dataStore.List("test") assert.Nil(t, err) assert.Equal(t, 2, len(posts), "2 posts") diff --git a/app/migrator/migrator.go b/app/migrator/migrator.go index 6b820b07..254f2ff7 100644 --- a/app/migrator/migrator.go +++ b/app/migrator/migrator.go @@ -25,10 +25,11 @@ type Exporter interface { // ImportParams defines everything needed to run import type ImportParams struct { - DataStore store.Interface - InputFile string - Provider string - SiteID string + DataStore store.Interface + InputFile string + Provider string + SiteID string + DefaultAvatarURL string } // ImportComments imports from given provider format and saves to store @@ -38,7 +39,7 @@ func ImportComments(p ImportParams) error { var importer Importer switch p.Provider { case "disqus": - importer = &Disqus{DataStore: p.DataStore} + importer = &Disqus{DataStore: p.DataStore, DefaultAvatarURL: p.DefaultAvatarURL} case "native": importer = &Remark{DataStore: p.DataStore} default: diff --git a/app/rest/auth/avatar.go b/app/rest/auth/avatar.go index 299f339a..4f337e80 100644 --- a/app/rest/auth/avatar.go +++ b/app/rest/auth/avatar.go @@ -35,7 +35,7 @@ func (p *AvatarProxy) Put(u store.User) (avatarURL string, err error) { if u.Picture == "" { if p.DefaultAvatar != "" { - return p.RoutePath + "/" + p.DefaultAvatar, nil + return p.RemarkURL + p.RoutePath + "/" + p.DefaultAvatar, nil } return "", errors.Errorf("no picture for %s", u.ID) }