|
@@ -2,23 +2,67 @@
|
|
|
|
|
|
class AppSignUpService < BaseService
|
|
|
def call(app, remote_ip, params)
|
|
|
- return unless allowed_registrations?
|
|
|
+ @app = app
|
|
|
+ @remote_ip = remote_ip
|
|
|
+ @params = params
|
|
|
|
|
|
- user_params = params.slice(:email, :password, :agreement, :locale)
|
|
|
- account_params = params.slice(:username)
|
|
|
- invite_request_params = { text: params[:reason] }
|
|
|
- user = User.create!(user_params.merge(created_by_application: app, sign_up_ip: remote_ip, password_confirmation: user_params[:password], account_attributes: account_params, invite_request_attributes: invite_request_params))
|
|
|
+ raise Mastodon::NotPermittedError unless allowed_registrations?
|
|
|
|
|
|
- Doorkeeper::AccessToken.create!(application: app,
|
|
|
- resource_owner_id: user.id,
|
|
|
- scopes: app.scopes,
|
|
|
- expires_in: Doorkeeper.configuration.access_token_expires_in,
|
|
|
- use_refresh_token: Doorkeeper.configuration.refresh_token_enabled?)
|
|
|
+ ApplicationRecord.transaction do
|
|
|
+ create_user!
|
|
|
+ create_access_token!
|
|
|
+ end
|
|
|
+
|
|
|
+ @access_token
|
|
|
end
|
|
|
|
|
|
private
|
|
|
|
|
|
+ def create_user!
|
|
|
+ @user = User.create!(
|
|
|
+ user_params.merge(created_by_application: @app, sign_up_ip: @remote_ip, password_confirmation: user_params[:password], account_attributes: account_params, invite_request_attributes: invite_request_params)
|
|
|
+ )
|
|
|
+ end
|
|
|
+
|
|
|
+ def create_access_token!
|
|
|
+ @access_token = Doorkeeper::AccessToken.create!(
|
|
|
+ application: @app,
|
|
|
+ resource_owner_id: @user.id,
|
|
|
+ scopes: @app.scopes,
|
|
|
+ expires_in: Doorkeeper.configuration.access_token_expires_in,
|
|
|
+ use_refresh_token: Doorkeeper.configuration.refresh_token_enabled?
|
|
|
+ )
|
|
|
+ end
|
|
|
+
|
|
|
+ def user_params
|
|
|
+ @params.slice(:email, :password, :agreement, :locale)
|
|
|
+ end
|
|
|
+
|
|
|
+ def account_params
|
|
|
+ @params.slice(:username)
|
|
|
+ end
|
|
|
+
|
|
|
+ def invite_request_params
|
|
|
+ { text: @params[:reason] }
|
|
|
+ end
|
|
|
+
|
|
|
def allowed_registrations?
|
|
|
- Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode
|
|
|
+ registrations_open? && !single_user_mode? && !omniauth_only? && !ip_blocked?
|
|
|
+ end
|
|
|
+
|
|
|
+ def registrations_open?
|
|
|
+ Setting.registrations_mode != 'none'
|
|
|
+ end
|
|
|
+
|
|
|
+ def single_user_mode?
|
|
|
+ Rails.configuration.x.single_user_mode
|
|
|
+ end
|
|
|
+
|
|
|
+ def omniauth_only?
|
|
|
+ ENV['OMNIAUTH_ONLY'] == 'true'
|
|
|
+ end
|
|
|
+
|
|
|
+ def ip_blocked?
|
|
|
+ IpBlock.where(severity: :sign_up_block).where('ip >>= ?', @remote_ip.to_s).exists?
|
|
|
end
|
|
|
end
|