54 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "db/mongo/models/key"
 | |
| require "fileutils"
 | |
| require "app/api2/parsers/key"
 | |
| require_relative "request_handler"
 | |
| 
 | |
| module Devops
 | |
|   module API2_0
 | |
|     module Handler
 | |
|       class Key < RequestHandler
 | |
| 
 | |
|         set_parser Devops::API2_0::Parser::KeyParser
 | |
| 
 | |
|         def keys
 | |
|           # Devops::Db.connector.keys({}, {path: false})
 | |
|           Devops::Db.connector.keys({})
 | |
|         end
 | |
| 
 | |
|         def create(keys_dir)
 | |
|           body = parser.create
 | |
|           fname = body["file_name"]
 | |
|           file_name = File.join(keys_dir, fname)
 | |
|           raise InvalidRecord.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.new({"path" => file_name, "id" => body["key_name"]})
 | |
|           Devops::Db.connector.key_insert key
 | |
|         end
 | |
| 
 | |
|         def delete key_id
 | |
|           mongo = Devops::Db.connector
 | |
|           servers = mongo.servers_by_key key_id
 | |
|           unless servers.empty?
 | |
|             s_str = servers.map{|s| s.id}.join(", ")
 | |
|             raise DependencyError.new "Deleting is forbidden: Key is used in servers: #{s_str}"
 | |
|           end
 | |
| 
 | |
|           k = mongo.key key_id
 | |
|           begin
 | |
|             FileUtils.rm(k.path)
 | |
|           rescue
 | |
|             DevopsLogger.logger.error "Missing key file for #{key_id} - #{k.filename}"
 | |
|           end
 | |
|           mongo.key_delete key_id
 | |
|         end
 | |
| 
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 |