diff options
author | ThibG <thib@sitedethib.com> | 2018-08-18 18:22:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-18 18:22:54 +0200 |
commit | 44e31c3e531e5c206003b7ed83ee1d6fdd3b2b53 (patch) | |
tree | e9d1366c30b94df21ec767276fbde175428399fb /app/controllers/authorize_interactions_controller.rb | |
parent | 7423c0c1308555db3072ae64141250fdd33ce235 (diff) | |
parent | bfeac6747a58b660f0d1b3766c7cfb3ea2655fce (diff) |
Merge pull request #649 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
Diffstat (limited to 'app/controllers/authorize_interactions_controller.rb')
-rw-r--r-- | app/controllers/authorize_interactions_controller.rb | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/app/controllers/authorize_interactions_controller.rb b/app/controllers/authorize_interactions_controller.rb new file mode 100644 index 000000000..20b3fa94b --- /dev/null +++ b/app/controllers/authorize_interactions_controller.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +class AuthorizeInteractionsController < ApplicationController + include Authorization + + layout 'modal' + + before_action :authenticate_user! + before_action :set_body_classes + before_action :set_resource + before_action :set_pack + + def show + if @resource.is_a?(Account) + render :show + elsif @resource.is_a?(Status) + redirect_to web_url("statuses/#{@resource.id}") + else + render :error + end + end + + def create + if @resource.is_a?(Account) && FollowService.new.call(current_account, @resource) + render :success + else + render :error + end + rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError + render :error + end + + private + + def set_resource + @resource = located_resource || render(:error) + authorize(@resource, :show?) if @resource.is_a?(Status) + end + + def located_resource + if uri_param_is_url? + ResolveURLService.new.call(uri_param) + else + account_from_remote_follow + end + end + + def account_from_remote_follow + ResolveAccountService.new.call(uri_param) + end + + def uri_param_is_url? + parsed_uri.path && %w(http https).include?(parsed_uri.scheme) + end + + def parsed_uri + Addressable::URI.parse(uri_param).normalize + end + + def uri_param + params[:uri] || params.fetch(:acct, '').gsub(/\Aacct:/, '') + end + + def set_body_classes + @body_classes = 'modal-layout' + end + + def set_pack + use_pack 'modal' + end +end |