mirror of
https://github.com/mastodon/mastodon.git
synced 2025-03-23 08:39:57 +01:00
Add invite_code
to POST /api/v1/accounts
This commit is contained in:
parent
fa50876e10
commit
c01f13d04a
3 changed files with 50 additions and 16 deletions
|
@ -92,10 +92,14 @@ class Api::V1::AccountsController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def account_params
|
def account_params
|
||||||
params.permit(:username, :email, :password, :agreement, :locale, :reason, :time_zone)
|
params.permit(:username, :email, :password, :agreement, :locale, :reason, :time_zone, :invite_code)
|
||||||
|
end
|
||||||
|
|
||||||
|
def invite
|
||||||
|
Invite.find_by(code: params[:invite_code]) if params[:invite_code].present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_enabled_registrations
|
def check_enabled_registrations
|
||||||
forbidden unless allowed_registration?(request.remote_ip, nil)
|
forbidden unless allowed_registration?(request.remote_ip, invite)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,7 +8,7 @@ class AppSignUpService < BaseService
|
||||||
@remote_ip = remote_ip
|
@remote_ip = remote_ip
|
||||||
@params = params
|
@params = params
|
||||||
|
|
||||||
raise Mastodon::NotPermittedError unless allowed_registration?(remote_ip, nil)
|
raise Mastodon::NotPermittedError unless allowed_registration?(remote_ip, invite)
|
||||||
|
|
||||||
ApplicationRecord.transaction do
|
ApplicationRecord.transaction do
|
||||||
create_user!
|
create_user!
|
||||||
|
@ -36,8 +36,12 @@ class AppSignUpService < BaseService
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def invite
|
||||||
|
Invite.find_by(code: @params[:invite_code]) if @params[:invite_code].present?
|
||||||
|
end
|
||||||
|
|
||||||
def user_params
|
def user_params
|
||||||
@params.slice(:email, :password, :agreement, :locale, :time_zone)
|
@params.slice(:email, :password, :agreement, :locale, :time_zone, :invite_code)
|
||||||
end
|
end
|
||||||
|
|
||||||
def account_params
|
def account_params
|
||||||
|
|
|
@ -10,6 +10,23 @@ RSpec.describe AppSignUpService, type: :service do
|
||||||
let(:remote_ip) { IPAddr.new('198.0.2.1') }
|
let(:remote_ip) { IPAddr.new('198.0.2.1') }
|
||||||
|
|
||||||
describe '#call' do
|
describe '#call' do
|
||||||
|
let(:params) { good_params }
|
||||||
|
|
||||||
|
shared_examples 'successful registration' do
|
||||||
|
it 'creates an unconfirmed user with access token and the app\'s scope', :aggregate_failures do
|
||||||
|
access_token = subject.call(app, remote_ip, params)
|
||||||
|
expect(access_token).to_not be_nil
|
||||||
|
expect(access_token.scopes.to_s).to eq 'read write'
|
||||||
|
|
||||||
|
user = User.find_by(id: access_token.resource_owner_id)
|
||||||
|
expect(user).to_not be_nil
|
||||||
|
expect(user.confirmed?).to be false
|
||||||
|
|
||||||
|
expect(user.account).to_not be_nil
|
||||||
|
expect(user.invite_request).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when registrations are closed' do
|
context 'when registrations are closed' do
|
||||||
around do |example|
|
around do |example|
|
||||||
tmp = Setting.registrations_mode
|
tmp = Setting.registrations_mode
|
||||||
|
@ -23,24 +40,33 @@ RSpec.describe AppSignUpService, type: :service do
|
||||||
it 'raises an error', :aggregate_failures do
|
it 'raises an error', :aggregate_failures do
|
||||||
expect { subject.call(app, remote_ip, good_params) }.to raise_error Mastodon::NotPermittedError
|
expect { subject.call(app, remote_ip, good_params) }.to raise_error Mastodon::NotPermittedError
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when using a valid invite' do
|
||||||
|
let(:params) { good_params.merge({ invite_code: invite.code }) }
|
||||||
|
let(:invite) { Fabricate(:invite) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
invite.user.approve!
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like 'successful registration'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when using an invalid invite' do
|
||||||
|
let(:params) { good_params.merge({ invite_code: invite.code }) }
|
||||||
|
let(:invite) { Fabricate(:invite, uses: 1, max_uses: 1) }
|
||||||
|
|
||||||
|
it 'raises an error', :aggregate_failures do
|
||||||
|
expect { subject.call(app, remote_ip, params) }.to raise_error Mastodon::NotPermittedError
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'raises an error when params are missing' do
|
it 'raises an error when params are missing' do
|
||||||
expect { subject.call(app, remote_ip, {}) }.to raise_error ActiveRecord::RecordInvalid
|
expect { subject.call(app, remote_ip, {}) }.to raise_error ActiveRecord::RecordInvalid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates an unconfirmed user with access token and the app\'s scope', :aggregate_failures do
|
it_behaves_like 'successful registration'
|
||||||
access_token = subject.call(app, remote_ip, good_params)
|
|
||||||
expect(access_token).to_not be_nil
|
|
||||||
expect(access_token.scopes.to_s).to eq 'read write'
|
|
||||||
|
|
||||||
user = User.find_by(id: access_token.resource_owner_id)
|
|
||||||
expect(user).to_not be_nil
|
|
||||||
expect(user.confirmed?).to be false
|
|
||||||
|
|
||||||
expect(user.account).to_not be_nil
|
|
||||||
expect(user.invite_request).to be_nil
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when given an invite request text' do
|
context 'when given an invite request text' do
|
||||||
it 'creates an account with invite request text' do
|
it 'creates an account with invite request text' do
|
||||||
|
|
Loading…
Add table
Reference in a new issue