Add an account endpoint for ActivityPub and link to it on HTML profile pages
This commit is contained in:
		
							
								
								
									
										20
									
								
								app/controllers/api/activitypub/accounts_controller.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								app/controllers/api/activitypub/accounts_controller.rb
									
									
									
									
									
										Normal 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 | ||||
| @@ -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
									
								
								app/views/api/activitypub/accounts/show.rabl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								app/views/api/activitypub/accounts/show.rabl
									
									
									
									
									
										Normal 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)) } | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user