diff options
author | Anthony Bellew <anthonyreflected@gmail.com> | 2017-01-03 11:51:35 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-03 11:51:35 -0700 |
commit | de154dbd5dbb04d083f5a66dc288d9fef7006c01 (patch) | |
tree | 88a1715021c33add55501351dbf74950deeac481 /app/controllers/remote_follow_controller.rb | |
parent | c3e9ba6a66bfcb9e33edebc73adea0a17d7f02a6 (diff) | |
parent | e6657d7342ee1ce08973bf1e5ab89e423eb8b760 (diff) |
Merge pull request #1 from Gargron/master
Catchup merge
Diffstat (limited to 'app/controllers/remote_follow_controller.rb')
-rw-r--r-- | app/controllers/remote_follow_controller.rb | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/app/controllers/remote_follow_controller.rb b/app/controllers/remote_follow_controller.rb new file mode 100644 index 000000000..7d4bfe6ce --- /dev/null +++ b/app/controllers/remote_follow_controller.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +class RemoteFollowController < ApplicationController + layout 'public' + + before_action :set_account + before_action :check_account_suspension + + def new + @remote_follow = RemoteFollow.new + end + + def create + @remote_follow = RemoteFollow.new(resource_params) + + if @remote_follow.valid? + resource = Goldfinger.finger("acct:#{@remote_follow.acct}") + redirect_url_link = resource&.link('http://ostatus.org/schema/1.0/subscribe') + + if redirect_url_link.nil? || redirect_url_link.template.nil? + @remote_follow.errors.add(:acct, I18n.t('remote_follow.missing_resource')) + render(:new) && return + end + + redirect_to Addressable::Template.new(redirect_url_link.template).expand(uri: "#{@account.username}@#{Rails.configuration.x.local_domain}").to_s + else + render :new + end + rescue Goldfinger::Error + @remote_follow.errors.add(:acct, I18n.t('remote_follow.missing_resource')) + render :new + end + + private + + def resource_params + params.require(:remote_follow).permit(:acct) + end + + def set_account + @account = Account.find_local!(params[:account_username]) + end + + def check_account_suspension + head 410 if @account.suspended? + end +end |