63 lines
1.5 KiB
Ruby
63 lines
1.5 KiB
Ruby
module Mastodon
|
|
class Ostatus < Grape::API
|
|
format :txt
|
|
|
|
before do
|
|
@account = Account.find(params[:id])
|
|
end
|
|
|
|
resource :subscriptions do
|
|
helpers do
|
|
include ApplicationHelper
|
|
end
|
|
|
|
desc 'Receive updates from an account'
|
|
|
|
params do
|
|
requires :id, type: String, desc: 'Account ID'
|
|
end
|
|
|
|
post ':id' do
|
|
body = request.body.read
|
|
|
|
if @account.subscription(subscription_url(@account)).verify(body, env['HTTP_X_HUB_SIGNATURE'])
|
|
ProcessFeedService.new.(body, @account)
|
|
status 201
|
|
else
|
|
status 202
|
|
end
|
|
end
|
|
|
|
desc 'Confirm PuSH subscription to an account'
|
|
|
|
params do
|
|
requires :id, type: String, desc: 'Account ID'
|
|
requires 'hub.topic', type: String, desc: 'Topic URL'
|
|
requires 'hub.verify_token', type: String, desc: 'Verification token'
|
|
requires 'hub.challenge', type: String, desc: 'Hub challenge'
|
|
end
|
|
|
|
get ':id' do
|
|
if @account.subscription(subscription_url(@account)).valid?(params['hub.topic'], params['hub.verify_token'])
|
|
params['hub.challenge']
|
|
else
|
|
error! :not_found, 404
|
|
end
|
|
end
|
|
end
|
|
|
|
resource :salmon do
|
|
desc 'Receive Salmon updates targeted to account'
|
|
|
|
params do
|
|
requires :id, type: String, desc: 'Account ID'
|
|
end
|
|
|
|
post ':id' do
|
|
ProcessInteractionService.new.(request.body.read, @account)
|
|
status 201
|
|
end
|
|
end
|
|
end
|
|
end
|