aboutsummaryrefslogtreecommitdiff
path: root/app/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/api/v1/statuses/favourites_controller.rb38
-rw-r--r--app/controllers/api/v1/statuses/mutes_controller.rb41
-rw-r--r--app/controllers/api/v1/statuses/reblogs_controller.rb35
-rw-r--r--app/controllers/api/v1/statuses_controller.rb59
4 files changed, 117 insertions, 56 deletions
diff --git a/app/controllers/api/v1/statuses/favourites_controller.rb b/app/controllers/api/v1/statuses/favourites_controller.rb
new file mode 100644
index 000000000..b6fb13cc0
--- /dev/null
+++ b/app/controllers/api/v1/statuses/favourites_controller.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+class Api::V1::Statuses::FavouritesController < Api::BaseController
+ include Authorization
+
+ before_action -> { doorkeeper_authorize! :write }
+ before_action :require_user!
+
+ respond_to :json
+
+ def create
+ @status = favourited_status
+ render 'api/v1/statuses/show'
+ end
+
+ def destroy
+ @status = requested_status
+ @favourites_map = { @status.id => false }
+
+ UnfavouriteWorker.perform_async(current_user.account_id, @status.id)
+
+ render 'api/v1/statuses/show'
+ end
+
+ private
+
+ def favourited_status
+ service_result.status.reload
+ end
+
+ def service_result
+ FavouriteService.new.call(current_user.account, requested_status)
+ end
+
+ def requested_status
+ Status.find(params[:status_id])
+ end
+end
diff --git a/app/controllers/api/v1/statuses/mutes_controller.rb b/app/controllers/api/v1/statuses/mutes_controller.rb
new file mode 100644
index 000000000..eab88f2ef
--- /dev/null
+++ b/app/controllers/api/v1/statuses/mutes_controller.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+class Api::V1::Statuses::MutesController < Api::BaseController
+ include Authorization
+
+ before_action -> { doorkeeper_authorize! :write }
+ before_action :require_user!
+ before_action :set_status
+ before_action :set_conversation
+
+ respond_to :json
+
+ def create
+ current_account.mute_conversation!(@conversation)
+ @mutes_map = { @conversation.id => true }
+
+ render 'api/v1/statuses/show'
+ end
+
+ def destroy
+ current_account.unmute_conversation!(@conversation)
+ @mutes_map = { @conversation.id => false }
+
+ render 'api/v1/statuses/show'
+ end
+
+ private
+
+ def set_status
+ @status = Status.find(params[:status_id])
+ authorize @status, :show?
+ rescue Mastodon::NotPermittedError
+ # Reraise in order to get a 404 instead of a 403 error code
+ raise ActiveRecord::RecordNotFound
+ end
+
+ def set_conversation
+ @conversation = @status.conversation
+ raise Mastodon::ValidationError if @conversation.nil?
+ end
+end
diff --git a/app/controllers/api/v1/statuses/reblogs_controller.rb b/app/controllers/api/v1/statuses/reblogs_controller.rb
new file mode 100644
index 000000000..ee9c5b3a6
--- /dev/null
+++ b/app/controllers/api/v1/statuses/reblogs_controller.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+class Api::V1::Statuses::ReblogsController < Api::BaseController
+ include Authorization
+
+ before_action -> { doorkeeper_authorize! :write }
+ before_action :require_user!
+
+ respond_to :json
+
+ def create
+ @status = ReblogService.new.call(current_user.account, status_for_reblog)
+ render 'api/v1/statuses/show'
+ end
+
+ def destroy
+ @status = status_for_destroy.reblog
+ @reblogs_map = { @status.id => false }
+
+ authorize status_for_destroy, :unreblog?
+ RemovalWorker.perform_async(status_for_destroy.id)
+
+ render 'api/v1/statuses/show'
+ end
+
+ private
+
+ def status_for_reblog
+ Status.find params[:status_id]
+ end
+
+ def status_for_destroy
+ current_user.account.statuses.where(reblog_of_id: params[:status_id]).first!
+ end
+end
diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb
index 7227a6536..9aa1cbc4d 100644
--- a/app/controllers/api/v1/statuses_controller.rb
+++ b/app/controllers/api/v1/statuses_controller.rb
@@ -3,11 +3,10 @@
class Api::V1::StatusesController < Api::BaseController
include Authorization
- before_action :authorize_if_got_token, except: [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite, :mute, :unmute]
- before_action -> { doorkeeper_authorize! :write }, only: [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite, :mute, :unmute]
+ before_action :authorize_if_got_token, except: [:create, :destroy]
+ before_action -> { doorkeeper_authorize! :write }, only: [:create, :destroy]
before_action :require_user!, except: [:show, :context, :card]
- before_action :set_status, only: [:show, :context, :card, :mute, :unmute]
- before_action :set_conversation, only: [:mute, :unmute]
+ before_action :set_status, only: [:show, :context, :card]
respond_to :json
@@ -56,53 +55,6 @@ class Api::V1::StatusesController < Api::BaseController
render_empty
end
- def reblog
- @status = ReblogService.new.call(current_user.account, Status.find(params[:id]))
- render :show
- end
-
- def unreblog
- reblog = Status.where(account_id: current_user.account, reblog_of_id: params[:id]).first!
- @status = reblog.reblog
- @reblogs_map = { @status.id => false }
-
- authorize reblog, :unreblog?
-
- RemovalWorker.perform_async(reblog.id)
-
- render :show
- end
-
- def favourite
- @status = FavouriteService.new.call(current_user.account, Status.find(params[:id])).status.reload
- render :show
- end
-
- def unfavourite
- @status = Status.find(params[:id])
- @favourites_map = { @status.id => false }
-
- UnfavouriteWorker.perform_async(current_user.account_id, @status.id)
-
- render :show
- end
-
- def mute
- current_account.mute_conversation!(@conversation)
-
- @mutes_map = { @conversation.id => true }
-
- render :show
- end
-
- def unmute
- current_account.unmute_conversation!(@conversation)
-
- @mutes_map = { @conversation.id => false }
-
- render :show
- end
-
private
def set_status
@@ -113,11 +65,6 @@ class Api::V1::StatusesController < Api::BaseController
raise ActiveRecord::RecordNotFound
end
- def set_conversation
- @conversation = @status.conversation
- raise Mastodon::ValidationError if @conversation.nil?
- end
-
def status_params
params.permit(:status, :in_reply_to_id, :sensitive, :spoiler_text, :visibility, media_ids: [])
end