brightbox-cli 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/Gemfile.lock +5 -2
- data/brightbox-cli.gemspec +1 -1
- data/lib/brightbox/cli/config.rb +19 -0
- data/lib/brightbox-cli/accounts.rb +2 -2
- data/lib/brightbox-cli/api.rb +4 -4
- data/lib/brightbox-cli/commands/accounts/default.rb +1 -1
- data/lib/brightbox-cli/commands/accounts/list.rb +1 -1
- data/lib/brightbox-cli/commands/config/client-add.rb +2 -2
- data/lib/brightbox-cli/commands/config/client-default.rb +3 -3
- data/lib/brightbox-cli/commands/config/client-list.rb +6 -6
- data/lib/brightbox-cli/commands/config/client-remove.rb +4 -4
- data/lib/brightbox-cli/commands/config/user-add.rb +2 -2
- data/lib/brightbox-cli/commands/login.rb +53 -0
- data/lib/brightbox-cli/config/accounts.rb +5 -0
- data/lib/brightbox-cli/config/authentication_tokens.rb +10 -3
- data/lib/brightbox-cli/config/cache.rb +8 -12
- data/lib/brightbox-cli/config/clients.rb +14 -38
- data/lib/brightbox-cli/config/sections.rb +70 -13
- data/lib/brightbox-cli/config/user_application.rb +13 -5
- data/lib/brightbox-cli/config.rb +22 -14
- data/lib/brightbox-cli/connection_manager.rb +2 -2
- data/lib/brightbox-cli/gli_global_hooks.rb +25 -28
- data/lib/brightbox-cli/version.rb +1 -1
- data/lib/brightbox_cli.rb +4 -0
- data/spec/cassettes/Brightbox_BBConfig/_add_section/when_config_exists_and_overwrite_duplicates_is_false/does_not_update_the_config_file.yml +199 -0
- data/spec/cassettes/Brightbox_BBConfig/_add_section/when_config_exists_and_overwrite_duplicates_is_true/does_not_update_the_config_file.yml +199 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/does_not_alter_the_configuration.yml +99 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/updates_access_token.yml +99 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/updates_refresh_token.yml +99 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/does_not_alter_the_configuration.yml +99 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/updates_access_token.yml +99 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/updates_refresh_token.yml +99 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/does_not_alter_the_configuration.yml +149 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/updates_access_token.yml +149 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/updates_refresh_token.yml +149 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_no_config_exists/creates_the_configuration.yml +101 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_no_config_exists/refreshed_tokens.yml +101 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_using_an_email_and_suffix/creates_the_configuration.yml +101 -0
- data/spec/cassettes/Brightbox_BBConfig_add_login/when_using_an_email_and_suffix/refreshed_tokens.yml +101 -0
- data/spec/cassettes/brightbox_accounts/list/_when_access_token_expired_/does_not_report_invalid_token_errors.yml +64 -18
- data/spec/cassettes/brightbox_accounts/list/_when_no_tokens_/does_not_report_invalid_token_errors.yml +62 -16
- data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/does_not_error.yml +101 -0
- data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/does_not_prompt_to_rerun_the_command.yml +101 -0
- data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/prompts_for_the_password.yml +101 -0
- data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/requests_access_tokens.yml +101 -0
- data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/sets_up_the_config.yml +101 -0
- data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/does_not_error.yml +101 -0
- data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/does_not_prompt_to_rerun_the_command.yml +101 -0
- data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/prompts_for_the_password.yml +101 -0
- data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/requests_access_tokens.yml +101 -0
- data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/sets_up_the_config.yml +101 -0
- data/spec/cassettes/brightbox_login/when_default_account_is_passed/does_not_error.yml +51 -0
- data/spec/cassettes/brightbox_login/when_default_account_is_passed/does_not_prompt_to_rerun_the_command.yml +51 -0
- data/spec/cassettes/brightbox_login/when_default_account_is_passed/prompts_for_the_password.yml +51 -0
- data/spec/cassettes/brightbox_login/when_default_account_is_passed/requests_access_tokens.yml +51 -0
- data/spec/cassettes/brightbox_login/when_default_account_is_passed/sets_up_the_config.yml +51 -0
- data/spec/cassettes/brightbox_login/when_no_config_is_present/does_not_error.yml +101 -0
- data/spec/cassettes/brightbox_login/when_no_config_is_present/does_not_prompt_to_rerun_the_command.yml +101 -0
- data/spec/cassettes/brightbox_login/when_no_config_is_present/requests_access_tokens.yml +101 -0
- data/spec/cassettes/brightbox_login/when_no_config_is_present/sets_up_the_config.yml +101 -0
- data/spec/cassettes/brightbox_login/when_no_password_is_given/does_not_error.yml +101 -0
- data/spec/cassettes/brightbox_login/when_no_password_is_given/does_not_prompt_to_rerun_the_command.yml +101 -0
- data/spec/cassettes/brightbox_login/when_no_password_is_given/prompts_for_the_password.yml +101 -0
- data/spec/cassettes/brightbox_login/when_no_password_is_given/requests_access_tokens.yml +101 -0
- data/spec/cassettes/brightbox_login/when_no_password_is_given/sets_up_the_config.yml +101 -0
- data/spec/commands/accounts/list_spec.rb +1 -0
- data/spec/commands/login_spec.rb +239 -0
- data/spec/configs/user_app.ini +0 -2
- data/spec/spec_helper.rb +1 -0
- data/spec/support/config_helpers.rb +5 -0
- data/spec/unit/brightbox/account/all_spec.rb +1 -3
- data/spec/unit/brightbox/api/conn_spec.rb +3 -0
- data/spec/unit/brightbox/api/find_spec.rb +3 -0
- data/spec/unit/brightbox/bb_config/account_spec.rb +2 -0
- data/spec/unit/brightbox/bb_config/add_login_spec.rb +222 -0
- data/spec/unit/brightbox/bb_config/client_name_spec.rb +4 -12
- data/spec/unit/brightbox/bb_config/client_named_spec.rb +1 -1
- data/spec/unit/brightbox/bb_config/config_directory_exists_spec.rb +5 -2
- data/spec/unit/brightbox/bb_config/config_directory_spec.rb +4 -2
- data/spec/unit/brightbox/bb_config/config_spec.rb +4 -8
- data/spec/unit/brightbox/bb_config/default_account_spec.rb +10 -6
- data/spec/unit/brightbox/bb_config/find_or_set_default_account_spec.rb +2 -0
- data/spec/unit/brightbox/bb_config/renew_tokens_spec.rb +3 -0
- data/spec/unit/brightbox/bb_config/section_names_spec.rb +46 -0
- data/spec/unit/brightbox/bb_config/using_client_spec.rb +12 -12
- data/spec/unit/brightbox/bb_config_spec.rb +0 -1
- data/spec/unit/brightbox/cloud_ip/find_spec.rb +3 -0
- data/spec/unit/brightbox/config/user_application/to_fog_spec.rb +33 -29
- data/spec/unit/brightbox/config/user_application/valid_spec.rb +0 -32
- data/spec/unit/brightbox/connection_manager/fetch_connection_spec.rb +7 -3
- data/spec/unit/brightbox/firewall_policy/apply_to_spec.rb +3 -0
- data/spec/unit/brightbox/firewall_policy/create_spec.rb +3 -0
- data/spec/unit/brightbox/firewall_policy/destroy_spec.rb +3 -0
- data/spec/unit/brightbox/firewall_policy/find_or_call_spec.rb +3 -0
- data/spec/unit/brightbox/firewall_policy/find_spec.rb +3 -0
- data/spec/unit/brightbox/firewall_rule/create_spec.rb +3 -0
- data/spec/unit/brightbox/firewall_rule/destroy_spec.rb +3 -0
- data/spec/unit/brightbox/firewall_rule/find_spec.rb +3 -0
- data/spec/unit/brightbox/firewall_rule/from_policy_spec.rb +3 -0
- data/spec/unit/brightbox/server/destroy_spec.rb +4 -0
- data/spec/unit/brightbox/server/find_or_call_spec.rb +3 -0
- data/spec/unit/brightbox/server/find_spec.rb +4 -0
- data/spec/unit/brightbox/server/shutdown_spec.rb +4 -0
- data/spec/unit/brightbox/server/start_spec.rb +4 -0
- data/spec/unit/brightbox/server/stop_spec.rb +4 -0
- data/spec/unit/brightbox/server/update_spec.rb +4 -0
- data/spec/unit/brightbox/server_group/find_spec.rb +3 -0
- data/spec/unit/brightbox/user_collaboration/get_for_account_spec.rb +3 -0
- metadata +90 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 878ff7e5b319cc7c15095db32d0091a6e1d2988b
|
4
|
+
data.tar.gz: d5809b9c66921ea3820855723d871fb1eeeb99ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95b4dce981e19ad00c6f79636cc4bd29c620eee0ca43eb5256be40c2a5c60be9de634348c861177a21f4d4d72720ed1b26b8c8efbb787c8948011bddc55d148b
|
7
|
+
data.tar.gz: e5f9235468da53a0f4635665376dae4f9f35d4d43612c144ef36bc343342f03496cf1eb415fa682217fd101b09bd1ac06222f6f58b28d5987fb3ca12cf53765e
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
### v2.3.0 / 2015-10-23
|
2
|
+
|
3
|
+
[Full Changelog](https://github.com/brightbox/brightbox-cli/compare/v2.2.0...v2.3.0)
|
4
|
+
|
5
|
+
Enhancements:
|
6
|
+
|
7
|
+
* Adds embedded client that is used when a user has not setup their own
|
8
|
+
application.
|
9
|
+
* Adds `brightbox login` command which allows a simplified login for users with
|
10
|
+
just their email address and password (prompted).
|
11
|
+
|
12
|
+
brightbox login user@example.com
|
13
|
+
|
14
|
+
This uses the embedded application to save extra steps setting up.
|
15
|
+
|
16
|
+
Bug fixes:
|
17
|
+
|
18
|
+
* Guard against errors when using `DEBUG=true` whilst configuration is not
|
19
|
+
selected triggering a `NoMethodError`
|
20
|
+
* Use `pry-remote` for debugging. `pry` runs in process and the IO is trapped
|
21
|
+
when testing and in some error cases making it unusable.
|
22
|
+
* Fix configuration code so it can initialise without network side effects when
|
23
|
+
reading client_name and other values.
|
24
|
+
|
1
25
|
### v2.2.0 / 2015-09-28
|
2
26
|
|
3
27
|
[Full Changelog](https://github.com/brightbox/brightbox-cli/compare/v2.1.2...v2.2.0)
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
brightbox-cli (2.
|
4
|
+
brightbox-cli (2.3.0)
|
5
5
|
fog-brightbox (>= 0.9.0)
|
6
6
|
gli (~> 2.12.0)
|
7
7
|
highline (~> 1.6.0)
|
@@ -50,6 +50,9 @@ GEM
|
|
50
50
|
coderay (~> 1.0.5)
|
51
51
|
method_source (~> 0.8)
|
52
52
|
slop (~> 3.4)
|
53
|
+
pry-remote (0.1.8)
|
54
|
+
pry (~> 0.9)
|
55
|
+
slop (~> 3.0)
|
53
56
|
rake (10.1.0)
|
54
57
|
rspec (2.99.0)
|
55
58
|
rspec-core (~> 2.99.0)
|
@@ -68,7 +71,7 @@ PLATFORMS
|
|
68
71
|
DEPENDENCIES
|
69
72
|
brightbox-cli!
|
70
73
|
mocha
|
71
|
-
pry
|
74
|
+
pry-remote
|
72
75
|
rake
|
73
76
|
rspec (~> 2.99)
|
74
77
|
vcr (~> 2.5)
|
data/brightbox-cli.gemspec
CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_dependency "hirb", "~> 0.6"
|
31
31
|
|
32
32
|
s.add_development_dependency "mocha"
|
33
|
-
s.add_development_dependency "pry"
|
33
|
+
s.add_development_dependency "pry-remote"
|
34
34
|
s.add_development_dependency "rake"
|
35
35
|
s.add_development_dependency "rspec", "~> 2.99"
|
36
36
|
s.add_development_dependency "vcr", "~> 2.5"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "singleton"
|
2
|
+
|
3
|
+
module Brightbox
|
4
|
+
module CLI
|
5
|
+
class Config
|
6
|
+
include Singleton
|
7
|
+
|
8
|
+
attr_accessor :config
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.config
|
13
|
+
CLI::Config.instance.config
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.config=(replacement)
|
17
|
+
CLI::Config.instance.config = replacement
|
18
|
+
end
|
19
|
+
end
|
@@ -17,7 +17,7 @@ module Brightbox
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.all
|
20
|
-
if
|
20
|
+
if Brightbox.config.using_application?
|
21
21
|
conn.accounts.all
|
22
22
|
else
|
23
23
|
[conn.account]
|
@@ -25,7 +25,7 @@ module Brightbox
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.get(id)
|
28
|
-
if
|
28
|
+
if Brightbox.config.using_application?
|
29
29
|
a = conn.accounts.get(id)
|
30
30
|
else
|
31
31
|
a = conn.account
|
data/lib/brightbox-cli/api.rb
CHANGED
@@ -22,7 +22,7 @@ module Brightbox
|
|
22
22
|
if @@connection_manager
|
23
23
|
@@connection_manager.fetch_connection(require_account?)
|
24
24
|
else
|
25
|
-
@@connection_manager = Brightbox::ConnectionManager.new(
|
25
|
+
@@connection_manager = Brightbox::ConnectionManager.new(Brightbox.config.to_fog)
|
26
26
|
@@connection_manager.fetch_connection(require_account?)
|
27
27
|
end
|
28
28
|
end
|
@@ -52,7 +52,7 @@ module Brightbox
|
|
52
52
|
else
|
53
53
|
raise InvalidArguments, "Can't initialize #{self.class} with #{m.inspect}"
|
54
54
|
end
|
55
|
-
|
55
|
+
Brightbox.config.cache_id(@id) if Brightbox.config.respond_to?(:cache_id)
|
56
56
|
end
|
57
57
|
|
58
58
|
def fog_model
|
@@ -164,7 +164,7 @@ module Brightbox
|
|
164
164
|
if value
|
165
165
|
value
|
166
166
|
else
|
167
|
-
|
167
|
+
Brightbox.config.cache_id id
|
168
168
|
@cache[id] = get(id)
|
169
169
|
end
|
170
170
|
end
|
@@ -179,7 +179,7 @@ module Brightbox
|
|
179
179
|
@cache = {}
|
180
180
|
all.each do |f|
|
181
181
|
@cache[f.id] = f
|
182
|
-
|
182
|
+
Brightbox.config.cache_id f.id
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
@@ -8,7 +8,7 @@ module Brightbox
|
|
8
8
|
cmd.command [:list] do |c|
|
9
9
|
|
10
10
|
c.action do |global_options, _options, _args|
|
11
|
-
if
|
11
|
+
if Brightbox.config.using_application?
|
12
12
|
# Collaborating Accounts are combined from owned and collaborations
|
13
13
|
accounts = CollaboratingAccount.all
|
14
14
|
else
|
@@ -14,7 +14,7 @@ module Brightbox
|
|
14
14
|
|
15
15
|
c.action do |_global_options, options, args|
|
16
16
|
|
17
|
-
info "Using config file #{
|
17
|
+
info "Using config file #{Brightbox.config.config_filename}"
|
18
18
|
|
19
19
|
client_id = args.shift
|
20
20
|
secret = args.shift
|
@@ -39,7 +39,7 @@ module Brightbox
|
|
39
39
|
:api_url => api_url,
|
40
40
|
:auth_url => auth_url
|
41
41
|
}
|
42
|
-
|
42
|
+
Brightbox.config.add_section(calias, client_id, secret, options)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -7,16 +7,16 @@ module Brightbox
|
|
7
7
|
|
8
8
|
c.action do |_global_options, _options, args|
|
9
9
|
|
10
|
-
info "Using config file #{
|
10
|
+
info "Using config file #{Brightbox.config.config_filename}"
|
11
11
|
calias = args.shift
|
12
12
|
|
13
13
|
if calias.nil?
|
14
14
|
raise "You must specify the api alias you want to set as the default"
|
15
15
|
end
|
16
16
|
|
17
|
-
if
|
17
|
+
if Brightbox.config.client_named?(calias)
|
18
18
|
info "Setting #{calias} as default api client"
|
19
|
-
|
19
|
+
Brightbox.config.set_default_client(calias)
|
20
20
|
else
|
21
21
|
raise "An api client with the alias #{calias} does not exist in the config"
|
22
22
|
end
|
@@ -8,21 +8,21 @@ module Brightbox
|
|
8
8
|
|
9
9
|
c.action do |global_options, _options, _args|
|
10
10
|
|
11
|
-
info "Using config file #{
|
11
|
+
info "Using config file #{Brightbox.config.config_filename}"
|
12
12
|
|
13
|
-
clients =
|
14
|
-
c =
|
13
|
+
clients = Brightbox.config.section_names.map do |cid|
|
14
|
+
c = Brightbox.config[cid]
|
15
15
|
calias = c["alias"] || cid
|
16
16
|
|
17
17
|
# Append a star for the configured default client
|
18
|
-
if
|
18
|
+
if Brightbox.config.default_client == cid && Brightbox.config.has_multiple_clients?
|
19
19
|
calias = "*#{calias}"
|
20
20
|
end
|
21
21
|
|
22
22
|
{
|
23
23
|
:alias => calias,
|
24
|
-
:client_id => c["client_id"],
|
25
|
-
:secret => c["secret"],
|
24
|
+
:client_id => c["client_id"] || Brightbox::EMBEDDED_APP_ID,
|
25
|
+
:secret => c["secret"] || Brightbox::EMBEDDED_APP_SECRET,
|
26
26
|
:api_url => c["api_url"],
|
27
27
|
:auth_url => c["auth_url"] || c["api_url"]
|
28
28
|
}
|
@@ -7,7 +7,7 @@ module Brightbox
|
|
7
7
|
|
8
8
|
c.action do |_global_options, _options, args|
|
9
9
|
|
10
|
-
info "Using config file #{
|
10
|
+
info "Using config file #{Brightbox.config.config_filename}"
|
11
11
|
|
12
12
|
calias = args.shift
|
13
13
|
|
@@ -15,8 +15,8 @@ module Brightbox
|
|
15
15
|
raise "You must specify the api alias you want to remove"
|
16
16
|
end
|
17
17
|
|
18
|
-
client_config =
|
19
|
-
|
18
|
+
client_config = Brightbox.config.section_names.find do |config|
|
19
|
+
Brightbox.config[config]["alias"] == calias
|
20
20
|
end
|
21
21
|
|
22
22
|
if client_config.nil?
|
@@ -24,7 +24,7 @@ module Brightbox
|
|
24
24
|
end
|
25
25
|
|
26
26
|
info "Removing api client #{calias}"
|
27
|
-
|
27
|
+
Brightbox.config.delete_section client_config
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -15,7 +15,7 @@ module Brightbox
|
|
15
15
|
|
16
16
|
require 'highline'
|
17
17
|
|
18
|
-
info "Using config file #{
|
18
|
+
info "Using config file #{Brightbox.config.config_filename}"
|
19
19
|
|
20
20
|
email = args.shift
|
21
21
|
client_id = args.shift
|
@@ -57,7 +57,7 @@ module Brightbox
|
|
57
57
|
:api_url => api_url,
|
58
58
|
:auth_url => auth_url
|
59
59
|
}
|
60
|
-
|
60
|
+
Brightbox.config.add_section(calias, client_id, secret, options)
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Brightbox
|
2
|
+
command [:login] do |cmd|
|
3
|
+
cmd.desc I18n.t("login.desc")
|
4
|
+
cmd.arg_name "email"
|
5
|
+
|
6
|
+
cmd.desc "password, if not specified you will be prompted"
|
7
|
+
cmd.flag [:p, "password"]
|
8
|
+
|
9
|
+
cmd.desc "default account"
|
10
|
+
cmd.flag [:"default-account"]
|
11
|
+
|
12
|
+
cmd.flag [:"application-id"]
|
13
|
+
cmd.flag [:"application-secret"]
|
14
|
+
|
15
|
+
cmd.flag [:"api-url"]
|
16
|
+
cmd.flag [:"auth-url"]
|
17
|
+
|
18
|
+
cmd.action do |_global_options, options, args|
|
19
|
+
config_name = args.shift
|
20
|
+
email = config_name
|
21
|
+
|
22
|
+
raise "You must specify your email address" if email.nil?
|
23
|
+
|
24
|
+
password = options[:p]
|
25
|
+
password = Brightbox.config.gpg_password unless password
|
26
|
+
|
27
|
+
if !password || password.empty?
|
28
|
+
require "highline"
|
29
|
+
highline = HighLine.new
|
30
|
+
password = highline.ask("Enter your password : ") { |q| q.echo = false }
|
31
|
+
end
|
32
|
+
raise "You must specify your Brightbox password." if password.empty?
|
33
|
+
|
34
|
+
api_url = options[:"api-url"] || DEFAULT_API_ENDPOINT
|
35
|
+
auth_url = options[:"auth-url"] || api_url
|
36
|
+
|
37
|
+
section_options = {
|
38
|
+
:client_name => config_name,
|
39
|
+
:alias => config_name,
|
40
|
+
:username => email,
|
41
|
+
:password => password,
|
42
|
+
:api_url => api_url,
|
43
|
+
:auth_url => auth_url
|
44
|
+
}
|
45
|
+
section_options[:default_account] = options[:"default-account"] if options[:"default-account"]
|
46
|
+
|
47
|
+
section_options[:client_id] = options[:"application-id"] if options[:"application-id"]
|
48
|
+
section_options[:secret] = options[:"application-secret"] if options[:"application-secret"]
|
49
|
+
|
50
|
+
Brightbox.config.add_login(email, password, section_options)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -22,6 +22,11 @@ module Brightbox
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
def determine_account(preferred_account)
|
26
|
+
return preferred_account if preferred_account
|
27
|
+
return config[client_name]["default_account"] unless client_name.nil?
|
28
|
+
end
|
29
|
+
|
25
30
|
def account
|
26
31
|
if defined?(@account) && @account
|
27
32
|
@account
|
@@ -4,7 +4,7 @@ module Brightbox
|
|
4
4
|
attr_writer :access_token, :refresh_token
|
5
5
|
|
6
6
|
def access_token_filename
|
7
|
-
file_name = "#{
|
7
|
+
file_name = "#{base_token_name}.oauth_token"
|
8
8
|
@access_token_filename ||= File.join(config_directory, file_name)
|
9
9
|
end
|
10
10
|
|
@@ -20,7 +20,7 @@ module Brightbox
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def refresh_token_filename
|
23
|
-
file_name = "#{
|
23
|
+
file_name = "#{base_token_name}.refresh_token"
|
24
24
|
@refresh_token_filename ||= File.join(config_directory, file_name)
|
25
25
|
end
|
26
26
|
|
@@ -55,7 +55,7 @@ module Brightbox
|
|
55
55
|
# This attempts to renew access (and refresh) tokens for the current
|
56
56
|
# configuration based on the current connection.
|
57
57
|
#
|
58
|
-
# @note
|
58
|
+
# @note Brightbox.config and Api.conn are actually two different worlds and should
|
59
59
|
# be merged (so a configuration holds the current connection)
|
60
60
|
#
|
61
61
|
def renew_tokens(options = {})
|
@@ -234,6 +234,13 @@ module Brightbox
|
|
234
234
|
def cached_refresh_token
|
235
235
|
File.open(refresh_token_filename, "r") { |fl| fl.read.chomp }
|
236
236
|
end
|
237
|
+
|
238
|
+
private
|
239
|
+
|
240
|
+
def base_token_name
|
241
|
+
return nil if client_name.nil?
|
242
|
+
client_name.gsub("/", "_")
|
243
|
+
end
|
237
244
|
end
|
238
245
|
end
|
239
246
|
end
|
@@ -2,21 +2,17 @@ module Brightbox
|
|
2
2
|
module Config
|
3
3
|
module Cache
|
4
4
|
def cache_path
|
5
|
-
|
6
|
-
@cache_path
|
7
|
-
else
|
8
|
-
@cache_path = File.join(config_directory, 'cache')
|
9
|
-
unless File.exist? @cache_path
|
10
|
-
begin
|
11
|
-
FileUtils.mkpath @cache_path
|
12
|
-
rescue Errno::EEXIST
|
13
|
-
end
|
14
|
-
end
|
15
|
-
@cache_path
|
16
|
-
end
|
5
|
+
File.join(config_directory, "cache")
|
17
6
|
end
|
18
7
|
|
19
8
|
def cache_id(cid)
|
9
|
+
return if cid.nil?
|
10
|
+
unless File.exist?(cache_path)
|
11
|
+
begin
|
12
|
+
FileUtils.mkpath(cache_path)
|
13
|
+
rescue Errno::EEXIST
|
14
|
+
end
|
15
|
+
end
|
20
16
|
FileUtils.touch(File.join(cache_path, cid)) unless cid.nil?
|
21
17
|
end
|
22
18
|
end
|
@@ -8,12 +8,16 @@ module Brightbox
|
|
8
8
|
|
9
9
|
# Is the currently selected config using user application details?
|
10
10
|
def using_application?
|
11
|
-
|
11
|
+
if client_name
|
12
|
+
!config[client_name]["username"].nil?
|
13
|
+
else
|
14
|
+
raise NoSelectedClientError, NO_CLIENT_MESSAGE
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
# Does this config have multiple clients defined within?
|
15
19
|
def has_multiple_clients?
|
16
|
-
|
20
|
+
section_names.size > 1
|
17
21
|
end
|
18
22
|
|
19
23
|
# Does the currently selected client have an alias and a config section
|
@@ -32,44 +36,9 @@ module Brightbox
|
|
32
36
|
selected_config["alias"] || client_name
|
33
37
|
end
|
34
38
|
|
35
|
-
# Returns a client name or raises depending on a number of factors.
|
36
|
-
#
|
37
|
-
# FIXME: This combines too much decision making into what appears to be a
|
38
|
-
# getter.
|
39
|
-
#
|
40
|
-
# If a default_client is not set and there are more than one client it
|
41
|
-
# raises an error because it is ambiguous which to use.
|
42
|
-
#
|
43
|
-
# If +force_default_config+ is passed in as false (for +config+ commands)
|
44
|
-
# then it attempts to use the first config
|
45
|
-
#
|
46
|
-
# Calling +client_name+ within the +config+ command will break the config
|
47
|
-
# command because you can no longer manage your config (and set a default)
|
48
|
-
#
|
49
|
-
# This has been fixed by short circuiting to return +nil+ in that case which
|
50
|
-
# should never exist now.
|
51
|
-
#
|
52
|
-
def client_name
|
53
|
-
if @client_name
|
54
|
-
@client_name
|
55
|
-
else
|
56
|
-
# If we do not require a default client do not error if one is not set
|
57
|
-
# TODO: Remove when certain unused
|
58
|
-
if @options[:force_default_config] == false
|
59
|
-
@client_name = default_client
|
60
|
-
else
|
61
|
-
# Is client ambigious?
|
62
|
-
if default_client.nil? && clients.length > 1
|
63
|
-
raise AmbiguousClientError, AMBIGUOUS_CLIENT_ERROR
|
64
|
-
end
|
65
|
-
@client_name = default_client || clients.first
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
39
|
# Returns the actual client ID with no risk of an alias
|
71
40
|
def client_id
|
72
|
-
selected_config["client_id"]
|
41
|
+
selected_config["client_id"] || Brightbox::EMBEDDED_APP_ID
|
73
42
|
end
|
74
43
|
|
75
44
|
# @todo Account for "core" section
|
@@ -104,6 +73,13 @@ module Brightbox
|
|
104
73
|
@default_client = nil
|
105
74
|
end
|
106
75
|
|
76
|
+
def determine_client(preferred_client = nil)
|
77
|
+
return preferred_client unless preferred_client.nil?
|
78
|
+
return default_client unless default_client.nil?
|
79
|
+
section_names.first unless section_names.empty?
|
80
|
+
nil
|
81
|
+
end
|
82
|
+
|
107
83
|
private
|
108
84
|
|
109
85
|
# If the prefix is in the client ID (identifier not alias) be +true+
|
@@ -1,6 +1,63 @@
|
|
1
1
|
module Brightbox
|
2
2
|
module Config
|
3
3
|
module Sections
|
4
|
+
#
|
5
|
+
# @param [String] config_alias The section name usually `email` but `email/suffix` allowed.
|
6
|
+
# @param [String] password
|
7
|
+
# @param [Hash] options
|
8
|
+
# @option options [String] :api_url
|
9
|
+
# @option options [String] :auth_url
|
10
|
+
# @option options [String] :default_account
|
11
|
+
# @option options [String] :client_id
|
12
|
+
# @option options [String] :secret
|
13
|
+
#
|
14
|
+
def add_login(config_alias, password, options = {})
|
15
|
+
# If a custom alias is passed, used that for the config header, otherwise use email
|
16
|
+
email = config_alias.split("/").first
|
17
|
+
config_section = config[config_alias]
|
18
|
+
|
19
|
+
info "Creating new client config #{config_alias}" if config_section.empty?
|
20
|
+
|
21
|
+
config_section["username"] = email unless config_section["username"]
|
22
|
+
|
23
|
+
config_section["api_url"] = options[:api_url] if options.key?(:api_url)
|
24
|
+
config_section["api_url"] = DEFAULT_API_ENDPOINT unless config_section["api_url"]
|
25
|
+
|
26
|
+
config_section["auth_url"] = options[:auth_url] if options.key?(:auth_url)
|
27
|
+
config_section["auth_url"] = config_section["api_url"]
|
28
|
+
|
29
|
+
config_section["default_account"] = options[:default_account] if options.key?(:default_account)
|
30
|
+
|
31
|
+
config_section["client_id"] = options[:client_id] if options.key?(:client_id)
|
32
|
+
config_section["secret"] = options[:secret] if options.key?(:secret)
|
33
|
+
|
34
|
+
dirty!
|
35
|
+
|
36
|
+
self.client_name = client_alias
|
37
|
+
|
38
|
+
# Renew tokens via config...
|
39
|
+
#
|
40
|
+
# Part of the "login" behaviour is to always refresh them
|
41
|
+
#
|
42
|
+
begin
|
43
|
+
flush_access_token!
|
44
|
+
renew_tokens(:client_name => config_alias, :password => password)
|
45
|
+
rescue => e
|
46
|
+
error "Something went wrong trying to refresh new tokens #{e.message}"
|
47
|
+
end
|
48
|
+
|
49
|
+
# Try to determine a default account
|
50
|
+
unless default_account == find_or_set_default_account
|
51
|
+
info "The default account of #{default_account} has been selected"
|
52
|
+
end
|
53
|
+
|
54
|
+
# If only client then set it as the default
|
55
|
+
set_default_client(client_alias) unless default_client
|
56
|
+
|
57
|
+
# Ensure all our config changes are now saved
|
58
|
+
save
|
59
|
+
end
|
60
|
+
|
4
61
|
#
|
5
62
|
# @param [String] client_alias
|
6
63
|
# @param [String] client_id
|
@@ -12,26 +69,26 @@ module Brightbox
|
|
12
69
|
# @option options [String] :auth_url
|
13
70
|
#
|
14
71
|
def add_section(client_alias, client_id, secret, options)
|
15
|
-
|
16
|
-
if
|
72
|
+
config_section = config[client_alias]
|
73
|
+
if config_section.empty?
|
17
74
|
info "Creating new client config #{client_alias}"
|
18
75
|
else
|
19
76
|
old_calias = client_alias
|
20
77
|
|
21
|
-
deduplicator = Brightbox::Config::SectionNameDeduplicator.new(client_alias,
|
78
|
+
deduplicator = Brightbox::Config::SectionNameDeduplicator.new(client_alias, section_names)
|
22
79
|
client_alias = deduplicator.next
|
23
80
|
# Need to open the new config again
|
24
|
-
|
81
|
+
config_section = config[client_alias]
|
25
82
|
|
26
83
|
info "A client config named #{old_calias} already exists using #{client_alias} instead"
|
27
84
|
end
|
28
85
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
86
|
+
config_section["alias"] = client_alias
|
87
|
+
config_section["client_id"] = client_id
|
88
|
+
config_section["username"] = options[:username]
|
89
|
+
config_section["secret"] = secret
|
90
|
+
config_section["api_url"] = options[:api_url] || DEFAULT_API_ENDPOINT
|
91
|
+
config_section["auth_url"] = options[:auth_url] || config_section["api_url"]
|
35
92
|
|
36
93
|
dirty!
|
37
94
|
|
@@ -85,13 +142,13 @@ module Brightbox
|
|
85
142
|
config[section_name]
|
86
143
|
end
|
87
144
|
|
88
|
-
# Returns the
|
145
|
+
# Returns the section names in the config
|
89
146
|
#
|
90
147
|
# @return [Array<String>]
|
91
148
|
#
|
92
|
-
def
|
149
|
+
def section_names
|
93
150
|
# Exclude the global "core" section
|
94
|
-
config.sections.
|
151
|
+
config.sections.reject { |s| %w(core alias).include?(s) }
|
95
152
|
end
|
96
153
|
|
97
154
|
private
|
@@ -3,7 +3,7 @@ module Brightbox
|
|
3
3
|
class UserApplication
|
4
4
|
# FIXME: api_url should use fog's underlying default
|
5
5
|
#
|
6
|
-
NON_BLANK_KEYS = %w(api_url
|
6
|
+
NON_BLANK_KEYS = %w(api_url username)
|
7
7
|
|
8
8
|
attr_accessor :selected_config, :client_name
|
9
9
|
|
@@ -19,8 +19,8 @@ module Brightbox
|
|
19
19
|
:provider => 'Brightbox',
|
20
20
|
:brightbox_api_url => selected_config['api_url'],
|
21
21
|
:brightbox_auth_url => selected_config['auth_url'] || selected_config['api_url'],
|
22
|
-
:brightbox_client_id =>
|
23
|
-
:brightbox_secret =>
|
22
|
+
:brightbox_client_id => client_id,
|
23
|
+
:brightbox_secret => client_secret,
|
24
24
|
:persistent => persistent?
|
25
25
|
}
|
26
26
|
end
|
@@ -55,6 +55,14 @@ module Brightbox
|
|
55
55
|
|
56
56
|
private
|
57
57
|
|
58
|
+
def client_id
|
59
|
+
selected_config["client_id"] || Brightbox::EMBEDDED_APP_ID
|
60
|
+
end
|
61
|
+
|
62
|
+
def client_secret
|
63
|
+
selected_config["secret"] || Brightbox::EMBEDDED_APP_SECRET
|
64
|
+
end
|
65
|
+
|
58
66
|
def persistent?
|
59
67
|
if selected_config["persistent"] == "false"
|
60
68
|
false
|
@@ -68,8 +76,8 @@ module Brightbox
|
|
68
76
|
:provider => 'Brightbox',
|
69
77
|
:brightbox_api_url => selected_config['api_url'],
|
70
78
|
:brightbox_auth_url => selected_config['auth_url'] || selected_config['api_url'],
|
71
|
-
:brightbox_client_id =>
|
72
|
-
:brightbox_secret =>
|
79
|
+
:brightbox_client_id => client_id,
|
80
|
+
:brightbox_secret => client_secret,
|
73
81
|
:brightbox_username => selected_config["username"],
|
74
82
|
:persistent => persistent?
|
75
83
|
}
|