about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen <eugen@zeonfederated.com>2017-02-07 02:08:40 +0100
committerGitHub <noreply@github.com>2017-02-07 02:08:40 +0100
commit9d5fb49cd80ee31f83bf5364338bd829e3eae1d6 (patch)
treebb49d530bdb47d3576987d48a69698779b6504da
parent8a081ce588594154f93702ac2983cb7c0fca015a (diff)
parent28cbb6dc2176cb9ba57841c6dc52b9dbfaf074c8 (diff)
Merge pull request #603 from evanminto/activitypub-account
Expose ActivityStreams 2.0 representation of accounts
-rw-r--r--app/controllers/accounts_controller.rb2
-rw-r--r--app/views/accounts/show.activitystreams2.rabl8
-rw-r--r--app/views/activitypub/base.activitystreams2.rabl1
-rw-r--r--app/views/activitypub/intransient.activitystreams2.rabl3
-rw-r--r--app/views/activitypub/types/person.activitystreams2.rabl3
-rw-r--r--config/initializers/mime_types.rb5
-rw-r--r--spec/controllers/accounts_controller_spec.rb10
7 files changed, 30 insertions, 2 deletions
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index 411a41ccc..b837f006e 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -18,6 +18,8 @@ class AccountsController < ApplicationController
       format.atom do
         @entries = @account.stream_entries.order('id desc').where(hidden: false).with_includes.paginate_by_max_id(20, params[:max_id], params[:since_id])
       end
+
+      format.activitystreams2
     end
   end
 
diff --git a/app/views/accounts/show.activitystreams2.rabl b/app/views/accounts/show.activitystreams2.rabl
new file mode 100644
index 000000000..dabae3f29
--- /dev/null
+++ b/app/views/accounts/show.activitystreams2.rabl
@@ -0,0 +1,8 @@
+extends 'activitypub/types/person.activitystreams2.rabl'
+
+object @account
+
+attributes display_name: :name, username: :preferredUsername, note: :summary
+
+node(:icon)   { |account| full_asset_url(account.avatar.url(:original)) }
+node(:image)  { |account| full_asset_url(account.header.url(:original)) }
diff --git a/app/views/activitypub/base.activitystreams2.rabl b/app/views/activitypub/base.activitystreams2.rabl
new file mode 100644
index 000000000..c5e94997a
--- /dev/null
+++ b/app/views/activitypub/base.activitystreams2.rabl
@@ -0,0 +1 @@
+node(:'@context') { 'https://www.w3.org/ns/activitystreams' }
diff --git a/app/views/activitypub/intransient.activitystreams2.rabl b/app/views/activitypub/intransient.activitystreams2.rabl
new file mode 100644
index 000000000..968e451c2
--- /dev/null
+++ b/app/views/activitypub/intransient.activitystreams2.rabl
@@ -0,0 +1,3 @@
+extends 'activitypub/base.activitystreams2.rabl'
+
+node(:id) { request.original_url }
diff --git a/app/views/activitypub/types/person.activitystreams2.rabl b/app/views/activitypub/types/person.activitystreams2.rabl
new file mode 100644
index 000000000..487a60791
--- /dev/null
+++ b/app/views/activitypub/types/person.activitystreams2.rabl
@@ -0,0 +1,3 @@
+extends 'activitypub/intransient.activitystreams2.rabl'
+
+node(:type) { 'Person' }
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb
index 5a16a14e8..b1b73c846 100644
--- a/config/initializers/mime_types.rb
+++ b/config/initializers/mime_types.rb
@@ -1,4 +1,5 @@
 # Be sure to restart your server when you modify this file.
 
-Mime::Type.register "application/json", :json, %w( text/x-json application/jsonrequest application/jrd+json )
-Mime::Type.register "text/xml",         :xml,  %w( application/xml application/atom+xml application/xrd+xml )
+Mime::Type.register "application/json",           :json, %w( text/x-json application/jsonrequest application/jrd+json )
+Mime::Type.register "text/xml",                   :xml,  %w( application/xml application/atom+xml application/xrd+xml )
+Mime::Type.register "application/activity+json",  :activitystreams2
diff --git a/spec/controllers/accounts_controller_spec.rb b/spec/controllers/accounts_controller_spec.rb
index 34f17a943..d2c93c707 100644
--- a/spec/controllers/accounts_controller_spec.rb
+++ b/spec/controllers/accounts_controller_spec.rb
@@ -24,6 +24,16 @@ RSpec.describe AccountsController, type: :controller do
       end
     end
 
+    context 'activitystreams2' do
+      before do
+        get :show, params: { username: alice.username }, format: 'activitystreams2'
+      end
+
+      it 'returns http success with Activity Streams 2.0' do
+        expect(response).to have_http_status(:success)
+      end
+    end
+
     context 'html' do
       before do
         get :show, params: { username: alice.username }