From 0618f09939b7afc607bcd983139b91e056debe4d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 26 Apr 2017 18:19:53 -0400 Subject: Add spec coverage and refactor authorize_follows controller (#2505) --- app/controllers/authorize_follows_controller.rb | 61 +++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 app/controllers/authorize_follows_controller.rb (limited to 'app/controllers/authorize_follows_controller.rb') diff --git a/app/controllers/authorize_follows_controller.rb b/app/controllers/authorize_follows_controller.rb new file mode 100644 index 000000000..f00646e20 --- /dev/null +++ b/app/controllers/authorize_follows_controller.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +class AuthorizeFollowsController < ApplicationController + layout 'public' + + before_action :authenticate_user! + + def show + @account = located_account || render(:error) + end + + def create + @account = follow_attempt.try(:target_account) + + if @account.nil? + render :error + else + redirect_to web_url("accounts/#{@account.id}") + end + rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError + render :error + end + + private + + def follow_attempt + FollowService.new.call(current_account, acct_without_prefix) + end + + def located_account + if acct_param_is_url? + account_from_remote_fetch + else + account_from_remote_follow + end + end + + def account_from_remote_fetch + FetchRemoteAccountService.new.call(acct_without_prefix) + end + + def account_from_remote_follow + FollowRemoteAccountService.new.call(acct_without_prefix) + end + + def acct_param_is_url? + parsed_uri.path && %w[http https].include?(parsed_uri.scheme) + end + + def parsed_uri + Addressable::URI.parse(acct_without_prefix).normalize + end + + def acct_without_prefix + acct_params.gsub(/\Aacct:/, '') + end + + def acct_params + params.fetch(:acct, '') + end +end -- cgit