From ab6696e855b58cdb2b6264c9acb0397dd7384e25 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 7 Mar 2016 12:42:33 +0100 Subject: Adding doorkeeper, adding a REST API POST /api/statuses Params: status (text contents), in_reply_to_id (optional) GET /api/statuses/:id POST /api/statuses/:id/reblog GET /api/accounts/:id GET /api/accounts/:id/following GET /api/accounts/:id/followers POST /api/accounts/:id/follow POST /api/accounts/:id/unfollow POST /api/follows Params: uri (e.g. user@domain) OAuth authentication is currently disabled, but the API can be used with HTTP Auth. --- app/controllers/accounts_controller.rb | 11 --------- app/controllers/api/accounts_controller.rb | 36 ++++++++++++++++++++++++++++ app/controllers/api/follows_controller.rb | 9 +++++++ app/controllers/api/statuses_controller.rb | 18 ++++++++++++++ app/controllers/api_controller.rb | 10 ++++++++ app/controllers/stream_entries_controller.rb | 16 ------------- 6 files changed, 73 insertions(+), 27 deletions(-) create mode 100644 app/controllers/api/accounts_controller.rb create mode 100644 app/controllers/api/follows_controller.rb create mode 100644 app/controllers/api/statuses_controller.rb (limited to 'app/controllers') diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 9e2e160b2..156926927 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -3,7 +3,6 @@ class AccountsController < ApplicationController before_action :set_account before_action :set_webfinger_header - before_action :authenticate_user!, only: [:follow, :unfollow] def show @statuses = @account.statuses.order('id desc').includes(thread: [:account], reblog: [:account], stream_entry: []) @@ -14,16 +13,6 @@ class AccountsController < ApplicationController end end - def follow - current_user.account.follow!(@account) - redirect_to root_path - end - - def unfollow - current_user.account.unfollow!(@account) - redirect_to root_path - end - private def set_account diff --git a/app/controllers/api/accounts_controller.rb b/app/controllers/api/accounts_controller.rb new file mode 100644 index 000000000..927fd86b7 --- /dev/null +++ b/app/controllers/api/accounts_controller.rb @@ -0,0 +1,36 @@ +class Api::AccountsController < ApiController + before_action :set_account + before_action :authenticate_user! + respond_to :json + + def show + end + + def following + @following = @account.following + end + + def followers + @followers = @account.followers + end + + def statuses + @statuses = @account.statuses + end + + def follow + @follow = current_user.account.follow!(@account) + render action: :show + end + + def unfollow + @unfollow = current_user.account.unfollow!(@account) + render action: :show + end + + private + + def set_account + @account = Account.find(params[:id]) + end +end diff --git a/app/controllers/api/follows_controller.rb b/app/controllers/api/follows_controller.rb new file mode 100644 index 000000000..acf627a07 --- /dev/null +++ b/app/controllers/api/follows_controller.rb @@ -0,0 +1,9 @@ +class Api::FollowsController < ApiController + before_action :authenticate_user! + respond_to :json + + def create + @follow = FollowService.new.(current_user.account, params[:uri]) + render action: :show + end +end diff --git a/app/controllers/api/statuses_controller.rb b/app/controllers/api/statuses_controller.rb new file mode 100644 index 000000000..872558f8e --- /dev/null +++ b/app/controllers/api/statuses_controller.rb @@ -0,0 +1,18 @@ +class Api::StatusesController < ApiController + before_action :authenticate_user! + respond_to :json + + def show + @status = Status.find(params[:id]) + end + + def create + @status = PostStatusService.new.(current_user.account, params[:status], params[:in_reply_to_id].blank? ? nil : Status.find(params[:in_reply_to_id])) + render action: :show + end + + def reblog + @status = ReblogService.new.(current_user.account, Status.find(params[:id])) + render action: :show + end +end diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index eb2e464eb..d24f63f27 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -1,3 +1,13 @@ class ApiController < ApplicationController protect_from_forgery with: :null_session + + protected + + def current_resource_owner + User.find(doorkeeper_token.user_id) if doorkeeper_token + end + + def current_user + super || current_resource_owner + end end diff --git a/app/controllers/stream_entries_controller.rb b/app/controllers/stream_entries_controller.rb index 293cc6d81..cbf7bfdff 100644 --- a/app/controllers/stream_entries_controller.rb +++ b/app/controllers/stream_entries_controller.rb @@ -3,8 +3,6 @@ class StreamEntriesController < ApplicationController before_action :set_account before_action :set_stream_entry - before_action :authenticate_user!, only: [:reblog, :favourite] - before_action :only_statuses!, only: [:reblog, :favourite] def show @type = @stream_entry.activity_type.downcase @@ -15,16 +13,6 @@ class StreamEntriesController < ApplicationController end end - def reblog - ReblogService.new.(current_user.account, @stream_entry.activity) - redirect_to root_path - end - - def favourite - FavouriteService.new.(current_user.account, @stream_entry.activity) - redirect_to root_path - end - private def set_account @@ -34,8 +22,4 @@ class StreamEntriesController < ApplicationController def set_stream_entry @stream_entry = @account.stream_entries.find(params[:id]) end - - def only_statuses! - redirect_to root_url unless @stream_entry.activity_type == 'Status' - end end -- cgit