69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "db/mongo/models/user"
 | |
| require "app/api3/parsers/user"
 | |
| require_relative "request_handler"
 | |
| 
 | |
| module Devops
 | |
|   module API3
 | |
|     module Handler
 | |
|       class User < RequestHandler
 | |
| 
 | |
|         set_parser Devops::API3::Parser::UserParser
 | |
| 
 | |
|         def users
 | |
|           Devops::Model::User.all
 | |
|         end
 | |
| 
 | |
|         def create
 | |
|           Devops::Model::User.create! parser.create
 | |
|         end
 | |
| 
 | |
|         def get_user id
 | |
|           Devops::Model::User.find(id)
 | |
|         rescue Mongoid::Errors::DocumentNotFound
 | |
|           raise Devops::Exception::RecordNotFound.new("User with id '#{id}' not found")
 | |
|         end
 | |
| 
 | |
|         def delete user_id
 | |
|           user = get_user(user_id)
 | |
|           projects = Devops::Model::Project.find({'environments.users' => user_id})
 | |
|           str = ""
 | |
|           projects.each do |p|
 | |
|             p.environments.each do |e|
 | |
|               str+="#{p.id}.#{e.id} " if e.users.include? user_id
 | |
|             end
 | |
|           end
 | |
|           raise Devops::Exception::ConflictError.new "Deleting is forbidden: User is included in #{str}"
 | |
|         rescue Mongoid::Errors::DocumentNotFound
 | |
|           user.delete
 | |
|         end
 | |
| 
 | |
|         def add_roles id
 | |
|           user = get_user(id)
 | |
|           user.add_to_set({roles: parser.roles})
 | |
|         end
 | |
| 
 | |
|         def delete_roles id
 | |
|           user = get_user(id)
 | |
|           user.pull_all({roles: parser.roles})
 | |
|         end
 | |
| 
 | |
|         def change user_id, action
 | |
|           user = get_user(user_id)
 | |
|           user.send action + "=", parser.change(action)
 | |
|           user.save!
 | |
|         end
 | |
| 
 | |
|         def update_user id
 | |
|           user = get_user(id)
 | |
|           obj = parser.update_user
 | |
|           %w(email password roles).each do |key|
 | |
|             user.send(key + "=", obj[key]) if obj.key?(key)
 | |
|           end
 | |
|           user.save!
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | 
