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