Browse Source

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

closed-social-glitch-2
Evan Minto 7 years ago
parent
commit
e2fbf8bc74
4 changed files with 37 additions and 0 deletions
  1. +20
    -0
      app/controllers/api/activitypub/accounts_controller.rb
  2. +1
    -0
      app/views/accounts/show.html.haml
  3. +10
    -0
      app/views/api/activitypub/accounts/show.rabl
  4. +6
    -0
      config/routes.rb

+ 20
- 0
app/controllers/api/activitypub/accounts_controller.rb 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

+ 1
- 0
app/views/accounts/show.html.haml 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' }/

+ 10
- 0
app/views/api/activitypub/accounts/show.rabl 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)) }

+ 6
- 0
config/routes.rb 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

Loading…
Cancel
Save