68 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | module Devops | ||
|  |   module API3 | ||
|  |     module Routes | ||
|  |       module UserRoutes | ||
|  | 
 | ||
|  |         def self.registered(app) | ||
|  | 
 | ||
|  |           app.define_policy :read_users, "Read users list" | ||
|  |           app.define_policy :create_users, "Create new users" | ||
|  |           app.define_policy :delete_users, "Delete users" | ||
|  | 
 | ||
|  |           app.get_with_headers "/users" do | ||
|  |             check_policy(:read_users) | ||
|  |             json Devops::API3::Handler::User.new(request).users.map(&:to_hash) | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers "/user" do | ||
|  |             check_policy(:create_users) | ||
|  |             user = Devops::API3::Handler::User.new(request).create | ||
|  |             create_response("Created", {id: user.id}, 201) | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers %r{\A/user/(#{Devops::Model::User::USER_NAME_REGEX})/roles/add\z} do |user| | ||
|  |             check_policy(:create_users) | ||
|  |             user = Devops::API3::Handler::User.new(request).add_roles(user) | ||
|  |             create_response("Updated", {id: user.id}, 200) | ||
|  |           end | ||
|  | 
 | ||
|  |           app.post_with_headers %r{\A/user/(#{Devops::Model::User::USER_NAME_REGEX})/roles/delete\z} do |user| | ||
|  |             check_policy(:create_users) | ||
|  |             user = Devops::API3::Handler::User.new(request).delete_roles(user) | ||
|  |             create_response("Updated", {id: user.id}, 200) | ||
|  |           end | ||
|  | 
 | ||
|  |           hash = {} | ||
|  |           hash["DELETE"] = lambda {|user| | ||
|  |             check_policy(:delete_users) | ||
|  |             Devops::API3::Handler::User.new(request).delete(user) | ||
|  |             create_response("User '#{user}' has been deleted", {id: user}) | ||
|  |           } | ||
|  | 
 | ||
|  |           hash["GET"] = lambda {|id| | ||
|  |             check_policy(:read_users) | ||
|  |             json Devops::API3::Handler::User.new(request).get_user(id).to_hash | ||
|  |           } | ||
|  |           hash["PUT"] = lambda {|id| | ||
|  |             check_policy(:create_users) | ||
|  |             Devops::API3::Handler::User.new(request).update_user(id) | ||
|  |             create_response("Updated", {id: id}) | ||
|  |           } | ||
|  |           app.multi_routes %r{\A/user/(#{Devops::Model::User::USER_NAME_REGEX})\z}, hash | ||
|  | 
 | ||
|  |           app.put_with_headers %r{\A/user/(#{Devops::Model::User::USER_NAME_REGEX})/(email|password)\z} do |user, action| | ||
|  |             current_user = request.env['REMOTE_USER'] | ||
|  |             check_policy(:create_users) unless current_user == user | ||
|  |             raise Devops::Exception::Unauthorized.new("Access denied for '#{current_user}'") if user == Devops::Model::User::ROOT_USER_NAME and current_user != Devops::Model::User::ROOT_USER_NAME | ||
|  |             Devops::API3::Handler::User.new(request).change(user, action) | ||
|  |             create_response("Updated", {id: user}) | ||
|  |           end | ||
|  | 
 | ||
|  |           puts "User routes initialized" | ||
|  |         end | ||
|  | 
 | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end |