From e2fbf8bc7479967baa84ef26eb03e19f0fd868e8 Mon Sep 17 00:00:00 2001 From: Evan Minto Date: Sat, 4 Feb 2017 14:46:23 -0800 Subject: Add an account endpoint for ActivityPub and link to it on HTML profile pages --- app/views/accounts/show.html.haml | 1 + app/views/api/activitypub/accounts/show.rabl | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 100644 app/views/api/activitypub/accounts/show.rabl (limited to 'app/views') diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml index c194ce33d..cd5398908 100644 --- a/app/views/accounts/show.html.haml +++ b/app/views/accounts/show.html.haml @@ -4,6 +4,7 @@ - content_for :header_tags do %link{ rel: 'salmon', href: api_salmon_url(@account.id) }/ %link{ rel: 'alternate', type: 'application/atom+xml', href: account_url(@account, format: 'atom') }/ + %link{ rel: 'alternate', type: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams#"', href: "http://mastodon.dev/api/v1/activitypub/accounts/#{@account.username}" }/ %meta{ property: 'og:site_name', content: 'Mastodon' }/ %meta{ property: 'og:type', content: 'profile' }/ diff --git a/app/views/api/activitypub/accounts/show.rabl b/app/views/api/activitypub/accounts/show.rabl new file mode 100644 index 000000000..806789d00 --- /dev/null +++ b/app/views/api/activitypub/accounts/show.rabl @@ -0,0 +1,10 @@ +object @account + +node(:'@context') { 'https://www.w3.org/ns/activitystreams' } +node(:type) { 'Person' } +node(:id) { request.original_url } +node(:url) { |account| TagManager.instance.url_for(account) } +node(:name) { |account| account.display_name } +node(:preferredUsername) { |account| account.username } +node(:summary) { |account| account.note } +node(:icon) { |account| full_asset_url(account.avatar.url(:original)) } -- cgit From 94e213c6c11fb3476a6c151425052775427574e1 Mon Sep 17 00:00:00 2001 From: Evan Minto Date: Mon, 6 Feb 2017 01:19:05 -0800 Subject: Reuse existing controller and route --- app/controllers/accounts_controller.rb | 2 ++ app/controllers/api/activitypub/accounts_controller.rb | 18 ------------------ app/views/accounts/show.html.haml | 1 - app/views/accounts/show.rabl | 9 +++++++++ app/views/activitypub/base.rabl | 1 + app/views/activitypub/intransient.rabl | 3 +++ app/views/activitypub/types/person.rabl | 3 +++ app/views/api/activitypub/accounts/show.rabl | 10 ---------- config/initializers/mime_types.rb | 5 +++-- config/routes.rb | 4 ---- 10 files changed, 21 insertions(+), 35 deletions(-) delete mode 100644 app/controllers/api/activitypub/accounts_controller.rb create mode 100644 app/views/accounts/show.rabl create mode 100644 app/views/activitypub/base.rabl create mode 100644 app/views/activitypub/intransient.rabl create mode 100644 app/views/activitypub/types/person.rabl delete mode 100644 app/views/api/activitypub/accounts/show.rabl (limited to 'app/views') 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/controllers/api/activitypub/accounts_controller.rb b/app/controllers/api/activitypub/accounts_controller.rb deleted file mode 100644 index 82936f062..000000000 --- a/app/controllers/api/activitypub/accounts_controller.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -class Api::Activitypub::AccountsController < ApiController - before_action :set_account - - respond_to :'application/activity+json' - respond_to :'application/ld+json; profile="https://www.w3.org/ns/activitystreams#"' - - def show - render content_type: :'application/ld+json; profile="https://www.w3.org/ns/activitystreams#"' - end - - private - - def set_account - @account = Account.find(params[:id]) - end -end diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml index cd5398908..c194ce33d 100644 --- a/app/views/accounts/show.html.haml +++ b/app/views/accounts/show.html.haml @@ -4,7 +4,6 @@ - content_for :header_tags do %link{ rel: 'salmon', href: api_salmon_url(@account.id) }/ %link{ rel: 'alternate', type: 'application/atom+xml', href: account_url(@account, format: 'atom') }/ - %link{ rel: 'alternate', type: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams#"', href: "http://mastodon.dev/api/v1/activitypub/accounts/#{@account.username}" }/ %meta{ property: 'og:site_name', content: 'Mastodon' }/ %meta{ property: 'og:type', content: 'profile' }/ diff --git a/app/views/accounts/show.rabl b/app/views/accounts/show.rabl new file mode 100644 index 000000000..76aa4a809 --- /dev/null +++ b/app/views/accounts/show.rabl @@ -0,0 +1,9 @@ +extends 'activitypub/types/person.rabl' + +object @account + +node(:url) { |account| TagManager.instance.url_for(account) } +node(:name) { |account| account.display_name } +node(:preferredUsername) { |account| account.username } +node(:summary) { |account| account.note } +node(:icon) { |account| full_asset_url(account.avatar.url(:original)) } diff --git a/app/views/activitypub/base.rabl b/app/views/activitypub/base.rabl new file mode 100644 index 000000000..c5e94997a --- /dev/null +++ b/app/views/activitypub/base.rabl @@ -0,0 +1 @@ +node(:'@context') { 'https://www.w3.org/ns/activitystreams' } diff --git a/app/views/activitypub/intransient.rabl b/app/views/activitypub/intransient.rabl new file mode 100644 index 000000000..21261f56d --- /dev/null +++ b/app/views/activitypub/intransient.rabl @@ -0,0 +1,3 @@ +extends 'activitypub/base.rabl' + +node(:id) { request.original_url } diff --git a/app/views/activitypub/types/person.rabl b/app/views/activitypub/types/person.rabl new file mode 100644 index 000000000..17c53bb7b --- /dev/null +++ b/app/views/activitypub/types/person.rabl @@ -0,0 +1,3 @@ +extends 'activitypub/intransient.rabl' + +node(:type) { 'Person' } \ No newline at end of file diff --git a/app/views/api/activitypub/accounts/show.rabl b/app/views/api/activitypub/accounts/show.rabl deleted file mode 100644 index 806789d00..000000000 --- a/app/views/api/activitypub/accounts/show.rabl +++ /dev/null @@ -1,10 +0,0 @@ -object @account - -node(:'@context') { 'https://www.w3.org/ns/activitystreams' } -node(:type) { 'Person' } -node(:id) { request.original_url } -node(:url) { |account| TagManager.instance.url_for(account) } -node(:name) { |account| account.display_name } -node(:preferredUsername) { |account| account.username } -node(:summary) { |account| account.note } -node(:icon) { |account| full_asset_url(account.avatar.url(:original)) } 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/config/routes.rb b/config/routes.rb index 4d0138b82..699f56833 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -153,10 +153,6 @@ Rails.application.routes.draw do end end - namespace :activitypub do - resources :accounts, only: [:show] - end - namespace :web do resource :settings, only: [:update] end -- cgit From 3fa5d059977388066d71e475e484728f6019d04e Mon Sep 17 00:00:00 2001 From: Evan Minto Date: Mon, 6 Feb 2017 11:39:08 -0800 Subject: Simplify RABL --- app/views/accounts/show.rabl | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'app/views') diff --git a/app/views/accounts/show.rabl b/app/views/accounts/show.rabl index 76aa4a809..def91b425 100644 --- a/app/views/accounts/show.rabl +++ b/app/views/accounts/show.rabl @@ -2,8 +2,7 @@ extends 'activitypub/types/person.rabl' object @account -node(:url) { |account| TagManager.instance.url_for(account) } -node(:name) { |account| account.display_name } -node(:preferredUsername) { |account| account.username } -node(:summary) { |account| account.note } -node(:icon) { |account| full_asset_url(account.avatar.url(:original)) } +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)) } -- cgit From 53234e59479095968155bf7769e51614ef91c12d Mon Sep 17 00:00:00 2001 From: Evan Minto Date: Mon, 6 Feb 2017 12:15:47 -0800 Subject: Add trailing newline --- app/views/activitypub/types/person.rabl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/views') diff --git a/app/views/activitypub/types/person.rabl b/app/views/activitypub/types/person.rabl index 17c53bb7b..c284fc53b 100644 --- a/app/views/activitypub/types/person.rabl +++ b/app/views/activitypub/types/person.rabl @@ -1,3 +1,3 @@ extends 'activitypub/intransient.rabl' -node(:type) { 'Person' } \ No newline at end of file +node(:type) { 'Person' } -- cgit From 28cbb6dc2176cb9ba57841c6dc52b9dbfaf074c8 Mon Sep 17 00:00:00 2001 From: Evan Minto Date: Mon, 6 Feb 2017 17:00:55 -0800 Subject: Add AS2 format to RABL files --- app/views/accounts/show.activitystreams2.rabl | 8 ++++++++ app/views/accounts/show.rabl | 8 -------- app/views/activitypub/base.activitystreams2.rabl | 1 + app/views/activitypub/base.rabl | 1 - app/views/activitypub/intransient.activitystreams2.rabl | 3 +++ app/views/activitypub/intransient.rabl | 3 --- app/views/activitypub/types/person.activitystreams2.rabl | 3 +++ app/views/activitypub/types/person.rabl | 3 --- 8 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 app/views/accounts/show.activitystreams2.rabl delete mode 100644 app/views/accounts/show.rabl create mode 100644 app/views/activitypub/base.activitystreams2.rabl delete mode 100644 app/views/activitypub/base.rabl create mode 100644 app/views/activitypub/intransient.activitystreams2.rabl delete mode 100644 app/views/activitypub/intransient.rabl create mode 100644 app/views/activitypub/types/person.activitystreams2.rabl delete mode 100644 app/views/activitypub/types/person.rabl (limited to 'app/views') 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/accounts/show.rabl b/app/views/accounts/show.rabl deleted file mode 100644 index def91b425..000000000 --- a/app/views/accounts/show.rabl +++ /dev/null @@ -1,8 +0,0 @@ -extends 'activitypub/types/person.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/base.rabl b/app/views/activitypub/base.rabl deleted file mode 100644 index c5e94997a..000000000 --- a/app/views/activitypub/base.rabl +++ /dev/null @@ -1 +0,0 @@ -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/intransient.rabl b/app/views/activitypub/intransient.rabl deleted file mode 100644 index 21261f56d..000000000 --- a/app/views/activitypub/intransient.rabl +++ /dev/null @@ -1,3 +0,0 @@ -extends 'activitypub/base.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/app/views/activitypub/types/person.rabl b/app/views/activitypub/types/person.rabl deleted file mode 100644 index c284fc53b..000000000 --- a/app/views/activitypub/types/person.rabl +++ /dev/null @@ -1,3 +0,0 @@ -extends 'activitypub/intransient.rabl' - -node(:type) { 'Person' } -- cgit