mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
Merge pull request #9 from SDK-CLI-Docs/feature/141_extract_win_password
Update the get_windows_password to return the encrypted password instead...
This commit is contained in:
commit
0ce276f4f7
2 changed files with 18 additions and 34 deletions
|
@ -158,9 +158,7 @@ module Fog
|
|||
|
||||
def windows_password()
|
||||
requires :id
|
||||
if self.private_key
|
||||
connection.get_windows_password(id, self.private_key)
|
||||
end
|
||||
connection.get_windows_password(id)
|
||||
end
|
||||
|
||||
def reboot(type = 'SOFT')
|
||||
|
|
|
@ -3,29 +3,26 @@ module Fog
|
|||
class HP
|
||||
class Real
|
||||
|
||||
def get_windows_password(server_id, private_key_data)
|
||||
begin
|
||||
# Retrieves the encrypted administrator password for a server running Windows.
|
||||
#
|
||||
# ==== Parameters
|
||||
# * server_id<~Integer> - Id of server
|
||||
#
|
||||
# ==== Returns
|
||||
# * password_data<~string>: Encrypted password for a server running Windows
|
||||
#
|
||||
def get_windows_password(server_id)
|
||||
# get console output assuming that the server is already in active state
|
||||
log_output = get_console_output(server_id, 400).body['output']
|
||||
# decrypt the log output to extract the password
|
||||
encrypted_text = extract_password_from_log(log_output)
|
||||
if encrypted_text
|
||||
password = decrypt_using_private_key(encrypted_text, private_key_data)
|
||||
else
|
||||
raise "Error in extracting encrypted password from the log."
|
||||
end
|
||||
rescue OpenSSL::PKey::RSAError => error
|
||||
raise "Error in decrypting password. Exception: #{error}"
|
||||
end
|
||||
# return the password
|
||||
password
|
||||
# decrypt the log output to extract the encrypted, base64-encoded password
|
||||
encrypted_password = extract_password_from_log(log_output)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def get_windows_password(server_id, private_key_data)
|
||||
def get_windows_password(server_id)
|
||||
# need to mock out the private key as well
|
||||
private_key = OpenSSL::PKey::RSA.generate(1024)
|
||||
public_key = private_key.public_key
|
||||
|
@ -33,20 +30,9 @@ module Fog
|
|||
encoded_password = encrypt_using_public_key("Passw0rd", public_key)
|
||||
|
||||
if list_servers_detail.body['servers'].detect {|_| _['id'] == server_id}
|
||||
begin
|
||||
# mock output for this call get_console_output(server_id, 400).body['output']
|
||||
log_output = "start junk [cloud-init] Encrypt random password\n-----BEGIN BASE64-ENCODED ENCRYPTED PASSWORD-----\n#{encoded_password}-----END BASE64-ENCODED ENCRYPTED PASSWORD-----\nend junk [cloud-init] Done\n"
|
||||
encrypted_text = extract_password_from_log(log_output)
|
||||
if encrypted_text
|
||||
password = decrypt_using_private_key(encrypted_text, private_key)
|
||||
else
|
||||
raise "Error in extracting encrypted password from the log."
|
||||
end
|
||||
rescue OpenSSL::PKey::RSAError => error
|
||||
raise "Error in decrypting password. Exception: #{error}"
|
||||
end
|
||||
# return the password should match Passw0rd
|
||||
password
|
||||
encrypted_password = extract_password_from_log(log_output)
|
||||
else
|
||||
raise Fog::Compute::HP::NotFound
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue