Commit 6f55bd04c7afb1243a19c871791d099f7dbad4e4

Authored by Spencer Alan
1 parent cfcc3aa5
Exists in master

• add determinate order

• change update method names
• update status after user creation
app/controllers/scim_rails/scim_users_controller.rb
@@ -4,10 +4,13 @@ module ScimRails @@ -4,10 +4,13 @@ module ScimRails
4 if params[:filter].present? 4 if params[:filter].present?
5 query = ScimRails::ScimQueryParser.new(params[:filter]) 5 query = ScimRails::ScimQueryParser.new(params[:filter])
6 6
7 - users = @company.public_send(ScimRails.config.scim_users_scope).where(  
8 - "#{ScimRails.config.scim_users_model.connection.quote_column_name(query.attribute)} #{query.operator} ?",  
9 - query.parameter  
10 - ) 7 + users = @company
  8 + .public_send(ScimRails.config.scim_users_scope)
  9 + .where(
  10 + "#{ScimRails.config.scim_users_model.connection.quote_column_name(query.attribute)} #{query.operator} ?",
  11 + query.parameter
  12 + )
  13 + .order(ScimRails.config.scim_users_list_order)
11 14
12 counts = ScimCount.new( 15 counts = ScimCount.new(
13 start_index: params[:startIndex], 16 start_index: params[:startIndex],
@@ -16,22 +19,22 @@ module ScimRails @@ -16,22 +19,22 @@ module ScimRails
16 ) 19 )
17 json_scim_response(object: users, counts: counts) 20 json_scim_response(object: users, counts: counts)
18 else 21 else
19 - users = @company.public_send(ScimRails.config.scim_users_scope) 22 + users = @company
  23 + .public_send(ScimRails.config.scim_users_scope)
  24 + .order(ScimRails.config.scim_users_list_order)
20 25
21 counts = ScimCount.new( 26 counts = ScimCount.new(
22 start_index: params[:startIndex], 27 start_index: params[:startIndex],
23 limit: params[:count], 28 limit: params[:count],
24 total: users.count 29 total: users.count
25 ) 30 )
26 -  
27 json_scim_response(object: users, counts: counts) 31 json_scim_response(object: users, counts: counts)
28 end 32 end
29 end 33 end
30 34
31 def create 35 def create
32 - user = @company.public_send(ScimRails.config.scim_users_scope).new  
33 - user.create!(permitted_user_params)  
34 - 36 + user = @company.public_send(ScimRails.config.scim_users_scope).create!(permitted_user_params)
  37 + update_status(user) unless params[:active].nil?
35 json_scim_response(object: user, status: :created) 38 json_scim_response(object: user, status: :created)
36 end 39 end
37 40
@@ -40,16 +43,19 @@ module ScimRails @@ -40,16 +43,19 @@ module ScimRails
40 json_scim_response(object: user) 43 json_scim_response(object: user)
41 end 44 end
42 45
43 - def update 46 + def put_update
44 user = @company.public_send(ScimRails.config.scim_users_scope).find(params[:id]) 47 user = @company.public_send(ScimRails.config.scim_users_scope).find(params[:id])
45 update_status(user) unless params[:active].nil? 48 update_status(user) unless params[:active].nil?
46 user.update!(permitted_user_params) 49 user.update!(permitted_user_params)
47 json_scim_response(object: user) 50 json_scim_response(object: user)
48 end 51 end
49 52
50 - def deprovision 53 + # TODO: PATCH will only deprovision users regardless of params.
  54 + # This will work just fine for Okta but is not SCIM compliant.
  55 + def patch_update
51 user = @company.public_send(ScimRails.config.scim_users_scope).find(params[:id]) 56 user = @company.public_send(ScimRails.config.scim_users_scope).find(params[:id])
52 - update_status(user) unless params[:active].nil? 57 + params[:active] = false
  58 + update_status(user)
53 json_scim_response(object: user) 59 json_scim_response(object: user)
54 end 60 end
55 61