code42 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/code42.gemspec +3 -0
- data/lib/code42.rb +66 -27
- data/lib/code42/api/destination.rb +18 -0
- data/lib/code42/api/diagnostic.rb +9 -0
- data/lib/code42/api/org.rb +5 -2
- data/lib/code42/api/product_license.rb +21 -0
- data/lib/code42/api/server.rb +21 -0
- data/lib/code42/api/server_connection_string.rb +9 -0
- data/lib/code42/api/server_settings.rb +13 -0
- data/lib/code42/api/store_point.rb +22 -0
- data/lib/code42/api/token.rb +7 -0
- data/lib/code42/client.rb +23 -31
- data/lib/code42/computer.rb +0 -2
- data/lib/code42/connection.rb +14 -26
- data/lib/code42/destination.rb +52 -0
- data/lib/code42/product_license.rb +12 -0
- data/lib/code42/server.rb +54 -0
- data/lib/code42/server_connection_string.rb +10 -0
- data/lib/code42/server_settings.rb +4 -0
- data/lib/code42/settings.rb +1 -1
- data/lib/code42/store_point.rb +63 -0
- data/lib/code42/version.rb +1 -1
- data/spec/cassettes/Code42_Client/_add_product_license/adds_a_product_license.yml +39 -0
- data/spec/cassettes/Code42_Client/_apply_mlk/applies_the_mlk.yml +77 -0
- data/spec/cassettes/Code42_Client/_create_destination/creates_a_destination.yml +40 -0
- data/spec/cassettes/Code42_Client/_create_server/creates_a_server.yml +38 -0
- data/spec/cassettes/Code42_Client/_destination/returns_a_destination.yml +37 -0
- data/spec/cassettes/Code42_Client/_destinations/returns_an_array_of_desinations.yml +37 -0
- data/spec/cassettes/Code42_Client/_org_share_destinations/returns_a_provider_key.yml +36 -0
- data/spec/cassettes/Code42_Client/_product_licenses/returns_an_array_of_product_licenses.yml +81 -0
- data/spec/cassettes/Code42_Client/_remove_product_license/removes_a_product_license.yml +104 -0
- data/spec/cassettes/Code42_Client/_server/returns_a_server.yml +37 -0
- data/spec/cassettes/Code42_Client/_server_connection_string/returns_a_connection_string.yml +36 -0
- data/spec/cassettes/Code42_Client/_server_settings/returns_a_server_settings_object.yml +37 -0
- data/spec/cassettes/Code42_Client/_servers/returns_an_array_of_servers.yml +37 -0
- data/spec/cassettes/Code42_Client/_update_product_license/updates_a_product_license.yml +76 -0
- data/spec/cassettes/Code42_Client/_update_server_settings/updates_server_settings.yml +70 -0
- data/spec/cassettes/Code42_StorePoint/_accept_new_devices/should_return_store_point_with_accept_new_devices_enabled.yml +75 -0
- data/spec/cassettes/Code42_StorePoint/_disable_balancing/should_return_store_point_with_balancing_enabled.yml +75 -0
- data/spec/cassettes/Code42_StorePoint/_disable_inbound_backup/should_return_store_point_with_inbound_backup_disabled.yml +75 -0
- data/spec/cassettes/Code42_StorePoint/_enable_balancing/should_return_store_point_with_balancing_enabled.yml +75 -0
- data/spec/cassettes/Code42_StorePoint/_enable_inbound_backup/should_return_store_point_with_inbound_backup_disabled.yml +75 -0
- data/spec/cassettes/Code42_StorePoint/_find_store_point_by_id/should_return_correct_store_point.yml +38 -0
- data/spec/cassettes/Code42_StorePoint/_find_store_point_by_name/should_return_correct_store_point.yml +38 -0
- data/spec/cassettes/Code42_StorePoint/_find_store_point_by_server_name/should_return_correct_store_point.yml +38 -0
- data/spec/cassettes/Code42_StorePoint/_reject_new_devices/should_return_store_point_with_accept_new_devices_disabled.yml +75 -0
- data/spec/code42/client_spec.rb +161 -57
- data/spec/code42/connection_spec.rb +10 -12
- data/spec/code42/extension_spec.rb +0 -2
- data/spec/code42/org_spec.rb +20 -22
- data/spec/code42/ping_spec.rb +1 -3
- data/spec/code42/product_license_spec.rb +34 -0
- data/spec/code42/resource_spec.rb +0 -2
- data/spec/code42/role_spec.rb +2 -4
- data/spec/code42/server_connection_string_spec.rb +34 -0
- data/spec/code42/server_spec.rb +66 -0
- data/spec/code42/settings_spec.rb +25 -27
- data/spec/code42/store_point_spec.rb +90 -0
- data/spec/code42/token_spec.rb +10 -15
- data/spec/code42/user_spec.rb +4 -6
- data/spec/spec_helper.rb +1 -1
- metadata +74 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bf8ccbbf30229f5782e6820c7e65d7a231f2543
|
4
|
+
data.tar.gz: 957d1a88845196fb072e784ff74378638f497c65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0b5aaa0a70a0c2e253d009c78aec1f8e6268e85678fa66b3913b422285de5de3f60f761d2804e7374f0359f4749b536a27edd9cc8125440cd11341ffd446ae0
|
7
|
+
data.tar.gz: 43ccc2d3d9727797a2fe5ba31b3b6edccbeca692f527b8659f05c87d793a6e9504e35441b0aae94606dc24c1bc0ad7c82c8d4da987b85926876143d544d62ad2
|
data/.rspec
CHANGED
data/code42.gemspec
CHANGED
@@ -11,6 +11,7 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.description = %q{Provides a Ruby interface to the Code42 API}
|
12
12
|
gem.summary = %q{...}
|
13
13
|
gem.homepage = "http://www.crashplan.com/apidocviewer/"
|
14
|
+
gem.license = 'Apache'
|
14
15
|
|
15
16
|
gem.add_development_dependency 'rspec', '~> 2.14.0'
|
16
17
|
gem.add_development_dependency 'webmock', '~> 1.11.0'
|
@@ -20,6 +21,8 @@ Gem::Specification.new do |gem|
|
|
20
21
|
gem.add_dependency 'activesupport', '>= 3.2.0'
|
21
22
|
gem.add_dependency 'faraday_middleware', '~> 0.9.1'
|
22
23
|
|
24
|
+
gem.required_ruby_version = '>= 1.9'
|
25
|
+
|
23
26
|
gem.files = `git ls-files`.split($/)
|
24
27
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
25
28
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
data/lib/code42.rb
CHANGED
@@ -1,28 +1,34 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
1
|
+
require 'date'
|
2
|
+
require 'active_support/core_ext/array/extract_options'
|
3
|
+
require 'active_support/core_ext/hash/keys'
|
4
|
+
require 'active_support/core_ext/string/inflections'
|
5
|
+
require 'active_support/core_ext/object/blank'
|
6
|
+
require 'active_support/core_ext/object/try'
|
7
|
+
require 'active_support/notifications'
|
8
|
+
require 'code42/version'
|
9
|
+
require 'code42/client'
|
10
|
+
require 'code42/settings'
|
11
|
+
require 'code42/error'
|
12
|
+
require 'code42/connection'
|
13
|
+
require 'code42/attribute'
|
14
|
+
require 'code42/attribute_serializer'
|
15
|
+
require 'code42/resource'
|
16
|
+
require 'code42/org'
|
17
|
+
require 'code42/user'
|
18
|
+
require 'code42/computer'
|
19
|
+
require 'code42/diagnostic'
|
20
|
+
require 'code42/ping'
|
21
|
+
require 'code42/token'
|
22
|
+
require 'code42/role'
|
23
|
+
require 'code42/role_collection'
|
24
|
+
require 'code42/token_validation'
|
25
|
+
require 'code42/permission'
|
26
|
+
require 'code42/product_license'
|
27
|
+
require 'code42/server_settings'
|
28
|
+
require 'code42/destination'
|
29
|
+
require 'code42/server'
|
30
|
+
require 'code42/server_connection_string'
|
31
|
+
require 'code42/store_point'
|
26
32
|
|
27
33
|
module Code42
|
28
34
|
class << self
|
@@ -40,8 +46,9 @@ module Code42
|
|
40
46
|
self
|
41
47
|
end
|
42
48
|
|
43
|
-
def respond_to_missing?(method_name, include_private=false)
|
44
|
-
|
49
|
+
def respond_to_missing?(method_name, include_private=false)
|
50
|
+
client.respond_to?(method_name, include_private)
|
51
|
+
end
|
45
52
|
|
46
53
|
private
|
47
54
|
|
@@ -51,3 +58,35 @@ module Code42
|
|
51
58
|
end
|
52
59
|
end
|
53
60
|
end
|
61
|
+
|
62
|
+
class RequestLogger < Faraday::Request
|
63
|
+
def call(env)
|
64
|
+
debug('request') { dump_body(env[:body]) }
|
65
|
+
super
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class BodyLogger < Faraday::Response::Logger
|
70
|
+
def call(env)
|
71
|
+
debug('response') { dump_body(env[:body]) }
|
72
|
+
super
|
73
|
+
end
|
74
|
+
|
75
|
+
def on_complete(env)
|
76
|
+
debug('response') { dump_body(env[:body]) }
|
77
|
+
super
|
78
|
+
end
|
79
|
+
|
80
|
+
def dump_body(body)
|
81
|
+
if body.respond_to?(:to_str)
|
82
|
+
body.to_str
|
83
|
+
else
|
84
|
+
pretty_inspect(body)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def pretty_inspect(body)
|
89
|
+
require 'pp' unless body.respond_to?(:pretty_inspect)
|
90
|
+
body.pretty_inspect
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Code42
|
2
|
+
module API
|
3
|
+
module Destination
|
4
|
+
def destinations
|
5
|
+
objects_from_response(Code42::Destination, :get, 'destinations', key: 'destinations')
|
6
|
+
end
|
7
|
+
|
8
|
+
def destination(id)
|
9
|
+
object_from_response(Code42::Destination, :get, "destination/#{id}")
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_destination(attrs)
|
13
|
+
response = post('Destination', attrs)
|
14
|
+
response && response['data'].is_a?(Array)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/code42/api/org.rb
CHANGED
@@ -68,11 +68,11 @@ module Code42
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def activate_org(id = 'my', attrs = {})
|
71
|
-
object_from_response(Code42::Org, :delete, "
|
71
|
+
object_from_response(Code42::Org, :delete, "OrgDeactivation/#{id}", attrs)
|
72
72
|
end
|
73
73
|
|
74
74
|
def deactivate_org(id = 'my', attrs = {})
|
75
|
-
object_from_response(Code42::Org, :put, "
|
75
|
+
object_from_response(Code42::Org, :put, "OrgDeactivation/#{id}", attrs)
|
76
76
|
end
|
77
77
|
|
78
78
|
def block_org(id = 'my', attrs = {})
|
@@ -83,6 +83,9 @@ module Code42
|
|
83
83
|
object_from_response(Code42::Org, :delete, "orgBlock/#{id}", attrs)
|
84
84
|
end
|
85
85
|
|
86
|
+
def org_share_destinations(id)
|
87
|
+
get("orgShareDestinations/#{id}")['data']
|
88
|
+
end
|
86
89
|
|
87
90
|
end
|
88
91
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Code42
|
2
|
+
module API
|
3
|
+
module ProductLicense
|
4
|
+
def product_licenses
|
5
|
+
objects_from_response(Code42::ProductLicense, :get, 'productLicense', key: 'products')
|
6
|
+
end
|
7
|
+
|
8
|
+
def remove_product_license(id)
|
9
|
+
delete("productLicense/#{id}")
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_product_license(license_key)
|
13
|
+
attrs = {
|
14
|
+
product_license: license_key,
|
15
|
+
key: 'products'
|
16
|
+
}
|
17
|
+
objects_from_response(Code42::ProductLicense, :put, 'productLicense', attrs)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Code42
|
2
|
+
module API
|
3
|
+
module Server
|
4
|
+
def servers(params = {})
|
5
|
+
objects_from_response(Code42::Server, :get, 'server', params.merge(key: 'servers'))
|
6
|
+
end
|
7
|
+
|
8
|
+
def server(id, params = {})
|
9
|
+
if id.is_a? Fixnum
|
10
|
+
object_from_response(Code42::Server, :get, "server/#{id}", params)
|
11
|
+
elsif id.is_a? String
|
12
|
+
servers(params.merge(q: id)).first
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_server(attrs)
|
17
|
+
object_from_response(Code42::Server, :post, 'server', attrs)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Code42
|
2
|
+
module API
|
3
|
+
module ServerSettings
|
4
|
+
def server_settings(id)
|
5
|
+
object_from_response(Code42::ServerSettings, :get, "serverSettings/#{id}")
|
6
|
+
end
|
7
|
+
|
8
|
+
def update_server_settings(id, attrs)
|
9
|
+
put("serverSettings/#{id}", attrs)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Code42
|
2
|
+
module API
|
3
|
+
module StorePoint
|
4
|
+
|
5
|
+
def find_store_points_by_name(name, params = {})
|
6
|
+
objects_from_response(Code42::StorePoint, :get, 'storePoint', params.merge(key: 'storepoints', q: name))
|
7
|
+
end
|
8
|
+
|
9
|
+
def find_store_point_by_id(id, params = {})
|
10
|
+
object_from_response(Code42::StorePoint, :get, "storePoint/#{id}", params)
|
11
|
+
end
|
12
|
+
|
13
|
+
def store_points(params = {})
|
14
|
+
objects_from_response(Code42::StorePoint, :get, 'storePoint', params.merge(key: 'storepoints'))
|
15
|
+
end
|
16
|
+
|
17
|
+
def update_store_point(id, params)
|
18
|
+
object_from_response(Code42::StorePoint, :put, "storePoint/#{id}", params)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/code42/api/token.rb
CHANGED
@@ -8,6 +8,13 @@ module Code42
|
|
8
8
|
object_from_response(Code42::Token, :post, "authToken")
|
9
9
|
end
|
10
10
|
|
11
|
+
def apply_mlk(mlk, attrs)
|
12
|
+
settings.mlk = mlk
|
13
|
+
response = object_from_response(Code42::Token, :post, 'authToken', attrs)
|
14
|
+
settings.mlk = nil
|
15
|
+
response
|
16
|
+
end
|
17
|
+
|
11
18
|
# Returns LoginToken and ServerUrl
|
12
19
|
# @return [CrashPlan::Token] Token to pass to ServerUrl's AuthToken resource
|
13
20
|
def get_login_token
|
data/lib/code42/client.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'forwardable'
|
1
2
|
require 'json'
|
2
3
|
Dir[File.dirname(__FILE__) + '/api/*.rb'].each { |file| require file }
|
3
4
|
|
@@ -8,10 +9,21 @@ module Code42
|
|
8
9
|
include Code42::API::Org
|
9
10
|
include Code42::API::Computer
|
10
11
|
include Code42::API::Token
|
12
|
+
include Code42::API::ProductLicense
|
13
|
+
include Code42::API::ServerSettings
|
14
|
+
include Code42::API::Destination
|
15
|
+
include Code42::API::Server
|
11
16
|
include Code42::API::PasswordReset
|
17
|
+
include Code42::API::StorePoint
|
18
|
+
include Code42::API::Diagnostic
|
19
|
+
include Code42::API::ServerConnectionString
|
12
20
|
|
13
21
|
attr_reader :settings
|
14
22
|
|
23
|
+
extend Forwardable
|
24
|
+
|
25
|
+
instance_delegate make_request: :connection
|
26
|
+
|
15
27
|
def initialize(options = {})
|
16
28
|
self.settings = options
|
17
29
|
end
|
@@ -43,25 +55,6 @@ module Code42
|
|
43
55
|
settings.token = token.to_s
|
44
56
|
end
|
45
57
|
|
46
|
-
def diagnostic
|
47
|
-
object_from_response(Diagnostic, :get, 'diagnostic')
|
48
|
-
end
|
49
|
-
|
50
|
-
# Block a computer from backing up
|
51
|
-
# @return [Code42::Computer] The blocked computer
|
52
|
-
# @params id [Integer, String] The computer ID you want to block
|
53
|
-
def block_computer(id)
|
54
|
-
put("computerblock/#{id}")
|
55
|
-
end
|
56
|
-
|
57
|
-
def unblock_computer(id)
|
58
|
-
delete("computerblock/#{id}")
|
59
|
-
end
|
60
|
-
|
61
|
-
def deactivate_org(id)
|
62
|
-
put("OrgDeactivation/#{id}")
|
63
|
-
end
|
64
|
-
|
65
58
|
def connection
|
66
59
|
@connection ||= begin
|
67
60
|
connection = Connection.new
|
@@ -80,6 +73,9 @@ module Code42
|
|
80
73
|
if settings.token
|
81
74
|
@connection.token = settings.token
|
82
75
|
end
|
76
|
+
if settings.mlk
|
77
|
+
@connection.mlk = settings.mlk
|
78
|
+
end
|
83
79
|
@connection
|
84
80
|
end
|
85
81
|
|
@@ -120,24 +116,20 @@ module Code42
|
|
120
116
|
array.map { |element| klass.deserialize_and_initialize(element, self) }
|
121
117
|
end
|
122
118
|
|
123
|
-
def get(path, data = {})
|
124
|
-
make_request(:get, path, data)
|
125
|
-
end
|
126
|
-
|
127
|
-
def post(path, data = {})
|
128
|
-
make_request(:post, path, data)
|
119
|
+
def get(path, data = {}, &block)
|
120
|
+
make_request(:get, path, data, &block)
|
129
121
|
end
|
130
122
|
|
131
|
-
def
|
132
|
-
make_request(:
|
123
|
+
def post(path, data = {}, &block)
|
124
|
+
make_request(:post, path, data, &block)
|
133
125
|
end
|
134
126
|
|
135
|
-
def
|
136
|
-
make_request(:
|
127
|
+
def put(path, data = {}, &block)
|
128
|
+
make_request(:put, path, data, &block)
|
137
129
|
end
|
138
130
|
|
139
|
-
def
|
140
|
-
|
131
|
+
def delete(path, data = {}, &block)
|
132
|
+
make_request(:delete, path, data, &block)
|
141
133
|
end
|
142
134
|
end
|
143
135
|
end
|
data/lib/code42/computer.rb
CHANGED
data/lib/code42/connection.rb
CHANGED
@@ -6,7 +6,7 @@ require 'code42/error'
|
|
6
6
|
|
7
7
|
module Code42
|
8
8
|
class Connection
|
9
|
-
attr_accessor :host, :port, :scheme, :path_prefix, :username, :password, :adapter, :token, :verify_https, :logger, :last_response
|
9
|
+
attr_accessor :host, :port, :scheme, :path_prefix, :username, :password, :adapter, :token, :verify_https, :logger, :mlk, :last_response
|
10
10
|
|
11
11
|
def initialize(options = {})
|
12
12
|
self.host = options[:host]
|
@@ -21,8 +21,10 @@ module Code42
|
|
21
21
|
|
22
22
|
extend Forwardable
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
instance_delegate %i(host port path_prefix scheme) => :adapter
|
25
|
+
instance_delegate %i(host= port= path_prefix= scheme=) => :adapter
|
26
|
+
|
27
|
+
instance_delegate %i(get post put delete) => :adapter
|
26
28
|
|
27
29
|
def verify_https=(verify_https)
|
28
30
|
adapter.ssl[:verify] = verify_https
|
@@ -58,6 +60,12 @@ module Code42
|
|
58
60
|
@token
|
59
61
|
end
|
60
62
|
|
63
|
+
def mlk=(mlk)
|
64
|
+
@mlk = mlk
|
65
|
+
adapter.headers['C42-MasterLicenseKey'] = "BASIC #{mlk}"
|
66
|
+
@mlk
|
67
|
+
end
|
68
|
+
|
61
69
|
def username=(username)
|
62
70
|
@username = username
|
63
71
|
adapter.basic_auth(username, password) if has_valid_credentials?
|
@@ -68,9 +76,9 @@ module Code42
|
|
68
76
|
adapter.basic_auth(username, password) if has_valid_credentials?
|
69
77
|
end
|
70
78
|
|
71
|
-
def make_request(method, *args)
|
79
|
+
def make_request(method, *args, &block)
|
72
80
|
begin
|
73
|
-
@last_response = response = self.send(method, *args)
|
81
|
+
@last_response = response = self.send(method, *args, &block)
|
74
82
|
ActiveSupport::Notifications.instrument('code42.request', {
|
75
83
|
method: method,
|
76
84
|
args: args,
|
@@ -83,29 +91,9 @@ module Code42
|
|
83
91
|
response.body
|
84
92
|
end
|
85
93
|
|
86
|
-
def get(path, data)
|
87
|
-
adapter.get(path, data)
|
88
|
-
end
|
89
|
-
|
90
|
-
def put(path, data)
|
91
|
-
adapter.put path, data
|
92
|
-
end
|
93
|
-
|
94
|
-
def post(path, data)
|
95
|
-
adapter.post path, data
|
96
|
-
end
|
97
|
-
|
98
|
-
def delete(path, data)
|
99
|
-
adapter.delete(path, data)
|
100
|
-
end
|
101
|
-
|
102
|
-
def respond_to?(method_name, include_private = false)
|
103
|
-
adapter.respond_to?(method_name, include_private) || super
|
104
|
-
end if RUBY_VERSION < "1.9"
|
105
|
-
|
106
94
|
def respond_to_missing?(method_name, include_private = false)
|
107
95
|
adapter.respond_to?(method_name, include_private) || super
|
108
|
-
end
|
96
|
+
end
|
109
97
|
|
110
98
|
private
|
111
99
|
|