diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/authorize_follow_controller.rb | 45 | ||||
-rw-r--r-- | app/controllers/authorize_follows_controller.rb | 61 | ||||
-rw-r--r-- | app/views/authorize_follows/_card.html.haml (renamed from app/views/authorize_follow/_card.html.haml) | 0 | ||||
-rw-r--r-- | app/views/authorize_follows/error.html.haml (renamed from app/views/authorize_follow/error.html.haml) | 0 | ||||
-rw-r--r-- | app/views/authorize_follows/show.html.haml (renamed from app/views/authorize_follow/new.html.haml) | 0 |
5 files changed, 61 insertions, 45 deletions
diff --git a/app/controllers/authorize_follow_controller.rb b/app/controllers/authorize_follow_controller.rb deleted file mode 100644 index 9b28a9455..000000000 --- a/app/controllers/authorize_follow_controller.rb +++ /dev/null @@ -1,45 +0,0 @@ -# frozen_string_literal: true - -class AuthorizeFollowController < ApplicationController - layout 'public' - - before_action :authenticate_user! - - def new - uri = Addressable::URI.parse(acct_param).normalize - - if uri.path && %w(http https).include?(uri.scheme) - set_account_from_url - else - set_account_from_acct - end - - render :error if @account.nil? - end - - def create - @account = FollowService.new.call(current_account, acct_param).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 set_account_from_url - @account = FetchRemoteAccountService.new.call(acct_param) - end - - def set_account_from_acct - @account = FollowRemoteAccountService.new.call(acct_param) - end - - def acct_param - params[:acct].gsub(/\Aacct:/, '') - end -end 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 diff --git a/app/views/authorize_follow/_card.html.haml b/app/views/authorize_follows/_card.html.haml index ee76f628d..ee76f628d 100644 --- a/app/views/authorize_follow/_card.html.haml +++ b/app/views/authorize_follows/_card.html.haml diff --git a/app/views/authorize_follow/error.html.haml b/app/views/authorize_follows/error.html.haml index 88d33b68d..88d33b68d 100644 --- a/app/views/authorize_follow/error.html.haml +++ b/app/views/authorize_follows/error.html.haml diff --git a/app/views/authorize_follow/new.html.haml b/app/views/authorize_follows/show.html.haml index 3b60df058..3b60df058 100644 --- a/app/views/authorize_follow/new.html.haml +++ b/app/views/authorize_follows/show.html.haml |