diff options
author | Jay Mundrawala <jdmundrawala@gmail.com> | 2015-03-04 19:03:28 -0800 |
---|---|---|
committer | Jay Mundrawala <jdmundrawala@gmail.com> | 2015-03-20 14:38:03 -0700 |
commit | 377ec3040dd3ec2b4fc4b4e66d5ca71ab79dd1b7 (patch) | |
tree | b90eb0e04db84d9b1f607d16f5f9bfc7a5b40499 | |
parent | 2049b0b80f3a9d4fd8e77d07e00e007c1a3bb644 (diff) | |
download | chef-377ec3040dd3ec2b4fc4b4e66d5ca71ab79dd1b7.tar.gz |
Added PSCredential object
-rw-r--r-- | lib/chef/dsl/powershell.rb | 4 | ||||
-rw-r--r-- | lib/chef/util/powershell/ps_credential.rb | 32 | ||||
-rw-r--r-- | spec/unit/util/powershell/ps_credential_spec.rb | 43 |
3 files changed, 77 insertions, 2 deletions
diff --git a/lib/chef/dsl/powershell.rb b/lib/chef/dsl/powershell.rb index 092c1ddf0e..e97f688ef7 100644 --- a/lib/chef/dsl/powershell.rb +++ b/lib/chef/dsl/powershell.rb @@ -21,8 +21,8 @@ require 'chef/exceptions' class Chef module DSL module Powershell - def ps_credential() - raise 'NotImplemented' + def ps_credential(username='placeholder', password) + Chef::Util::Powershell::PSCredential.new(username, password) end end end diff --git a/lib/chef/util/powershell/ps_credential.rb b/lib/chef/util/powershell/ps_credential.rb new file mode 100644 index 0000000000..20c2055247 --- /dev/null +++ b/lib/chef/util/powershell/ps_credential.rb @@ -0,0 +1,32 @@ +# +# Author:: Jay Mundrawala (<jdm@chef.io>) +# +# Copyright:: Copyright (c) 2015 Chef Software, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require 'chef/win32/crypto' + +class Chef::Util::Powershell + class PSCredential + def initialize(username, password) + @username = username + @encrypted_password = Chef::ReservedNames::Win32::Crypto.encrypt(password) + end + + def to_psobject + "New-Object System.Management.Automation.PSCredential('#{@username}',\('#{@encrypted_password}' | ConvertTo-SecureString))" + end + end +end diff --git a/spec/unit/util/powershell/ps_credential_spec.rb b/spec/unit/util/powershell/ps_credential_spec.rb new file mode 100644 index 0000000000..a2d51246df --- /dev/null +++ b/spec/unit/util/powershell/ps_credential_spec.rb @@ -0,0 +1,43 @@ +# +# Author:: Jay Mundrawala <jdm@chef.io> +# Copyright:: Copyright (c) 2015 Chef Software, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require 'chef' +require 'chef/util/powershell/ps_credential' + +describe Chef::Util::Powershell::PSCredential do + before (:all) do + @node = Chef::Node.new + end + + before (:example) do + allow(Chef::ReservedNames::Win32::Crypto).to receive(:encrypt).and_return("encrypted") + end + + let (:username) { 'foo' } + let (:password) { 'password' } + + context 'when username and password are provided' do + let(:ps_credential) { Chef::Util::Powershell::PSCredential.new(username, password)} + context 'when calling to_psobject' do + it 'should create the script to create a PSCredential when calling' do + expect(ps_credential.to_psobject).to eq( + "New-Object System.Management.Automation.PSCredential('#{username}',('encrypted' | ConvertTo-SecureString))") + end + end + end +end |