Adding application/jrd+json webfinger resource
This commit is contained in:
		
							parent
							
								
									7bb72ff198
								
							
						
					
					
						commit
						d5e086a47b
					
				
					 6 changed files with 54 additions and 10 deletions
				
			
		|  | @ -1,27 +1,29 @@ | ||||||
| class XrdController < ApplicationController | class XrdController < ApplicationController | ||||||
|   before_action :set_format |  | ||||||
| 
 |  | ||||||
|   def host_meta |   def host_meta | ||||||
|     @webfinger_template = "#{webfinger_url}?resource={uri}" |     @webfinger_template = "#{webfinger_url}?resource={uri}" | ||||||
|  | 
 | ||||||
|  |     respond_to do |format| | ||||||
|  |       format.xml { render content_type: 'application/xrd+xml' } | ||||||
|  |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def webfinger |   def webfinger | ||||||
|     @account = Account.find_local!(username_from_resource) |     @account = Account.find_local!(username_from_resource) | ||||||
|     @canonical_account_uri = "acct:#{@account.username}@#{Rails.configuration.x.local_domain}" |     @canonical_account_uri = "acct:#{@account.username}@#{Rails.configuration.x.local_domain}" | ||||||
|     @magic_key = pem_to_magic_key(@account.keypair.public_key) |     @magic_key = pem_to_magic_key(@account.keypair.public_key) | ||||||
|  | 
 | ||||||
|  |     respond_to do |format| | ||||||
|  |       format.xml  { render content_type: 'application/xrd+xml' } | ||||||
|  |       format.json { render content_type: 'application/jrd+json' } | ||||||
|  |     end | ||||||
|   rescue ActiveRecord::RecordNotFound |   rescue ActiveRecord::RecordNotFound | ||||||
|     head 404 |     head 404 | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   private |   private | ||||||
| 
 | 
 | ||||||
|   def set_format |  | ||||||
|     request.format = 'xml' |  | ||||||
|     response.headers['Content-Type'] = 'application/xrd+xml' |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   def username_from_resource |   def username_from_resource | ||||||
|     if resource_param.start_with?('acct:') |     if resource_param.start_with?('acct:') || resource_param.include?('@') | ||||||
|       resource_param.split('@').first.gsub('acct:', '') |       resource_param.split('@').first.gsub('acct:', '') | ||||||
|     else |     else | ||||||
|       url = Addressable::URI.parse(resource_param) |       url = Addressable::URI.parse(resource_param) | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								app/views/xrd/webfinger.json.rabl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								app/views/xrd/webfinger.json.rabl
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | object @account | ||||||
|  | 
 | ||||||
|  | node(:subject) { @canonical_account_uri } | ||||||
|  | 
 | ||||||
|  | node(:aliases) do | ||||||
|  |   [TagManager.instance.url_for(@account)] | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | node(:links) do | ||||||
|  |   [ | ||||||
|  |     { rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: TagManager.instance.url_for(@account) }, | ||||||
|  |     { rel: 'http://schemas.google.com/g/2010#updates-from', type: 'application/atom+xml', href: account_url(@account, format: 'atom') }, | ||||||
|  |     { rel: 'salmon', href: api_salmon_url(@account.id) }, | ||||||
|  |     { rel: 'magic-public-key', href: "data:application/magic-public-key,#{@magic_key}" } | ||||||
|  |   ] | ||||||
|  | end | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| # Be sure to restart your server when you modify this file. | # Be sure to restart your server when you modify this file. | ||||||
| 
 | 
 | ||||||
| # Add new mime types for use in respond_to blocks: | Mime::Type.register "application/json", :json, %w( text/x-json application/jsonrequest application/jrd+json ) | ||||||
| # Mime::Type.register "text/richtext", :rtf | Mime::Type.register "text/xml",         :xml,  %w( application/xml application/atom+xml application/xrd+xml ) | ||||||
|  |  | ||||||
							
								
								
									
										19
									
								
								spec/javascript/components/display_name.test.jsx
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								spec/javascript/components/display_name.test.jsx
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | ||||||
|  | import { expect } from 'chai'; | ||||||
|  | import { render } from 'enzyme'; | ||||||
|  | import Immutable  from 'immutable'; | ||||||
|  | 
 | ||||||
|  | import DisplayName from '../../../app/assets/javascripts/components/components/display_name' | ||||||
|  | 
 | ||||||
|  | describe('<DisplayName />', () => { | ||||||
|  |   const account = Immutable.fromJS({ | ||||||
|  |     username: 'bar', | ||||||
|  |     acct: 'bar@baz', | ||||||
|  |     display_name: 'Foo' | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   const wrapper = render(<DisplayName account={account} />); | ||||||
|  | 
 | ||||||
|  |   it('renders display name', () => { | ||||||
|  |     expect(wrapper.text()).to.match(/Foo @bar@baz/); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
|  | @ -11,6 +11,7 @@ window.React     = React; | ||||||
| function loadStories () { | function loadStories () { | ||||||
|   require('./stories/loading_indicator.story.jsx'); |   require('./stories/loading_indicator.story.jsx'); | ||||||
|   require('./stories/button.story.jsx'); |   require('./stories/button.story.jsx'); | ||||||
|  |   require('./stories/tabs_bar.story.jsx'); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| configure(loadStories, module); | configure(loadStories, module); | ||||||
|  |  | ||||||
							
								
								
									
										6
									
								
								storybook/stories/tabs_bar.story.jsx
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								storybook/stories/tabs_bar.story.jsx
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | import TabsBar from '../../app/assets/javascripts/components/features/ui/components/tabs_bar.jsx' | ||||||
|  | 
 | ||||||
|  | storiesOf('TabsBar', module) | ||||||
|  |   .add('default state', () => ( | ||||||
|  |     <TabsBar /> | ||||||
|  |   )); | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue