Class: Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/registry.rb

Instance Method Summary collapse

Instance Method Details

#deleteDirectory(root) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/registry.rb', line 73

def deleteDirectory (root)
     uri = URI.parse(ENV["CONSUL_URL"] + "/v1/kv/#{root}?recurse=true")
     http = prepareHttp(uri)

     request = Net::HTTP::Delete.new(uri.request_uri)
     resp = http.request(request)

     if Integer(resp.code) != 200
         puts "-- KEY NOT DELETED! " + root
         abort("Response code #{resp.code}")
     end
end

#exists(key) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/registry.rb', line 59

def exists (key)
     uri = URI.parse(ENV["CONSUL_URL"] + "/v1/kv/#{key}")
     http = prepareHttp(uri)

     request = Net::HTTP::Get.new(uri.request_uri)
     resp = http.request(request)

     if Integer(resp.code) == 200
         return true
     else
         return false
     end
end

#getKeyValue(key) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/registry.rb', line 27

def getKeyValue (key)

     uri = URI.parse(ENV["CONSUL_URL"] + "/v1/kv/#{key}")
     http = prepareHttp(uri)

     request = Net::HTTP::Get.new(uri.request_uri)
     resp = http.request(request)

     if Integer(resp.code) != 200
         puts "-- KEY VALUE NOT FOUND! " + key
         abort("Problem reading registry, response code #{resp.code}")
     end

     result = JSON.parse(resp.body)
     return Base64.decode64(result[0]["Value"])
end

#getKeyValues(root) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/registry.rb', line 7

def getKeyValues (root)
     uri = URI.parse(ENV["CONSUL_URL"] + "/v1/kv/#{root}?recurse=true")
     http = prepareHttp(uri)

     request = Net::HTTP::Get.new(uri.request_uri)
     resp = http.request(request)

     if ( Integer(resp.code) != 200 )
         puts "-- KEY VALUE NOT FOUND! " + root
         abort("Problem reading registry, response code #{resp.code}")
     else
         response = []
         result = JSON.parse(resp.body)
         result.each() do |item|
           response.push({item["Key"] => Base64.decode64(item["Value"])})
         end
         return JSON.generate(response)
     end
end

#getSecret(key) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/registry.rb', line 103

def getSecret (key)

     uri = URI.parse(ENV["VAULT_URL"] + "/v1/secret/#{key}")
     http = prepareHttpForVault(uri)

     request = Net::HTTP::Get.new(uri.request_uri)
     request['X-Vault-Token'] = ENV["VAULT_TOKEN"]
     resp = http.request(request)

     if Integer(resp.code) != 200
         puts "-- UNABLE TO GET SECRET! #{key}"
         abort("Problem getting secret from vault, response code #{resp.code}")
     end
     return JSON.parse(resp.body)['data']
end

#prepareHttp(uri) ⇒ Object



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/registry.rb', line 153

def prepareHttp (uri)
    http = Net::HTTP.new(uri.host, uri.port)

    if (Canzea::config[:consul_tls])
        pemCert = File.read(Canzea::config[:consul_tls_cert_file])
        pemKey = File.read(Canzea::config[:consul_tls_key_file])

        http.use_ssl = true
        http.ca_file = Canzea::config[:consul_tls_ca_file]
        http.cert = OpenSSL::X509::Certificate.new(pemCert)
        http.key = OpenSSL::PKey::RSA.new(pemKey)
        http.verify_mode = OpenSSL::SSL::VERIFY_PEER
        # http.set_debug_output($stdout)
        http.ssl_version = :SSLv23
    end

    return http
end

#prepareHttpForVault(uri) ⇒ Object



172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/registry.rb', line 172

def prepareHttpForVault (uri)
    http = Net::HTTP.new(uri.host, uri.port)

    if (Canzea::config[:consul_tls])
        pemCert = File.read(Canzea::config[:vault_tls_cert_file])
        pemKey = File.read(Canzea::config[:vault_tls_key_file])

        http.use_ssl = true
        http.ca_file = Canzea::config[:consul_tls_ca_file]
        http.cert = OpenSSL::X509::Certificate.new(pemCert)
        http.key = OpenSSL::PKey::RSA.new(pemKey)
        http.verify_mode = OpenSSL::SSL::VERIFY_PEER
        # http.set_debug_output($stdout)
        http.ssl_version = :SSLv23
    end

    return http
end

#register(root, key, value) ⇒ Object



99
100
101
# File 'lib/registry.rb', line 99

def register (root, key, value)
     setKeyValue root, key, value
end

#registerDirectory(root) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/registry.rb', line 86

def registerDirectory (root)
     uri = URI.parse(ENV["CONSUL_URL"] + "/v1/kv/#{root}?dir=true")
     http = prepareHttp(uri)

     request = Net::HTTP::Put.new(uri.request_uri)
     resp = http.request(request)

     if Integer(resp.code) > 202
         puts "-- KEY DIRECTORY NOT SAVED! #{root}"
         abort("Problem adding to registry, response code #{resp.code}")
     end
end

#setKeyValue(root, key, value) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/registry.rb', line 44

def setKeyValue (root, key, value)

     uri = URI.parse(ENV["CONSUL_URL"] + "/v1/kv/#{root}/#{key}")
     http = prepareHttp(uri)

     request = Net::HTTP::Put.new(uri.request_uri)
     request.body = "#{value}";
     resp = http.request(request)

     if Integer(resp.code) != 200
         puts "-- KEY VALUE NOT SAVED! #{root} #{key}"
         abort("Problem adding to registry, response code #{resp.code}")
     end
end

#setSecret(key, value) ⇒ Object



136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/registry.rb', line 136

def setSecret (key, value)

     uri = URI.parse(ENV["VAULT_URL"] + "/v1/secret/#{key}")
     http = prepareHttpForVault(uri)

     request = Net::HTTP::Put.new(uri.request_uri)
     request['Content-Type'] = 'application/json'
     request['X-Vault-Token'] = ENV["VAULT_TOKEN"]
     request.body = "#{value}";
     resp = http.request(request)

     if Integer(resp.code) != 204
         puts "-- SECRET NOT SAVED! #{key}"
         abort("Problem adding to vault, response code #{resp.code}")
     end
end

#setVaultRecord(key, value) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/registry.rb', line 119

def setVaultRecord (key, value)

     uri = URI.parse(ENV["VAULT_URL"] + "/v1/#{key}")
     http = prepareHttpForVault(uri)

     request = Net::HTTP::Put.new(uri.request_uri)
     request['Content-Type'] = 'application/json'
     request['X-Vault-Token'] = ENV["VAULT_TOKEN"]
     request.body = "#{value}";
     resp = http.request(request)

     if Integer(resp.code) != 204
         puts "-- VAULT RECORD NOT SAVED! #{key}"
         abort("Problem adding to vault, response code #{resp.code}")
     end
end