Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion src/api/app/controllers/person_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,20 @@ class PersonController < ApplicationController
before_action :require_admin, only: [:post_userinfo], if: -> { %w[delete lock].include?(params[:cmd]) }

def show
if params.key?(:confirmed)
allowed = %w[true false 1 0]

unless allowed.include?(params[:confirmed].to_s)
return render_error(
status: 400,
errorcode: 'invalid_parameter',
message: "Invalid value for 'confirmed'. Allowed values: #{allowed.join(', ')}"
)
end
end
@list = if params[:prefix]
User.where('login LIKE ?', "#{params[:prefix]}%")
elsif params[:confirmed]
elsif %w[true 1].include?(params[:confirmed].to_s)
User.confirmed
else
User.not_deleted
Expand Down
30 changes: 30 additions & 0 deletions src/api/test/functional/person_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,36 @@ def test_index
assert_response :success
end

def test_confirmed_param_validation
login_adrian

# valid: true
get '/person?confirmed=true'
assert_response :success

# valid: false
get '/person?confirmed=false'
assert_response :success

# valid: numeric true
get '/person?confirmed=1'
assert_response :success

# valid: numeric false
get '/person?confirmed=0'
assert_response :success

# invalid: random string
get '/person?confirmed=abc'
assert_response :bad_request
assert_xml_tag tag: 'status', attributes: { code: 'invalid_parameter' }

# invalid: empty value
get '/person?confirmed='
assert_response :bad_request
assert_xml_tag tag: 'status', attributes: { code: 'invalid_parameter' }
end

def test_ichain
login_adrian
get '/person/tom', headers: { 'username' => 'fred' }
Expand Down