rhc 1.2.7 → 1.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/rhc +6 -8
- data/bin/rhc-chk +23 -10
- data/features/domain.feature +1 -1
- data/features/lib/rhc_helper.rb +3 -2
- data/features/lib/rhc_helper/api.rb +7 -0
- data/features/lib/rhc_helper/app.rb +8 -10
- data/features/lib/rhc_helper/domain.rb +2 -1
- data/features/lib/rhc_helper/runnable.rb +2 -24
- data/features/sshkey.feature +3 -3
- data/features/step_definitions/cartridge_steps.rb +6 -6
- data/features/step_definitions/client_steps.rb +0 -1
- data/features/step_definitions/sshkey_steps.rb +2 -2
- data/features/support/before_hooks.rb +0 -1
- data/features/support/env.rb +5 -3
- data/lib/rhc-common.rb +1 -1
- data/lib/rhc.rb +9 -8
- data/lib/rhc/auth.rb +3 -0
- data/lib/rhc/auth/basic.rb +54 -0
- data/lib/rhc/cartridge_helpers.rb +11 -5
- data/lib/rhc/cli.rb +4 -2
- data/lib/rhc/command_runner.rb +35 -30
- data/lib/rhc/commands.rb +127 -18
- data/lib/rhc/commands/account.rb +24 -0
- data/lib/rhc/commands/alias.rb +1 -1
- data/lib/rhc/commands/app.rb +210 -209
- data/lib/rhc/commands/apps.rb +22 -0
- data/lib/rhc/commands/base.rb +10 -77
- data/lib/rhc/commands/cartridge.rb +35 -35
- data/lib/rhc/commands/domain.rb +20 -13
- data/lib/rhc/commands/git_clone.rb +30 -0
- data/lib/rhc/commands/{port-forward.rb → port_forward.rb} +3 -3
- data/lib/rhc/commands/server.rb +28 -16
- data/lib/rhc/commands/setup.rb +18 -1
- data/lib/rhc/commands/snapshot.rb +4 -4
- data/lib/rhc/commands/sshkey.rb +4 -18
- data/lib/rhc/commands/tail.rb +32 -9
- data/lib/rhc/config.rb +168 -99
- data/lib/rhc/context_helper.rb +22 -9
- data/lib/rhc/core_ext.rb +41 -1
- data/lib/rhc/exceptions.rb +21 -5
- data/lib/rhc/git_helpers.rb +81 -0
- data/lib/rhc/help_formatter.rb +21 -1
- data/lib/rhc/helpers.rb +222 -87
- data/lib/rhc/output_helpers.rb +94 -110
- data/lib/rhc/rest.rb +15 -198
- data/lib/rhc/rest/api.rb +88 -0
- data/lib/rhc/rest/application.rb +29 -30
- data/lib/rhc/rest/attributes.rb +27 -0
- data/lib/rhc/rest/base.rb +29 -33
- data/lib/rhc/rest/cartridge.rb +42 -20
- data/lib/rhc/rest/client.rb +351 -89
- data/lib/rhc/rest/domain.rb +7 -13
- data/lib/rhc/rest/gear_group.rb +1 -1
- data/lib/rhc/rest/key.rb +7 -2
- data/lib/rhc/rest/mock.rb +609 -0
- data/lib/rhc/rest/user.rb +6 -2
- data/lib/rhc/{ssh_key_helpers.rb → ssh_helpers.rb} +58 -28
- data/lib/rhc/{targz.rb → tar_gz.rb} +0 -0
- data/lib/rhc/usage_templates/command_help.erb +4 -1
- data/lib/rhc/usage_templates/help.erb +24 -11
- data/lib/rhc/usage_templates/options_help.erb +14 -0
- data/lib/rhc/wizard.rb +283 -213
- data/spec/keys/example.pem +23 -0
- data/spec/keys/example_private.pem +27 -0
- data/spec/keys/server.pem +19 -0
- data/spec/rest_spec_helper.rb +3 -371
- data/spec/rhc/auth_spec.rb +226 -0
- data/spec/rhc/cli_spec.rb +41 -14
- data/spec/rhc/command_spec.rb +44 -15
- data/spec/rhc/commands/account_spec.rb +41 -0
- data/spec/rhc/commands/alias_spec.rb +16 -15
- data/spec/rhc/commands/app_spec.rb +115 -92
- data/spec/rhc/commands/apps_spec.rb +39 -0
- data/spec/rhc/commands/cartridge_spec.rb +134 -112
- data/spec/rhc/commands/domain_spec.rb +31 -86
- data/spec/rhc/commands/git_clone_spec.rb +56 -0
- data/spec/rhc/commands/{port-forward_spec.rb → port_forward_spec.rb} +27 -32
- data/spec/rhc/commands/server_spec.rb +28 -3
- data/spec/rhc/commands/setup_spec.rb +29 -11
- data/spec/rhc/commands/snapshot_spec.rb +4 -3
- data/spec/rhc/commands/sshkey_spec.rb +24 -56
- data/spec/rhc/commands/tail_spec.rb +26 -9
- data/spec/rhc/commands/threaddump_spec.rb +12 -11
- data/spec/rhc/config_spec.rb +211 -164
- data/spec/rhc/context_spec.rb +2 -0
- data/spec/rhc/helpers_spec.rb +242 -46
- data/spec/rhc/rest_application_spec.rb +42 -28
- data/spec/rhc/rest_client_spec.rb +110 -93
- data/spec/rhc/rest_spec.rb +220 -131
- data/spec/rhc/targz_spec.rb +1 -1
- data/spec/rhc/wizard_spec.rb +435 -624
- data/spec/spec.opts +1 -1
- data/spec/spec_helper.rb +140 -6
- data/spec/wizard_spec_helper.rb +326 -0
- metadata +163 -143
- data/lib/rhc/client.rb +0 -17
- data/lib/rhc/git_helper.rb +0 -59
data/bin/rhc
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'rhc/coverage_helper'
|
3
3
|
|
4
|
-
# Require rhc-common for wizard invocation
|
5
|
-
require 'rhc-common'
|
6
|
-
|
7
4
|
def get_args
|
8
5
|
ARGV.shift
|
9
6
|
args = ""
|
@@ -15,13 +12,16 @@ def get_args
|
|
15
12
|
end
|
16
13
|
|
17
14
|
begin
|
18
|
-
begin
|
15
|
+
retcode = begin
|
19
16
|
require 'rhc/cli'
|
20
17
|
RHC::CLI.set_terminal
|
21
18
|
RHC::CLI.start(ARGV)
|
22
|
-
|
19
|
+
rescue Interrupt
|
20
|
+
puts "Interrupted"
|
21
|
+
128 + 2
|
23
22
|
rescue SystemExit => e
|
24
|
-
|
23
|
+
puts
|
24
|
+
e.status
|
25
25
|
end
|
26
26
|
|
27
27
|
if retcode == nil
|
@@ -32,6 +32,4 @@ begin
|
|
32
32
|
end
|
33
33
|
|
34
34
|
exit retcode
|
35
|
-
rescue Interrupt
|
36
|
-
exit 128 + 2 #INT
|
37
35
|
end
|
data/bin/rhc-chk
CHANGED
@@ -19,6 +19,25 @@ end
|
|
19
19
|
require 'test/unit'
|
20
20
|
require 'test/unit/ui/console/testrunner'
|
21
21
|
|
22
|
+
class Hash
|
23
|
+
# given a potentially nested hash, overwrite the value
|
24
|
+
# if the key matches the given key
|
25
|
+
def deep_cleanse(key)
|
26
|
+
each_pair do |k,v|
|
27
|
+
case v
|
28
|
+
when Hash
|
29
|
+
v.deep_cleanse key
|
30
|
+
when Array
|
31
|
+
v.map {|e| e.deep_cleanse(key) if e.is_a? Hash}
|
32
|
+
else
|
33
|
+
if k.to_s == key
|
34
|
+
self[k] = "*" * 12
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
22
41
|
#
|
23
42
|
# print help
|
24
43
|
#
|
@@ -41,6 +60,8 @@ USAGE
|
|
41
60
|
exit exit_code
|
42
61
|
end
|
43
62
|
|
63
|
+
warn "#{$0} has been deprecated. Please run 'rhc setup' instead."
|
64
|
+
|
44
65
|
begin
|
45
66
|
opts = GetoptLong.new(
|
46
67
|
["--debug", "-d", GetoptLong::NO_ARGUMENT],
|
@@ -119,14 +140,6 @@ $debuginfo = {
|
|
119
140
|
}
|
120
141
|
}
|
121
142
|
|
122
|
-
# Don't actually log the password, but some information to help with troubleshooting
|
123
|
-
if $opt['password']
|
124
|
-
$debuginfo['options']['Command Line']['password'] = {
|
125
|
-
"Length" => $opt['password'].length,
|
126
|
-
"Starts with" => $opt['password'][0..0]
|
127
|
-
}
|
128
|
-
end
|
129
|
-
|
130
143
|
#
|
131
144
|
# Check for proxy environment
|
132
145
|
#
|
@@ -167,7 +180,7 @@ module TestBase
|
|
167
180
|
body = RHC::json_decode(response.body)
|
168
181
|
body['data'] = body['data'] && body['data'] != '' ? RHC::json_decode(body['data']) : ''
|
169
182
|
$debuginfo['fetches'] << {url.to_s => {
|
170
|
-
'body' => body,
|
183
|
+
'body' => body.deep_cleanse('password'),
|
171
184
|
'header' => response.instance_variable_get(:@header)
|
172
185
|
}}
|
173
186
|
end
|
@@ -518,7 +531,7 @@ class CheckRunner < Test::Unit::UI::Console::TestRunner
|
|
518
531
|
if $debug
|
519
532
|
Tempfile.open(%w(rhc-chk. .log))do |file|
|
520
533
|
ObjectSpace.undefine_finalizer(file) # persist tempfile
|
521
|
-
file.write $debuginfo.to_yaml
|
534
|
+
file.write $debuginfo.deep_cleanse('password').to_yaml
|
522
535
|
puts
|
523
536
|
puts "Debugging information dumped to #{file.path}"
|
524
537
|
end
|
data/features/domain.feature
CHANGED
@@ -17,7 +17,7 @@ Feature: Existing Domain Operations
|
|
17
17
|
|
18
18
|
Scenario: Domain Create Fails
|
19
19
|
When rhc domain create is called
|
20
|
-
Then the domain command should fail with an exitcode of
|
20
|
+
Then the domain command should fail with an exitcode of 128
|
21
21
|
|
22
22
|
Scenario: Domain Delete
|
23
23
|
When domain is deleted
|
data/features/lib/rhc_helper.rb
CHANGED
@@ -8,11 +8,12 @@ module RHCHelper
|
|
8
8
|
# The regex to parse the UUID output from the create app results
|
9
9
|
UUID_OUTPUT_PATTERN = /UUID\s*(?:\:|=)\s*(.+)/i unless const_defined?(:UUID_OUTPUT_PATTERN)
|
10
10
|
# The regex to parse the Gear Profile output from the create app results
|
11
|
-
GEAR_PROFILE_OUTPUT_PATTERN = /
|
11
|
+
GEAR_PROFILE_OUTPUT_PATTERN = /Gear Size\s*(?:\:|=)\s*(\w+)/m unless const_defined?(:GEAR_PROFILE_OUTPUT_PATTERN)
|
12
12
|
# Regex to parse passwords out of logging messages
|
13
13
|
PASSWORD_REGEX = / -p [^\s]* / unless const_defined?(:PASSWORD_REGEX)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
|
+
require 'rhc_helper/api'
|
16
17
|
require 'rhc_helper/loggable'
|
17
18
|
require 'rhc_helper/commandify'
|
18
19
|
require 'rhc_helper/httpify'
|
@@ -8,6 +8,8 @@ module RHCHelper
|
|
8
8
|
class App
|
9
9
|
extend Persistable
|
10
10
|
extend Runnable
|
11
|
+
extend API
|
12
|
+
include API
|
11
13
|
include Loggable
|
12
14
|
include Commandify
|
13
15
|
include Runnable
|
@@ -38,13 +40,12 @@ module RHCHelper
|
|
38
40
|
# 4 - if no namespace is found, create namespace? (blank is no)
|
39
41
|
args = [$username, $password]
|
40
42
|
args << 'yes' unless ($keyed_users ||= []).include?($username)
|
41
|
-
puts "User #{$username} has no keys" if args.length == 3
|
42
43
|
args << '' # always skip namespace
|
43
44
|
if $namespace
|
44
45
|
# Namespace is already created, so don't pass anything in
|
45
46
|
logger.info("Namespace (#{$namespace}) should be found by the wizard")
|
46
47
|
run("rhc setup", nil, args) do |exitstatus, out, err, arg|
|
47
|
-
raise "Unmatched namespace #{$namespace}" unless out.include?($namespace)
|
48
|
+
raise "Unmatched namespace #{$namespace}\n\n#{out}" unless out.include?($namespace)
|
48
49
|
end
|
49
50
|
else
|
50
51
|
# Pass in a blank value for namespace to create in the next step
|
@@ -57,7 +58,7 @@ module RHCHelper
|
|
57
58
|
|
58
59
|
def self.create_unique(type, scalable, gear_profile=nil, prefix="test")
|
59
60
|
# Get a REST client to verify the application name
|
60
|
-
client =
|
61
|
+
client = new_client
|
61
62
|
|
62
63
|
# Cleanup all test applications
|
63
64
|
test_names = []
|
@@ -100,15 +101,12 @@ module RHCHelper
|
|
100
101
|
persist
|
101
102
|
end
|
102
103
|
|
104
|
+
# Get a REST client to verify the application is on the server
|
103
105
|
def is_created?
|
104
|
-
|
105
|
-
client = RHC::Rest::Client.new($end_point, $username, $password)
|
106
|
-
begin
|
107
|
-
client.domains[0].find_application(name)
|
108
|
-
rescue
|
109
|
-
return false
|
110
|
-
end
|
106
|
+
new_client.domains[0].find_application(name)
|
111
107
|
true
|
108
|
+
rescue RHC::ApplicationNotFoundException
|
109
|
+
false
|
112
110
|
end
|
113
111
|
|
114
112
|
def cartridge(name)
|
@@ -8,6 +8,7 @@ module RHCHelper
|
|
8
8
|
class Domain
|
9
9
|
extend Runnable
|
10
10
|
extend Commandify
|
11
|
+
extend API
|
11
12
|
include Dnsruby
|
12
13
|
|
13
14
|
class << self
|
@@ -27,7 +28,7 @@ module RHCHelper
|
|
27
28
|
|
28
29
|
def self.create_if_needed(prefix="test")
|
29
30
|
unless $namespace
|
30
|
-
client =
|
31
|
+
client = new_client
|
31
32
|
domain = client.domains.first
|
32
33
|
if domain
|
33
34
|
$namespace = domain.id
|
@@ -1,7 +1,5 @@
|
|
1
1
|
require 'open4'
|
2
2
|
require 'timeout'
|
3
|
-
require 'iconv'
|
4
|
-
require 'rubygems'
|
5
3
|
|
6
4
|
module RHCHelper
|
7
5
|
module Runnable
|
@@ -24,7 +22,7 @@ module RHCHelper
|
|
24
22
|
end
|
25
23
|
|
26
24
|
def run(cmd, arg=nil, input=[])
|
27
|
-
logger.info("Running: #{cmd}")
|
25
|
+
logger.info("Running: #{cmd} #{arg}")
|
28
26
|
|
29
27
|
exit_code = -1
|
30
28
|
output = nil
|
@@ -39,29 +37,9 @@ module RHCHelper
|
|
39
37
|
status = Open4.spawn(cmd, 'stdout' => stdout, 'stderr' => stderr, 'stdin' => stdin, 'quiet' => true)
|
40
38
|
out, err = [stdout, stderr].map(&:string)
|
41
39
|
|
42
|
-
#pid, stdin, stdout, stderr = Open4::popen4 cmd
|
43
|
-
#input.each {|line| stdin.puts line}
|
44
|
-
#stdin.close
|
45
|
-
|
46
|
-
# Block until the command finishes
|
47
|
-
#ignored, status = Process::waitpid2 pid
|
48
|
-
#out = stdout.read.strip
|
49
|
-
#err = stderr.read.strip
|
50
40
|
stdout.close
|
51
41
|
stderr.close
|
52
42
|
|
53
|
-
# Force the output to ASCII-only characters or logger will barf.
|
54
|
-
if (Gem::Version.new(RUBY_VERSION.dup) <=> Gem::Version.new('1.9.3')) >= 0
|
55
|
-
out.encode!('UTF-8', 'UTF-8', :undef => :replace, :invalid => :replace)
|
56
|
-
err.encode!('UTF-8', 'UTF-8', :undef => :replace, :invalid => :replace)
|
57
|
-
else
|
58
|
-
out = iconv_handler.iconv(out + ' ')[0..-2]
|
59
|
-
err = iconv_handler.iconv(err + ' ')[0..-2]
|
60
|
-
end
|
61
|
-
|
62
|
-
logger.debug("Standard Output:\n#{out}")
|
63
|
-
logger.debug("Standard Error:\n#{err}")
|
64
|
-
|
65
43
|
# Allow a caller to pass in a block to process the output
|
66
44
|
yield status.exitstatus, out, err, arg if block_given?
|
67
45
|
exit_code = status.exitstatus
|
@@ -71,7 +49,7 @@ module RHCHelper
|
|
71
49
|
logger.error("(#{$$}): Execution failed #{cmd} with exit_code: #{exit_code.to_s}")
|
72
50
|
end
|
73
51
|
|
74
|
-
|
52
|
+
exit_code
|
75
53
|
end
|
76
54
|
end
|
77
55
|
end
|
data/features/sshkey.feature
CHANGED
@@ -28,7 +28,7 @@ As an OpenShift user, I want to manage SSH keys with 'rhc sshkey' commands.
|
|
28
28
|
@sshkey_add
|
29
29
|
Scenario: invalid key name is given
|
30
30
|
When a new SSH key "key1.pub" is added as "blah\\ss"
|
31
|
-
Then the command exits with status code
|
31
|
+
Then the command exits with status code 128
|
32
32
|
|
33
33
|
@sshkey_add
|
34
34
|
Scenario: invalid SSH key is added
|
@@ -43,13 +43,13 @@ As an OpenShift user, I want to manage SSH keys with 'rhc sshkey' commands.
|
|
43
43
|
@sshkey_add @key1
|
44
44
|
Scenario: SSH key with the same name already exists
|
45
45
|
When a new SSH key "key2.pub" is added as "key1"
|
46
|
-
Then the command exits with status code
|
46
|
+
Then the command exits with status code 128
|
47
47
|
|
48
48
|
@sshkey_add
|
49
49
|
Scenario: SSH key with the identical content already exists
|
50
50
|
Given a new SSH key "key1.pub" is added as "key1"
|
51
51
|
And a new SSH key "key1.pub" is added as "key2"
|
52
|
-
Then the command exits with status code
|
52
|
+
Then the command exits with status code 128
|
53
53
|
|
54
54
|
@sshkey_remove @key1
|
55
55
|
Scenario: SSH key is deleted successfully
|
@@ -32,7 +32,7 @@ Then /^the (.+) cartridge should be (.*)$/ do |name,status|
|
|
32
32
|
when :stopped
|
33
33
|
"(.+) stopped"
|
34
34
|
when :removed
|
35
|
-
"
|
35
|
+
"Cartridge '#{name}' cannot be found in application"
|
36
36
|
else
|
37
37
|
raise "Unrecognized status type #{status}"
|
38
38
|
end
|
@@ -61,14 +61,14 @@ end
|
|
61
61
|
|
62
62
|
Then /^the (\w+) scaling value should be (.*)$/ do |minmax,value|
|
63
63
|
expected = {
|
64
|
-
:min => "
|
65
|
-
:max => "
|
64
|
+
:min => "minimum",
|
65
|
+
:max => "maximum"
|
66
66
|
}[minmax.to_sym]
|
67
67
|
|
68
|
-
value = (value == "-1" ? "available
|
68
|
+
value = (value == "-1" ? "available" : value)
|
69
69
|
|
70
|
-
match_string = [expected,value].join("
|
71
|
-
regex = Regexp.new(/\
|
70
|
+
match_string = [expected,value].join(": ")
|
71
|
+
regex = Regexp.new(/\b#{match_string}/)
|
72
72
|
|
73
73
|
@app.cartridge(@cartridge_name).send(:show).should match(regex)
|
74
74
|
end
|
@@ -35,11 +35,11 @@ end
|
|
35
35
|
Then /^the output (does not include|includes) (.*)$/ do |includes,str|
|
36
36
|
regex = case str
|
37
37
|
when /^the key information for "(.*?)"$/
|
38
|
-
|
38
|
+
/#{$1} \(type\: /
|
39
39
|
when "deprecation warning"
|
40
40
|
/deprecated/
|
41
41
|
when "the key information"
|
42
|
-
/
|
42
|
+
/type: .*?\n\s*-+\n\s*Fingerprint: /m
|
43
43
|
end
|
44
44
|
includes = case includes
|
45
45
|
when "does not"
|
data/features/support/env.rb
CHANGED
@@ -4,10 +4,12 @@ require 'rhc/coverage_helper'
|
|
4
4
|
SimpleCov.at_exit{ SimpleCov.result.format! } if defined? SimpleCov
|
5
5
|
|
6
6
|
require 'rhc_helper'
|
7
|
-
require 'rhc
|
7
|
+
require 'rhc'
|
8
8
|
require 'rhc/config'
|
9
|
+
require 'rhc/commands'
|
9
10
|
require 'rhc/helpers'
|
10
11
|
require 'rhc/commands'
|
12
|
+
require 'pry' if ENV['PRY']
|
11
13
|
|
12
14
|
def set_path
|
13
15
|
ENV["PATH"] = "#{ENV['RHC_LOCAL_PATH']}:#{ENV['PATH']}" if ENV['RHC_LOCAL_PATH']
|
@@ -97,7 +99,7 @@ def clean_applications(leave_domain = false)
|
|
97
99
|
|
98
100
|
users.each do |user|
|
99
101
|
_log "\tUser: #{user}"
|
100
|
-
client = RHC::Rest::Client.new($end_point, user, $password)
|
102
|
+
client = RHC::Rest::Client.new(:url => $end_point, :user => user, :password => $password, :verify_mode => OpenSSL::SSL::VERIFY_NONE)
|
101
103
|
client.domains.each do |domain|
|
102
104
|
_log "\t\tDomain: #{domain.id}"
|
103
105
|
domain.applications.each do |app|
|
@@ -125,7 +127,7 @@ unless ENV['NO_CLEAN']
|
|
125
127
|
|
126
128
|
# Start with a clean config
|
127
129
|
_log " Replacing express.conf with the specified libra_server"
|
128
|
-
File.open(RHC::Config::local_config_path, 'w') {|f| f.write("libra_server=#{URI.parse($end_point).host}") }
|
130
|
+
File.open(RHC::Config::local_config_path, 'w') {|f| f.write("libra_server=#{URI.parse($end_point).host}\ninsecure=true") }
|
129
131
|
RHC::Config.initialize
|
130
132
|
|
131
133
|
# Clean up temp dir
|
data/lib/rhc-common.rb
CHANGED
data/lib/rhc.rb
CHANGED
@@ -2,24 +2,25 @@
|
|
2
2
|
# FIXME Remove rubygems from requirements, ensure library is correct
|
3
3
|
|
4
4
|
# Only require external gem dependencies here
|
5
|
-
require 'rest_client'
|
6
5
|
require 'logger'
|
6
|
+
require 'pp'
|
7
|
+
|
8
|
+
require 'pry' if ENV['PRY']
|
7
9
|
|
8
10
|
# Extend core methods
|
9
11
|
require 'rhc/core_ext'
|
10
12
|
|
11
13
|
module RHC
|
12
|
-
autoload :
|
13
|
-
autoload :Rest, 'rhc/rest'
|
14
|
-
autoload :HelpFormatter, 'rhc/help_formatter'
|
14
|
+
autoload :Auth, 'rhc/auth'
|
15
15
|
autoload :CommandRunner, 'rhc/command_runner'
|
16
|
-
autoload :VERSION, 'rhc/version'
|
17
16
|
autoload :Commands, 'rhc/commands'
|
18
17
|
autoload :Config, 'rhc/config'
|
18
|
+
autoload :Helpers, 'rhc/helpers'
|
19
|
+
autoload :HelpFormatter, 'rhc/help_formatter'
|
20
|
+
autoload :Rest, 'rhc/rest'
|
21
|
+
autoload :TarGz, 'rhc/tar_gz'
|
22
|
+
autoload :VERSION, 'rhc/version'
|
19
23
|
end
|
20
24
|
|
21
25
|
require 'rhc/exceptions'
|
22
26
|
|
23
|
-
# Replace me with proper autoloads on the module RHC
|
24
|
-
require 'rhc-common'
|
25
|
-
|
data/lib/rhc/auth.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
module RHC::Auth
|
2
|
+
class Basic
|
3
|
+
attr_reader :cookie
|
4
|
+
|
5
|
+
def initialize(*args)
|
6
|
+
if args[0].is_a?(String) or args.length > 1
|
7
|
+
@username, @password = args
|
8
|
+
else
|
9
|
+
@options = args[0] || Commander::Command::Options.new
|
10
|
+
@username = options[:rhlogin]
|
11
|
+
@password = options[:password]
|
12
|
+
@no_interactive = options[:noprompt]
|
13
|
+
end
|
14
|
+
@skip_interactive = !@password.nil?
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_request(request)
|
18
|
+
(request[:cookies] ||= {})[:rh_sso] = cookie if cookie
|
19
|
+
request[:user] ||= username || (request[:lazy_auth] != true && ask_username) || nil
|
20
|
+
request[:password] ||= password || (username? && request[:lazy_auth] != true && ask_password) || nil
|
21
|
+
request
|
22
|
+
end
|
23
|
+
|
24
|
+
def retry_auth?(response)
|
25
|
+
if response.status == 401
|
26
|
+
@cookie = nil
|
27
|
+
error "Username or password is not correct" if username? && password
|
28
|
+
unless @skip_interactive or @no_interactive
|
29
|
+
ask_username unless username?
|
30
|
+
ask_password
|
31
|
+
true
|
32
|
+
end
|
33
|
+
else
|
34
|
+
@cookie ||= Array(response.cookies).inject(nil){ |v, c| c.name == 'rh_sso' ? c.value : v }
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
include RHC::Helpers
|
41
|
+
attr_reader :options, :username, :password
|
42
|
+
|
43
|
+
def ask_username
|
44
|
+
@username = ask("Login to #{openshift_server}: ") unless @no_interactive
|
45
|
+
end
|
46
|
+
def ask_password
|
47
|
+
@password = ask("Password: ") { |q| q.echo = '*' } unless @no_interactive
|
48
|
+
end
|
49
|
+
|
50
|
+
def username?
|
51
|
+
username.present?
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|