Webfinger example
This commit is contained in:
parent
badce25aec
commit
44239bc5d4
1 changed files with 75 additions and 1 deletions
|
@ -19,18 +19,25 @@ module Diversipub
|
|||
|
||||
private
|
||||
|
||||
# rubocop:disable Metrics/MethodLength
|
||||
|
||||
def builder
|
||||
@builder ||= Rack::Builder.new.tap do |builder|
|
||||
builder.use Rack::Head
|
||||
builder.use Rack::ShowExceptions
|
||||
builder.use Rack::ShowStatus
|
||||
builder.use Rack::ContentLength
|
||||
builder.use Rack::Static, **rack_static_kwargs
|
||||
builder.use Rack::Protection, except: %i[session_hijacking]
|
||||
builder.map '/.well-known/webfinger' do
|
||||
run Webfinger.new
|
||||
end
|
||||
builder.use Rack::Static, **rack_static_kwargs
|
||||
builder.run rest
|
||||
end
|
||||
end
|
||||
|
||||
# rubocop:enable Metrics/MethodLength
|
||||
|
||||
def rack_static_kwargs
|
||||
@rack_static_kwargs ||= {
|
||||
cascade: true,
|
||||
|
@ -43,5 +50,72 @@ module Diversipub
|
|||
def rest
|
||||
@rest ||= ->(_) { [200, {}, ['Hello, World!']] }
|
||||
end
|
||||
|
||||
##
|
||||
# Webfinger endpoint.
|
||||
#
|
||||
class Webfinger
|
||||
JRD_JSON = 'application/jrd+json'
|
||||
|
||||
ACCT_RU = 'acct:ru@causa-arcana.com'
|
||||
ACCT_EN = 'acct:en@causa-arcana.com'
|
||||
|
||||
RU = {
|
||||
subject: ACCT_RU,
|
||||
aliases: [].freeze,
|
||||
links: [
|
||||
{
|
||||
rel: 'http://webfinger.net/rel/profile-page',
|
||||
type: 'text/html',
|
||||
href: 'https://causa-arcana.com/ru/blog/feed.html',
|
||||
},
|
||||
{
|
||||
rel: 'http://webfinger.net/rel/profile-page',
|
||||
type: 'text/gemini; charset=utf-8',
|
||||
href: 'gemini://causa-arcana.com/ru/blog/feed.gmi',
|
||||
},
|
||||
].freeze,
|
||||
}.freeze
|
||||
|
||||
EN = {
|
||||
subject: ACCT_EN,
|
||||
aliases: [].freeze,
|
||||
links: [
|
||||
{
|
||||
rel: 'http://webfinger.net/rel/profile-page',
|
||||
type: 'text/html',
|
||||
href: 'https://causa-arcana.com/en/blog/feed.html',
|
||||
},
|
||||
{
|
||||
rel: 'http://webfinger.net/rel/profile-page',
|
||||
type: 'text/gemini; charset=utf-8',
|
||||
href: 'gemini://causa-arcana.com/en/blog/feed.gmi',
|
||||
},
|
||||
].freeze,
|
||||
}.freeze
|
||||
|
||||
def call(env)
|
||||
request = Rack::Request.new env
|
||||
resource = request.params['resource']
|
||||
|
||||
data =
|
||||
case resource
|
||||
when ACCT_RU then RU
|
||||
when ACCT_EN then EN
|
||||
else
|
||||
raise 'Unknown resource'
|
||||
end
|
||||
|
||||
[
|
||||
200,
|
||||
{
|
||||
Rack::CONTENT_TYPE => JRD_JSON,
|
||||
},
|
||||
[
|
||||
data.to_json,
|
||||
],
|
||||
]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue