Add an account endpoint for ActivityPub and link to it on HTML profile pages

skylight
Evan Minto 2017-02-04 14:46:23 -08:00
parent 7b7a356aed
commit e2fbf8bc74
4 changed files with 37 additions and 0 deletions

View File

@ -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

View File

@ -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' }/

View File

@ -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)) }

View File

@ -153,6 +153,12 @@ Rails.application.routes.draw do
end
end
namespace :activitypub do
resources :accounts do
get '/:id', to: 'accounts#show'
end
end
namespace :web do
resource :settings, only: [:update]
end