fluke/devops-service/app/api2/handlers/key.rb

53 lines
1.4 KiB
Ruby
Raw Normal View History

2015-07-17 20:22:29 +03:00
require "db/mongo/models/key"
require "fileutils"
2015-07-30 15:37:43 +03:00
require "app/api2/parsers/key"
require_relative "request_handler"
2015-07-17 20:22:29 +03:00
2014-12-22 14:22:04 +03:00
module Devops
2015-07-17 20:22:29 +03:00
module API2_0
2014-12-22 14:22:04 +03:00
module Handler
2015-07-30 15:37:43 +03:00
class Key < RequestHandler
set_parser Devops::API2_0::Parser::KeyParser
2014-12-22 14:22:04 +03:00
2015-07-17 20:22:29 +03:00
def keys
2015-07-30 15:37:43 +03:00
Devops::Db.connector.keys({}, {path: false})
2014-12-22 14:22:04 +03:00
end
2015-07-30 15:37:43 +03:00
def create
body = parser.create
fname = body["file_name"]
file_name = File.join(settings.keys_dir, fname)
raise InvalidRecord.new("File '#{fname}' already exist") if File.exists?(file_name)
2015-07-17 20:22:29 +03:00
File.open(file_name, "w") do |f|
f.write(body["content"])
f.chmod(0400)
end
2014-12-22 14:22:04 +03:00
2015-07-17 20:22:29 +03:00
key = Devops::Model::Key.new({"path" => file_name, "id" => body["key_name"]})
2015-07-27 18:27:52 +03:00
Devops::Db.connector.key_insert key
2014-12-22 14:22:04 +03:00
end
2015-07-17 20:22:29 +03:00
def delete key_id
2015-07-27 18:27:52 +03:00
mongo = Devops::Db.connector
2015-07-30 15:37:43 +03:00
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
2014-12-22 14:22:04 +03:00
end
end
end
end
end