code42 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/.gitignore +1 -0
  2. data/README.md +82 -64
  3. data/Rakefile +5 -0
  4. data/code42.gemspec +6 -6
  5. data/lib/code42/api/computer.rb +22 -0
  6. data/lib/code42/api/org.rb +60 -0
  7. data/lib/code42/api/role.rb +24 -0
  8. data/lib/code42/api/token.rb +32 -0
  9. data/lib/code42/api/user.rb +72 -0
  10. data/lib/code42/client.rb +7 -178
  11. data/lib/code42/user.rb +8 -0
  12. data/lib/code42/version.rb +1 -1
  13. data/spec/cassettes/Code42_Client/_create_org/returns_created_org.yml +8 -8
  14. data/spec/cassettes/Code42_Client/_create_user/returns_created_user.yml +6 -6
  15. data/spec/cassettes/Code42_Client/_create_user/when_sending_an_invalid_email/raises_an_exception.yml +2 -2
  16. data/spec/cassettes/Code42_Client/_find_org_by_name/returns_the_org_with_the_specified_name.yml +12 -58
  17. data/spec/cassettes/Code42_Client/_get_token/returns_valid_tokens.yml +5 -5
  18. data/spec/cassettes/Code42_Client/_get_token/when_providing_invalid_credentials/should_raise_an_exception.yml +2 -2
  19. data/spec/cassettes/Code42_Client/_org/when_ID_is_not_passed/returns_my_org.yml +11 -11
  20. data/spec/cassettes/Code42_Client/_org/when_ID_is_passed_in/returns_a_specific_org.yml +11 -11
  21. data/spec/cassettes/Code42_Client/_ping/returns_a_ping.yml +5 -5
  22. data/spec/cassettes/Code42_Client/_user/when_ID_is_not_passed/returns_my_user.yml +10 -10
  23. data/spec/cassettes/Code42_Client/_user/when_ID_is_passed_in/returns_a_specific_user.yml +10 -10
  24. data/spec/cassettes/Code42_Client/_user/when_blocked/returns_the_blocked_status.yml +84 -0
  25. data/spec/cassettes/Code42_Client/_user/when_unblocked/returns_the_blocked_status.yml +113 -0
  26. data/spec/cassettes/Code42_Client/_user_roles/returns_an_enumerable.yml +7 -7
  27. data/spec/cassettes/Code42_Client/_validate_token/returns_a_valid_response.yml +10 -10
  28. data/spec/{crashplan → code42}/client_spec.rb +26 -5
  29. data/spec/{crashplan → code42}/connection_spec.rb +0 -0
  30. data/spec/{crashplan → code42}/org_spec.rb +0 -0
  31. data/spec/{crashplan → code42}/ping_spec.rb +0 -0
  32. data/spec/{crashplan → code42}/resource_spec.rb +0 -0
  33. data/spec/{crashplan → code42}/role_spec.rb +0 -0
  34. data/spec/{crashplan → code42}/settings_spec.rb +0 -0
  35. data/spec/{crashplan → code42}/token_spec.rb +0 -0
  36. data/spec/{crashplan → code42}/user_spec.rb +0 -0
  37. metadata +49 -66
  38. data/spec/cassettes/Crashplan_Client/_create_org/returns_created_org.yml +0 -47
  39. data/spec/cassettes/Crashplan_Client/_create_user/returns_created_user.yml +0 -44
  40. data/spec/cassettes/Crashplan_Client/_create_user/when_sending_an_invalid_email/raises_an_exception.yml +0 -37
  41. data/spec/cassettes/Crashplan_Client/_find_org_by_name/returns_the_org_with_the_specified_name.yml +0 -55
  42. data/spec/cassettes/Crashplan_Client/_get_token/returns_valid_tokens.yml +0 -38
  43. data/spec/cassettes/Crashplan_Client/_get_token/when_providing_invalid_credentials/should_raise_an_exception.yml +0 -37
  44. data/spec/cassettes/Crashplan_Client/_org/when_ID_is_not_passed/returns_my_org.yml +0 -54
  45. data/spec/cassettes/Crashplan_Client/_org/when_ID_is_passed_in/returns_a_specific_org.yml +0 -54
  46. data/spec/cassettes/Crashplan_Client/_ping/returns_a_ping.yml +0 -48
  47. data/spec/cassettes/Crashplan_Client/_user/when_ID_is_not_passed/returns_my_user.yml +0 -99
  48. data/spec/cassettes/Crashplan_Client/_user/when_ID_is_passed_in/returns_a_specific_user.yml +0 -53
  49. data/spec/cassettes/Crashplan_Client/_user_roles/returns_an_enumerable.yml +0 -50
  50. data/spec/cassettes/Crashplan_Client/_validate_token/returns_a_valid_response.yml +0 -128
data/.gitignore CHANGED
@@ -16,3 +16,4 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  .DS_Store
19
+ bin/*
data/README.md CHANGED
@@ -6,42 +6,52 @@ A Ruby interface to the Code 42 API
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- gem 'code42'
9
+ ```ruby
10
+ gem 'code42'
11
+ ```
10
12
 
11
13
  And then execute:
12
14
 
13
- $ bundle
15
+ ```bash
16
+ $ bundle
17
+ ```
14
18
 
15
19
  Or install it yourself as:
16
20
 
17
- $ gem install code42
21
+ ```bash
22
+ $ gem install code42
23
+ ```
18
24
 
19
25
  ## Configuration
20
26
 
21
- client = Code42::Client.new(
22
- host: 'staging.code42.com',
23
- port: 1234,
24
- https: true,
25
- api_root: '/api/',
26
- username: 'testuser',
27
- password: 'letmein'
28
- )
27
+ ```ruby
28
+ client = Code42::Client.new(
29
+ host: 'staging.code42.com',
30
+ port: 1234,
31
+ https: true,
32
+ api_root: '/api/',
33
+ username: 'testuser',
34
+ password: 'letmein'
35
+ )
36
+ ```
29
37
 
30
38
  ### Authentication
31
39
 
32
- ```
40
+ ```ruby
33
41
  token = client.get_token
34
42
  ```
35
43
 
36
44
  Then you can pass this token for further requests:
37
45
 
38
- client = Code42::Client.new(
39
- host: 'staging.code42.com',
40
- port: 1234,
41
- https: true,
42
- api_root: '/api/',
43
- token: token
44
- )
46
+ ```ruby
47
+ client = Code42::Client.new(
48
+ host: 'staging.code42.com',
49
+ port: 1234,
50
+ https: true,
51
+ api_root: '/api/',
52
+ token: token
53
+ )
54
+ ```
45
55
 
46
56
  ## Resources
47
57
 
@@ -49,85 +59,89 @@ Then you can pass this token for further requests:
49
59
 
50
60
  attributes:
51
61
 
52
- [:id,
53
- :uid,
54
- :status,
55
- :username,
56
- :email,
57
- :first_name,
58
- :last_name,
59
- :quota_in_bytes,
60
- :org_id,
61
- :org_uid,
62
- :org_name,
63
- :active,
64
- :blocked,
65
- :email_promo,
66
- :invited,
67
- :org_type,
68
- :username_is_an_email,
69
- :created_at,
70
- :updated_at]
62
+ ```ruby
63
+ [:id,
64
+ :uid,
65
+ :status,
66
+ :username,
67
+ :email,
68
+ :first_name,
69
+ :last_name,
70
+ :quota_in_bytes,
71
+ :org_id,
72
+ :org_uid,
73
+ :org_name,
74
+ :active,
75
+ :blocked,
76
+ :email_promo,
77
+ :invited,
78
+ :org_type,
79
+ :username_is_an_email,
80
+ :created_at,
81
+ :updated_at]
82
+ ```
71
83
 
72
84
  ### Org
73
85
 
74
86
  attributes:
75
87
 
76
- [:id,
77
- :uid,
78
- :name,
79
- :status,
80
- :active,
81
- :blocked,
82
- :parent_id,
83
- :type,
84
- :external_id,
85
- :hierarchy_counts,
86
- :config_inheritance_counts,
87
- :created_at,
88
- :updated_at,
89
- :registration_key,
90
- :reporting,
91
- :custom_config,
92
- :settings,
93
- :settings_inherited,
94
- :settings_summary]
88
+ ```ruby
89
+ [:id,
90
+ :uid,
91
+ :name,
92
+ :status,
93
+ :active,
94
+ :blocked,
95
+ :parent_id,
96
+ :type,
97
+ :external_id,
98
+ :hierarchy_counts,
99
+ :config_inheritance_counts,
100
+ :created_at,
101
+ :updated_at,
102
+ :registration_key,
103
+ :reporting,
104
+ :custom_config,
105
+ :settings,
106
+ :settings_inherited,
107
+ :settings_summary]
108
+ ```
95
109
 
96
110
  ## Usage
97
111
 
98
112
  ### Ping a host
99
113
 
100
- ```
114
+ ```ruby
101
115
  success = client.ping.success?
102
116
  ```
103
117
 
104
118
  ### Fetch the currently authorized API user
105
119
 
106
- ```
120
+ ```ruby
107
121
  user = client.user
108
122
  ```
109
123
 
110
- ### Get the get a user by ID
124
+ ### Fetch a user by ID
111
125
 
112
- ```
126
+ ```ruby
113
127
  user = client.user(42)
114
128
  ```
115
129
 
116
130
  ### Fetch the Org for the currently authorized API user
117
131
 
118
- ```
132
+ ```ruby
119
133
  org = client.org
120
134
  ```
121
135
 
122
136
  ### Fetch a specific Org by ID
123
137
 
124
- ```
138
+ ```ruby
125
139
  org = client.org(42)
126
140
  ```
127
141
 
128
142
  ### Validate a token
129
143
 
130
- ```
144
+ ```ruby
131
145
  client.validate_token(token).valid?
132
146
  ```
133
147
 
@@ -149,6 +163,10 @@ https://github.com/code42/code42_api_ruby/wiki
149
163
 
150
164
  [@melissavoegeli](http://github.com/melissavoegeli)
151
165
 
166
+ ## Contributors
167
+
168
+ [@jrmehle](http://github.com/jrmehle)
169
+
152
170
  # Code 42 README
153
171
 
154
172
  ## What is this?
data/Rakefile CHANGED
@@ -1 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -12,12 +12,12 @@ Gem::Specification.new do |gem|
12
12
  gem.summary = %q{...}
13
13
  gem.homepage = ""
14
14
 
15
- gem.add_development_dependency 'rspec'
16
- gem.add_development_dependency 'webmock'
17
- gem.add_development_dependency 'vcr'
18
- gem.add_dependency 'faraday'
19
- gem.add_dependency 'activesupport', '~> 3.2.0'
20
- gem.add_dependency 'faraday_middleware'
15
+ gem.add_development_dependency 'rspec', '~> 2.11.0'
16
+ gem.add_development_dependency 'webmock', '~> 1.11.0'
17
+ gem.add_development_dependency 'vcr', '~> 2.4.0'
18
+ gem.add_dependency 'faraday', '~> 0.8.7'
19
+ gem.add_dependency 'activesupport', '~> 3.2.0'
20
+ gem.add_dependency 'faraday_middleware', '~> 0.9.0'
21
21
 
22
22
  gem.files = `git ls-files`.split($/)
23
23
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -0,0 +1,22 @@
1
+ module Code42
2
+ module API
3
+ module Computer
4
+ ### Computers :get, :put ###
5
+
6
+ # Returns one computer or http status 404
7
+ # @return [Code42::Computer] The requested computer
8
+ # @param id [String, Integer] A computer ID
9
+ def computer(id, params = {})
10
+ object_from_response(Code42::Computer, :get, "computer/#{id}", params)
11
+ end
12
+
13
+ # Returns a list of computers
14
+ # @return [Array] The list of computers
15
+ # @param params [Hash] A hash of valid search parameters for computers
16
+ def computers(params = {})
17
+ params.merge!(key: 'computers')
18
+ objects_from_response(Code42::Computer, :get, 'computer', params)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,60 @@
1
+ module Code42
2
+ module API
3
+ module Org
4
+ ### Orgs :post, :get, :put, :delete ###
5
+
6
+ # Creates blue org as well as user for the org
7
+ # @return [Code42::Org] The created org
8
+ # @param attrs [Hash] A hash of attributes to assign to created org
9
+ # @example
10
+ # client.create_org(:company => "test", :email => "test@test.com", :firstname => "test", :lastname => "test")
11
+ def create_pro_org(attrs = {})
12
+ object_from_response(Code42::Org, :post, "proOrgChannel", attrs)
13
+ end
14
+
15
+ # Creates an org
16
+ # @return [Code42::Org] The created org
17
+ # @param attrs [Hash] A hash of attributes to assign to created org
18
+ # @example
19
+ # client.create_org(:name => 'Acme Org', :parent_id => 2)
20
+ def create_org(attrs = {})
21
+ object_from_response(Code42::Org, :post, "org", attrs)
22
+ end
23
+
24
+ # Returns information for a given org
25
+ # @return [Code42::Org] The requested org
26
+ # @param id [String, Integer] A code42 user ID
27
+ def org(id = "my", params = {})
28
+ object_from_response(Code42::Org, :get, "org/#{id}", params)
29
+ end
30
+
31
+ # Returns an org for a given name
32
+ # @return [Code42::Org] The requested org
33
+ # @param name [String] A Code42 org name
34
+ # FIXME: This needs to change when the API implements a better way.
35
+ def find_org_by_name(name)
36
+ search_orgs(name).select { |o| o.name == name }.first
37
+ end
38
+
39
+ # Searches orgs for a query string
40
+ # @return [Array] An array of matching orgs
41
+ # @param query [String] A string to search for
42
+ def search_orgs(query)
43
+ orgs(q: query)
44
+ end
45
+
46
+ # Returns a list of up to 100 orgs
47
+ # @return [Array] An array of matching orgs
48
+ # @param params [Hash] A hash of parameters to match results against
49
+ def orgs(params = {})
50
+ params.merge!(key: 'orgs')
51
+ objects_from_response(Code42::Org, :get, 'org', params)
52
+ end
53
+
54
+ def update_org(id = 'my', attrs = {})
55
+ object_from_response(Code42::Org, :put, "org/#{id}", attrs)
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,24 @@
1
+ module Code42
2
+ module API
3
+ module Role
4
+ ### Roles :post, :get ###
5
+
6
+ # Assigns a role to a user
7
+ # @return [Code42::Role] The assigned role
8
+ # @param attrs [Hash] A hash of attributes for assigning a user role
9
+ # @example
10
+ # client.assign_role(:user_id => 2, :role_name => 'Admin')
11
+ def assign_role(attrs = {})
12
+ object_from_response(Code42::Role, :post, 'UserRole', attrs)
13
+ end
14
+
15
+ # Returns a list of roles for a given user
16
+ # @return [Code42::RoleCollection] A collection of matching roles
17
+ # @param id [String, Integer] The id of the user to return roles for
18
+ def user_roles(id = 'my')
19
+ collection_from_response(Code42::RoleCollection, Code42::Role, :get, "userRole/#{id}")
20
+ end
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,32 @@
1
+ module Code42
2
+ module API
3
+ module Token
4
+ ### Authentication With Tokens :post, :get, :delete ###
5
+
6
+ # Gets a token for the currently authorized user
7
+ def get_token
8
+ object_from_response(Code42::Token, :post, "authToken")
9
+ end
10
+
11
+ # Returns LoginToken and ServerUrl
12
+ # @return [CrashPlan::Token] Token to pass to ServerUrl's AuthToken resource
13
+ def get_login_token
14
+ object_from_response(Code42::Token, :post, "loginToken")
15
+ end
16
+
17
+ # Validates an authorization token
18
+ # @return [Code42::TokenValidation]
19
+ # @param token [Code42::Token, String] The token to validate
20
+ def validate_token(token)
21
+ object_from_response(Code42::TokenValidation, :get, "authToken/#{token.to_s}")
22
+ end
23
+
24
+ # Manually expires a token
25
+ # @param token [Code42::Token, String] A token to expire (leave blank to expire currently used token)
26
+ def delete_token(token = nil)
27
+ token = token || settings.token
28
+ delete "authToken/#{token.to_s}"
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,72 @@
1
+ module Code42
2
+ module API
3
+ module User
4
+ ### Users :post, :get ###
5
+
6
+ # Creates a user
7
+ # @return [Code42::User] The created user
8
+ # @param attrs [Hash] A hash of attributes to assign to created user
9
+ # @example
10
+ # client.create_user(:username => 'testuser', password: 'letmein', email: 'test@example.com', org_id: 3)
11
+ def create_user(attrs = {})
12
+ object_from_response(Code42::User, :post, "user", attrs)
13
+ end
14
+
15
+ # Returns information for a given user
16
+ # @return [Code42::User] The requested user
17
+ # @param id_or_username [String, Integer] A code42 user ID or username
18
+ def user(id_or_username = "my", params = {})
19
+ if id_or_username.is_a?(Fixnum) || id_or_username == 'my'
20
+ find_user_by_id id_or_username, params
21
+ else
22
+ find_user_by_username id_or_username, params
23
+ end
24
+ end
25
+
26
+ # Returns a user for a given id
27
+ def find_user_by_id(id = 'my', params = {})
28
+ object_from_response(Code42::User, :get, "user/#{id}", params)
29
+ end
30
+
31
+ # Returns a user for a given username
32
+ def find_user_by_username(username, params = {})
33
+ params.merge!(username: username)
34
+ users(params).first
35
+ end
36
+
37
+ # Returns a user for a given channel id
38
+ # @return [Code42::User] The requested user
39
+ # @param channel_id [String, Integer] A code42 User
40
+ def find_user_by_channel_id(channel_id = 1)
41
+ object_from_response(Code42::User, :get, "userChannel?channelCustomerId=#{channel_id}")
42
+ end
43
+
44
+ # Returns a list of up to 100 users
45
+ # @return [Array] An array of matching users
46
+ # @param params [Hash] A hash of parameters to match results against
47
+ def users(params = {})
48
+ params.merge!(key: 'users')
49
+ objects_from_response(Code42::User, :get, 'user', params)
50
+ end
51
+
52
+ # Check if user exists with given username.
53
+ def user_exists?(username)
54
+ users(username: username).present?
55
+ end
56
+
57
+ # Block a user from logging in
58
+ # @return true if blocked
59
+ # @params id [Integer, String] The user ID you want to block
60
+ def block_user(id)
61
+ put("UserBlock/#{id}")
62
+ end
63
+
64
+ # Unblock a previously blocked user
65
+ # @return true if unblocked
66
+ # @params id [Integer, String] The user ID you want to unblock
67
+ def unblock_user(id)
68
+ delete("UserBlock/#{id}")
69
+ end
70
+ end
71
+ end
72
+ end