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