lib/onboardbase.rb in onboardbase-1.2.1 vs lib/onboardbase.rb in onboardbase-1.2.2

- old
+ new

@@ -116,14 +116,15 @@ query { generalPublicProjects(filterOptions: { title: "#{self .configuration['setup']['project']}", disableCustomSelect: true }) { list { id title - publicEnvironments(filterOptions: { title: "#{self .configuration['setup']['environment']}" }) { + publicSecrets(filterOptions: { environmentTitle: "#{self .configuration['setup']['environment']}" }, take: 1000, skip: 0) { list { id key + value title } } } } @@ -147,12 +148,12 @@ false end def getSecrets?(project) - env = project["publicEnvironments"]["list"][0] - return JSON.parse(env["key"]) if env != nil + env = project["publicSecrets"]["list"] + return env if env != nil false end def bytes_to_key(data, salt, output=48) merged = data + salt @@ -164,33 +165,40 @@ end final_key[0..output-1] end def aes256_cbc_decrypt(key, data, iv) + # p key key = Digest::SHA256.digest(key) if(key.kind_of?(String) && 32 != key.bytesize) iv = Digest::MD5.digest(iv) if(iv.kind_of?(String) && 16 != iv.bytesize) aes = OpenSSL::Cipher.new('AES-256-CBC') aes.decrypt aes.key = key aes.iv = iv aes.update(data) + aes.final end + def decodeCipher(cipher, secretPhrase) + secret = Base64.decode64(cipher) + unless secret[0..7] == 'Salted__' + puts "Invalid encrypted data" + exit(1) + end + salt = secret[8..15] + key_iv = bytes_to_key(secretPhrase, salt, 48) + key = key_iv[0..31] + iv = key_iv[32..key_iv.length-1] + aes256_cbc_decrypt(key, secret[16..secret.length-1], iv) + end def parseSecrets(secrets) - secrets.each_with_index do |secret, i| - secret = Base64.decode64(secret) - unless secret[0..7] == 'Salted__' - puts "Invalid encrypted data" - exit(1) - end - salt = secret[8..15] - key_iv = bytes_to_key(self.configuration["passcode"], salt, 48) - key = key_iv[0..31] - iv = key_iv[32..key_iv.length-1] - parsedSecret = aes256_cbc_decrypt(key, secret[16..secret.length-1], iv) - secrets[i] = JSON.parse(parsedSecret) - end - secrets + passcode = self.configuration["passcode"] + secrets.each_with_index do |secret, i| + + secret["key"] = self.decodeCipher(secret["key"], passcode) + secret["value"] = self.decodeCipher(secret["value"], passcode) + secrets[i] = secret + end + secrets end def setEnv(secretsHash) secretsHash.keys.sort.each do |key| ENV[key.to_s] = "#{secretsHash[key.to_s]}" \ No newline at end of file