57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require "db/mongo/models/key" | ||
|  | require "fileutils" | ||
|  | require "app/api3/parsers/key" | ||
|  | require_relative "request_handler" | ||
|  | 
 | ||
|  | module Devops | ||
|  |   module API3 | ||
|  |     module Handler | ||
|  |       class Key < RequestHandler | ||
|  | 
 | ||
|  |         set_parser Devops::API3::Parser::KeyParser | ||
|  | 
 | ||
|  |         def keys | ||
|  |           Devops::Model::Key.all | ||
|  |         end | ||
|  | 
 | ||
|  |         def key id | ||
|  |           Devops::Model::Key.find(id) | ||
|  |         rescue Mongoid::Errors::DocumentNotFound | ||
|  |           raise Devops::Exception::RecordNotFound.new("Key with id '#{id}' not found") | ||
|  |         end | ||
|  | 
 | ||
|  |         def create(keys_dir) | ||
|  |           body = parser.create | ||
|  |           fname = body["file_name"] | ||
|  |           file_name = File.join(keys_dir, fname) | ||
|  |           raise Devops::Exception::ValidationError.new("File '#{fname}' already exist") if File.exists?(file_name) | ||
|  |           File.open(file_name, "w") do |f| | ||
|  |             f.write(body["content"]) | ||
|  |             f.chmod(0400) | ||
|  |           end | ||
|  | 
 | ||
|  |           key = Devops::Model::Key.create!({"path" => file_name, "id" => body["key_name"]}) | ||
|  |           DevopsLogger.logger.info "Key '#{key.id}' has been created" | ||
|  |           key | ||
|  |         end | ||
|  | 
 | ||
|  |         def delete key_id | ||
|  |           k = key(key_id) | ||
|  |           servers = [] | ||
|  |           Devops::Model::Server.where(key: k.id).each do |s| | ||
|  |             servers << s.id | ||
|  |           end | ||
|  |           unless servers.empty? | ||
|  |             s_str = servers.join(", ") | ||
|  |             raise DependencyError.new "Deleting is forbidden: Key is used in servers: #{s_str}" | ||
|  |           end | ||
|  |           k.destroy | ||
|  |           DevopsLogger.logger.info "Key '#{k.id}' has been deleted" | ||
|  |         end | ||
|  | 
 | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end | ||
|  | 
 |