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
 | |
| 
 | 
