0
0
Fork 0

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.
This commit is contained in:
Eugen Rochko 2016-03-07 12:42:33 +01:00
parent 3824c58853
commit ab6696e855
54 changed files with 847 additions and 61 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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