app
assets
controllers
admin
api
v1
web
oembed_controller.rb
push_controller.rb
salmon_controller.rb
subscriptions_controller.rb
auth
concerns
oauth
settings
about_controller.rb
accounts_controller.rb
api_controller.rb
application_controller.rb
authorize_follow_controller.rb
home_controller.rb
media_controller.rb
remote_follow_controller.rb
statuses_controller.rb
stream_entries_controller.rb
tags_controller.rb
xrd_controller.rb
helpers
lib
mailers
models
services
views
workers
bin
config
db
docs
lib
log
public
spec
storybook
streaming
vendor
.babelrc
.buildpacks
.codeclimate.yml
.dockerignore
.env.production.sample
.env.test
.env.vagrant
.eslintrc
.gitignore
.nvmrc
.rspec
.rubocop.yml
.ruby-version
.slugignore
.travis.yml
CONTRIBUTING.md
Capfile
Dockerfile
Gemfile
Gemfile.lock
ISSUE_TEMPLATE.md
LICENSE
Procfile
README.md
Rakefile
Vagrantfile
app.json
config.ru
docker-compose.yml
package.json
scalingo.json
yarn.lock
38 lines
1.1 KiB
Ruby
38 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Api::PushController < ApiController
|
|
def update
|
|
mode = params['hub.mode']
|
|
topic = params['hub.topic']
|
|
callback = params['hub.callback']
|
|
lease_seconds = params['hub.lease_seconds']
|
|
secret = params['hub.secret']
|
|
|
|
case mode
|
|
when 'subscribe'
|
|
response, status = Pubsubhubbub::SubscribeService.new.call(topic_to_account(topic), callback, secret, lease_seconds)
|
|
when 'unsubscribe'
|
|
response, status = Pubsubhubbub::UnsubscribeService.new.call(topic_to_account(topic), callback)
|
|
else
|
|
response = "Unknown mode: #{mode}"
|
|
status = 422
|
|
end
|
|
|
|
render plain: response, status: status
|
|
end
|
|
|
|
private
|
|
|
|
def topic_to_account(topic_url)
|
|
return if topic_url.blank?
|
|
|
|
uri = Addressable::URI.parse(topic_url)
|
|
params = Rails.application.routes.recognize_path(uri.path)
|
|
domain = uri.host + (uri.port ? ":#{uri.port}" : '')
|
|
|
|
return unless TagManager.instance.local_domain?(domain) && params[:controller] == 'accounts' && params[:action] == 'show' && params[:format] == 'atom'
|
|
|
|
Account.find_local(params[:username])
|
|
end
|
|
end
|