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 --- .../api/activitypub/accounts_controller.rb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 app/controllers/api/activitypub/accounts_controller.rb (limited to 'app/controllers') diff --git a/app/controllers/api/activitypub/accounts_controller.rb b/app/controllers/api/activitypub/accounts_controller.rb new file mode 100644 index 000000000..efb6413a0 --- /dev/null +++ b/app/controllers/api/activitypub/accounts_controller.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class Api::Activitypub::AccountsController < ApiController + before_action -> { doorkeeper_authorize! :read }, except: [:show] + before_action :require_user!, except: [:show] + before_action :set_account, except: [:verify_credentials, :suggestions, :search] + + 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 -- cgit From 8bd8ea7c0406a8eeb145471475b105366e195e6a Mon Sep 17 00:00:00 2001 From: Evan Minto Date: Sat, 4 Feb 2017 14:49:24 -0800 Subject: Remove unnecessary leftover code --- app/controllers/api/activitypub/accounts_controller.rb | 4 +--- config/routes.rb | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/api/activitypub/accounts_controller.rb b/app/controllers/api/activitypub/accounts_controller.rb index efb6413a0..82936f062 100644 --- a/app/controllers/api/activitypub/accounts_controller.rb +++ b/app/controllers/api/activitypub/accounts_controller.rb @@ -1,9 +1,7 @@ # frozen_string_literal: true class Api::Activitypub::AccountsController < ApiController - before_action -> { doorkeeper_authorize! :read }, except: [:show] - before_action :require_user!, except: [:show] - before_action :set_account, except: [:verify_credentials, :suggestions, :search] + before_action :set_account respond_to :'application/activity+json' respond_to :'application/ld+json; profile="https://www.w3.org/ns/activitystreams#"' diff --git a/config/routes.rb b/config/routes.rb index f831c4239..4d0138b82 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -154,9 +154,7 @@ Rails.application.routes.draw do end namespace :activitypub do - resources :accounts do - get '/:id', to: 'accounts#show' - end + resources :accounts, only: [:show] end namespace :web do -- 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/controllers') 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