Class: ConfConf::Project::Environment::Storage
- Inherits:
-
Object
- Object
- ConfConf::Project::Environment::Storage
- Defined in:
- lib/conf_conf/project/environment/storage.rb
Class Method Summary collapse
- .load_project_environment(project, environment_name) ⇒ Object
- .save_project_environment(project, environment) ⇒ Object
Class Method Details
.load_project_environment(project, environment_name) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/conf_conf/project/environment/storage.rb', line 7 def self.load_project_environment(project, environment_name) current_developer = ConfConf::Project::Developer.current environment_config_file_path = File.join('config', 'conf_conf', 'environments', "#{environment_name}.json") if File.exists?(environment_config_file_path) environment_config = MultiJson.load(File.read(environment_config_file_path)) environment_schema = environment_config['schema'] = [environment_config['author_public_key']].unpack('H*') encrypted_environment_secret_key = environment_config['encrypted_environment_secret_key'][current_developer.pretty_public_key] raise NotAuthorizedError if encrypted_environment_secret_key.nil? box = RbNaCl::SimpleBox.from_keypair(, current_developer.private_key) environment_secret_key = box.decrypt(encrypted_environment_secret_key) box = RbNaCl::SimpleBox.from_secret_key(environment_secret_key) decrypted_environment_variables_json = box.decrypt(Base64.strict_decode64(environment_config["encrypted_environment"])) environment_variables = MultiJson.load(decrypted_environment_variables_json) else environment_variables = {} environment_schema = {} end Environment.new(project, environment_name, environment_variables, environment_schema) end |
.save_project_environment(project, environment) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/conf_conf/project/environment/storage.rb', line 34 def self.save_project_environment(project, environment) = ConfConf::Project::Developer.current environment_config = {} environment_config[:author_public_key] = .pretty_public_key environment_config[:schema] = environment.schema environment_secret_key = RbNaCl::Random.random_bytes(RbNaCl::SecretBox.key_bytes) project.developers.add() environment_config[:encrypted_environment_secret_key] = project.developers.to_a.inject({}) do |keys,developer| box = RbNaCl::SimpleBox.from_keypair(developer.public_key, .private_key) keys[developer.pretty_public_key] = box.encrypt(environment_secret_key); keys end box = RbNaCl::SimpleBox.from_secret_key(environment_secret_key) environment_config[:encrypted_environment] = Base64.strict_encode64(box.encrypt(MultiJson.dump(environment.variables))) environment_config_file_path = File.join('config', 'conf_conf', 'environments', "#{environment.name}.json") File.write(environment_config_file_path, MultiJson.dump(environment_config)) end |