| 
									
										
										
										
											2016-11-15 09:56:29 -06:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-07 13:09:25 -05:00
										 |  |  | class Api::V1::AccountsController < Api::BaseController | 
					
						
							| 
									
										
										
										
											2018-12-24 12:12:38 -06:00
										 |  |  |   before_action -> { authorize_if_got_token! :read, :'read:accounts' }, except: [:create, :follow, :unfollow, :block, :unblock, :mute, :unmute] | 
					
						
							| 
									
										
										
										
											2018-07-05 11:31:35 -05:00
										 |  |  |   before_action -> { doorkeeper_authorize! :follow, :'write:follows' }, only: [:follow, :unfollow] | 
					
						
							|  |  |  |   before_action -> { doorkeeper_authorize! :follow, :'write:mutes' }, only: [:mute, :unmute] | 
					
						
							|  |  |  |   before_action -> { doorkeeper_authorize! :follow, :'write:blocks' }, only: [:block, :unblock] | 
					
						
							| 
									
										
										
										
											2018-12-24 12:12:38 -06:00
										 |  |  |   before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, only: [:create] | 
					
						
							| 
									
										
										
										
											2018-07-05 11:31:35 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-24 12:12:38 -06:00
										 |  |  |   before_action :require_user!, except: [:show, :create] | 
					
						
							|  |  |  |   before_action :set_account, except: [:create] | 
					
						
							| 
									
										
										
										
											2018-04-30 02:12:36 -05:00
										 |  |  |   before_action :check_account_suspension, only: [:show] | 
					
						
							| 
									
										
										
										
											2018-12-24 12:12:38 -06:00
										 |  |  |   before_action :check_enabled_registrations, only: [:create] | 
					
						
							| 
									
										
										
										
											2016-11-08 16:22:44 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-09 10:48:44 -06:00
										 |  |  |   respond_to :json | 
					
						
							| 
									
										
										
										
											2016-03-07 05:42:33 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-06 21:02:06 -05:00
										 |  |  |   def show | 
					
						
							|  |  |  |     render json: @account, serializer: REST::AccountSerializer | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-03-07 05:42:33 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-24 12:12:38 -06:00
										 |  |  |   def create | 
					
						
							|  |  |  |     token    = AppSignUpService.new.call(doorkeeper_token.application, account_params) | 
					
						
							|  |  |  |     response = Doorkeeper::OAuth::TokenResponse.new(token) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     headers.merge!(response.headers) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     self.response_body = Oj.dump(response.body) | 
					
						
							|  |  |  |     self.status        = response.status | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-07 05:42:33 -06:00
										 |  |  |   def follow | 
					
						
							| 
									
										
										
										
											2018-11-08 14:05:42 -06:00
										 |  |  |     FollowService.new.call(current_user.account, @account, reblogs: truthy_param?(:reblogs)) | 
					
						
							| 
									
										
										
										
											2017-09-05 10:48:13 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:47:59 -06:00
										 |  |  |     options = @account.locked? ? {} : { following_map: { @account.id => { reblogs: truthy_param?(:reblogs) } }, requested_map: { @account.id => false } } | 
					
						
							| 
									
										
										
										
											2017-09-05 10:48:13 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-11 16:50:37 -05:00
										 |  |  |     render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(options) | 
					
						
							| 
									
										
										
										
											2016-10-03 11:17:06 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def block | 
					
						
							| 
									
										
										
										
											2017-01-24 14:40:41 -06:00
										 |  |  |     BlockService.new.call(current_user.account, @account) | 
					
						
							| 
									
										
										
										
											2017-07-06 21:02:06 -05:00
										 |  |  |     render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships | 
					
						
							| 
									
										
										
										
											2016-03-07 05:42:33 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-05 19:51:56 -06:00
										 |  |  |   def mute | 
					
						
							| 
									
										
										
										
											2018-02-28 19:47:59 -06:00
										 |  |  |     MuteService.new.call(current_user.account, @account, notifications: truthy_param?(:notifications)) | 
					
						
							| 
									
										
										
										
											2017-07-06 21:02:06 -05:00
										 |  |  |     render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships | 
					
						
							| 
									
										
										
										
											2017-02-05 19:51:56 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-07 05:42:33 -06:00
										 |  |  |   def unfollow | 
					
						
							| 
									
										
										
										
											2016-10-03 11:17:06 -05:00
										 |  |  |     UnfollowService.new.call(current_user.account, @account) | 
					
						
							| 
									
										
										
										
											2017-07-06 21:02:06 -05:00
										 |  |  |     render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships | 
					
						
							| 
									
										
										
										
											2016-10-03 11:17:06 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def unblock | 
					
						
							|  |  |  |     UnblockService.new.call(current_user.account, @account) | 
					
						
							| 
									
										
										
										
											2017-07-06 21:02:06 -05:00
										 |  |  |     render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships | 
					
						
							| 
									
										
										
										
											2016-03-07 05:42:33 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-05 19:51:56 -06:00
										 |  |  |   def unmute | 
					
						
							|  |  |  |     UnmuteService.new.call(current_user.account, @account) | 
					
						
							| 
									
										
										
										
											2017-07-06 21:02:06 -05:00
										 |  |  |     render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships | 
					
						
							| 
									
										
										
										
											2017-02-05 19:51:56 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-07 05:42:33 -06:00
										 |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def set_account | 
					
						
							|  |  |  |     @account = Account.find(params[:id]) | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-09-23 13:23:26 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 04:41:57 -06:00
										 |  |  |   def relationships(**options) | 
					
						
							| 
									
										
										
										
											2017-09-11 16:50:37 -05:00
										 |  |  |     AccountRelationshipsPresenter.new([@account.id], current_user.account_id, options) | 
					
						
							| 
									
										
										
										
											2016-09-23 13:23:26 -05:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2018-04-30 02:12:36 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def check_account_suspension | 
					
						
							|  |  |  |     gone if @account.suspended? | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2018-12-24 12:12:38 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def account_params | 
					
						
							| 
									
										
										
										
											2019-01-07 07:50:20 -06:00
										 |  |  |     params.permit(:username, :email, :password, :agreement, :locale) | 
					
						
							| 
									
										
										
										
											2018-12-24 12:12:38 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def check_enabled_registrations | 
					
						
							| 
									
										
										
										
											2019-03-13 23:28:30 -05:00
										 |  |  |     forbidden if single_user_mode? || !allowed_registrations? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def allowed_registrations? | 
					
						
							|  |  |  |     Setting.registrations_mode != 'none' | 
					
						
							| 
									
										
										
										
											2018-12-24 12:12:38 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-03-07 05:42:33 -06:00
										 |  |  | end |