cyclid-client 0.3.0
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.
- checksums.yaml +7 -0
- data/LICENSE +174 -0
- data/README.md +587 -0
- data/bin/cyclid +20 -0
- data/lib/cyclid/auth_methods.rb +25 -0
- data/lib/cyclid/cli.rb +90 -0
- data/lib/cyclid/cli/admin.rb +32 -0
- data/lib/cyclid/cli/admin/organization.rb +122 -0
- data/lib/cyclid/cli/admin/user.rb +142 -0
- data/lib/cyclid/cli/job.rb +114 -0
- data/lib/cyclid/cli/organization.rb +129 -0
- data/lib/cyclid/cli/organization/config.rb +90 -0
- data/lib/cyclid/cli/organization/member.rb +126 -0
- data/lib/cyclid/cli/secret.rb +42 -0
- data/lib/cyclid/cli/stage.rb +121 -0
- data/lib/cyclid/cli/user.rb +84 -0
- data/lib/cyclid/client.rb +98 -0
- data/lib/cyclid/client/api.rb +114 -0
- data/lib/cyclid/client/api/basic.rb +30 -0
- data/lib/cyclid/client/api/hmac.rb +59 -0
- data/lib/cyclid/client/api/none.rb +29 -0
- data/lib/cyclid/client/api/token.rb +30 -0
- data/lib/cyclid/client/auth.rb +36 -0
- data/lib/cyclid/client/health.rb +34 -0
- data/lib/cyclid/client/job.rb +88 -0
- data/lib/cyclid/client/organization.rb +187 -0
- data/lib/cyclid/client/stage.rb +79 -0
- data/lib/cyclid/client/user.rb +134 -0
- data/lib/cyclid/config.rb +92 -0
- metadata +157 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
# Copyright 2016 Liqwyd Ltd.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Cyclid
|
16
|
+
module Client
|
17
|
+
# Authentication related methods
|
18
|
+
module Auth
|
19
|
+
# Retrieve a JWT token from the server.
|
20
|
+
# @param username [String] User name of the user to retrieve a token for.
|
21
|
+
# @param claims [Hash] additional JWT claims to append to the token.
|
22
|
+
# @return [Hash] Decoded server response object.
|
23
|
+
# @example Request a simple token
|
24
|
+
# token_data = token_get
|
25
|
+
# @example Request a token with a CSRF injected into the claims
|
26
|
+
# token_data = token_get(csrf: 'abcdef0123456789')
|
27
|
+
def token_get(username, claims = {})
|
28
|
+
uri = server_uri("/token/#{username}")
|
29
|
+
res_data = api_json_post(uri, claims)
|
30
|
+
@logger.debug res_data
|
31
|
+
|
32
|
+
return res_data
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Copyright 2016 Liqwyd Ltd.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Cyclid
|
16
|
+
module Client
|
17
|
+
# Health-check related methods
|
18
|
+
module Health
|
19
|
+
# Ping the API server.
|
20
|
+
# @return [Boolean] True if the API server is healthy, false if it is unhealthy.
|
21
|
+
def health_ping
|
22
|
+
uri = server_uri('/health/status')
|
23
|
+
|
24
|
+
# We need to do without the API helpers as the health endpoint won't
|
25
|
+
# return any data, just an HTTP status
|
26
|
+
req = authenticate_request(Net::HTTP::Get.new(uri), uri)
|
27
|
+
http = Net::HTTP.new(uri.hostname, uri.port)
|
28
|
+
res = http.request(req)
|
29
|
+
|
30
|
+
return res.code == '200'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# Copyright 2016 Liqwyd Ltd.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Cyclid
|
16
|
+
module Client
|
17
|
+
# Job related methods
|
18
|
+
module Job
|
19
|
+
# Submit a job
|
20
|
+
# @param organization [String] Organization name.
|
21
|
+
# @param job [String] Raw job data in either JSON or YAML
|
22
|
+
# @param type [String] Job data format; either 'json' or 'yaml'
|
23
|
+
# @return [Hash] Decoded server response object.
|
24
|
+
# @example Submit a job in JSON format
|
25
|
+
# job = File.read('job.json')
|
26
|
+
# job_submit('example', job, 'json')
|
27
|
+
# @example Submit a job in YAML format
|
28
|
+
# job = File.read('job.yml')
|
29
|
+
# job_submit('example', job, 'yaml')
|
30
|
+
def job_submit(organization, job, type)
|
31
|
+
uri = server_uri("/organizations/#{organization}/jobs")
|
32
|
+
case type
|
33
|
+
when 'yaml'
|
34
|
+
res_data = api_raw_post(uri, job, 'application/x-yaml')
|
35
|
+
when 'json'
|
36
|
+
res_data = api_raw_post(uri, job, 'application/json')
|
37
|
+
else
|
38
|
+
raise "Unknown job format #{type}"
|
39
|
+
end
|
40
|
+
@logger.debug res_data
|
41
|
+
|
42
|
+
return res_data
|
43
|
+
end
|
44
|
+
|
45
|
+
# Get details of a job
|
46
|
+
# @param organization [String] Organization name.
|
47
|
+
# @param jobid [Integer] Job ID to retrieve. The ID must be a valid job for the organization.
|
48
|
+
# @return [Hash] Decoded server response object.
|
49
|
+
# @see #job_status
|
50
|
+
# @see #job_log
|
51
|
+
def job_get(organization, jobid)
|
52
|
+
uri = server_uri("/organizations/#{organization}/jobs/#{jobid}")
|
53
|
+
res_data = api_get(uri)
|
54
|
+
@logger.debug res_data
|
55
|
+
|
56
|
+
return res_data
|
57
|
+
end
|
58
|
+
|
59
|
+
# Get a job status
|
60
|
+
# @param organization [String] Organization name.
|
61
|
+
# @param jobid [Integer] Job ID to retrieve. The ID must be a valid job for the organization.
|
62
|
+
# @return [Hash] Decoded server response object.
|
63
|
+
# @see #job_get
|
64
|
+
# @see #job_log
|
65
|
+
def job_status(organization, jobid)
|
66
|
+
uri = server_uri("/organizations/#{organization}/jobs/#{jobid}/status")
|
67
|
+
res_data = api_get(uri)
|
68
|
+
@logger.debug res_data
|
69
|
+
|
70
|
+
return res_data
|
71
|
+
end
|
72
|
+
|
73
|
+
# Get a job log
|
74
|
+
# @param organization [String] Organization name.
|
75
|
+
# @param jobid [Integer] Job ID to retrieve. The ID must be a valid job for the organization.
|
76
|
+
# @return [Hash] Decoded server response object.
|
77
|
+
# @see #job_get
|
78
|
+
# @see #job_status
|
79
|
+
def job_log(organization, jobid)
|
80
|
+
uri = server_uri("/organizations/#{organization}/jobs/#{jobid}/log")
|
81
|
+
res_data = api_get(uri)
|
82
|
+
@logger.debug res_data
|
83
|
+
|
84
|
+
return res_data
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
# Copyright 2016 Liqwyd Ltd.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Cyclid
|
16
|
+
module Client
|
17
|
+
# Organization related methods
|
18
|
+
module Organization
|
19
|
+
# Retrieve the list of organizations from a server
|
20
|
+
# @return [Array] List of organization names.
|
21
|
+
def org_list
|
22
|
+
uri = server_uri('/organizations')
|
23
|
+
res_data = api_get(uri)
|
24
|
+
@logger.debug res_data
|
25
|
+
|
26
|
+
orgs = []
|
27
|
+
res_data.each do |item|
|
28
|
+
orgs << item['name']
|
29
|
+
end
|
30
|
+
|
31
|
+
return orgs
|
32
|
+
end
|
33
|
+
|
34
|
+
# Get details of a specific organization
|
35
|
+
# @param name [String] organization name.
|
36
|
+
# @return [Hash] Decoded server response object.
|
37
|
+
def org_get(name)
|
38
|
+
uri = server_uri("/organizations/#{name}")
|
39
|
+
res_data = api_get(uri)
|
40
|
+
@logger.debug res_data
|
41
|
+
|
42
|
+
return res_data
|
43
|
+
end
|
44
|
+
|
45
|
+
# Create a new organization. The organization is created without any
|
46
|
+
# members; use org_modify to add a set of users to the organization
|
47
|
+
# after it has been created.
|
48
|
+
#
|
49
|
+
# @param name [String] organization name.
|
50
|
+
# @param email [String] organization owners email address.
|
51
|
+
# @return [Hash] Decoded server response object.
|
52
|
+
# @example Create a new organization 'example'
|
53
|
+
# new_org = org_add('example', 'admin@example.com')
|
54
|
+
# @see #org_modify
|
55
|
+
def org_add(name, email)
|
56
|
+
# Create the organization object
|
57
|
+
org = { 'name' => name, 'owner_email' => email }
|
58
|
+
@logger.debug org
|
59
|
+
|
60
|
+
# Sign & send the request
|
61
|
+
uri = server_uri('/organizations')
|
62
|
+
res_data = api_json_post(uri, org)
|
63
|
+
@logger.debug res_data
|
64
|
+
|
65
|
+
return res_data
|
66
|
+
end
|
67
|
+
|
68
|
+
# Modify an organization. Only the owner email address and organization
|
69
|
+
# members can be changed; you can not change the name of an organization
|
70
|
+
# once it has been created.
|
71
|
+
#
|
72
|
+
# @note Setting the organization members will *overwrite* the existing
|
73
|
+
# set; you should ensure the set of members is complete before you set it.
|
74
|
+
# @param name [String] organization name.
|
75
|
+
# @param args [Hash] options to modify the organization.
|
76
|
+
# @option args [String] owner_email Organization owners email address.
|
77
|
+
# @option args [Array] members Set of users who will be organization members.
|
78
|
+
# @return [Hash] Decoded server response object.
|
79
|
+
# @see #org_add
|
80
|
+
# @see #org_delete
|
81
|
+
def org_modify(name, args)
|
82
|
+
# Create the organization object
|
83
|
+
org = {}
|
84
|
+
|
85
|
+
# Add the owner email address if one was supplied
|
86
|
+
org['owner_email'] = args[:owner_email] \
|
87
|
+
if args.key? :owner_email and args[:owner_email]
|
88
|
+
|
89
|
+
# Add the list of members if it was supplied
|
90
|
+
org['users'] = args[:members] \
|
91
|
+
if args.key? :members and args[:members]
|
92
|
+
|
93
|
+
@logger.debug org
|
94
|
+
|
95
|
+
# Sign & send the request
|
96
|
+
uri = server_uri("/organizations/#{name}")
|
97
|
+
res_data = api_json_put(uri, org)
|
98
|
+
@logger.debug res_data
|
99
|
+
|
100
|
+
return res_data
|
101
|
+
end
|
102
|
+
|
103
|
+
# Get details of an organization member
|
104
|
+
# @param name [String] organization name.
|
105
|
+
# @param username [String] member username.
|
106
|
+
# @return [Hash] Decoded server response object.
|
107
|
+
# @see User#user_get
|
108
|
+
def org_user_get(name, username)
|
109
|
+
uri = server_uri("/organizations/#{name}/members/#{username}")
|
110
|
+
res_data = api_get(uri)
|
111
|
+
@logger.debug res_data
|
112
|
+
|
113
|
+
return res_data
|
114
|
+
end
|
115
|
+
|
116
|
+
# Modify the permissions for an organization member
|
117
|
+
# @param name [String] organization name.
|
118
|
+
# @param username [String] member username.
|
119
|
+
# @param permissions [Hash] permissions to apply to the member.
|
120
|
+
# @option permissions [Boolean] admin organization 'admin' permission.
|
121
|
+
# @option permissions [Boolean] write organization 'write' permission.
|
122
|
+
# @option permissions [Boolean] read organization 'read' permission.
|
123
|
+
# @return [Hash] Decoded server response object.
|
124
|
+
# @see #org_modify
|
125
|
+
# @example Give the user 'leslie' read & write permission to the 'example' organization
|
126
|
+
# perms = {admin: false, write: true, read: true}
|
127
|
+
# org_user_permissions('example', 'leslie', perms)
|
128
|
+
def org_user_permissions(name, username, permissions)
|
129
|
+
perms = { 'permissions' => permissions }
|
130
|
+
|
131
|
+
@logger.debug perms
|
132
|
+
|
133
|
+
uri = server_uri("/organizations/#{name}/members/#{username}")
|
134
|
+
res_data = api_json_put(uri, perms)
|
135
|
+
@logger.debug res_data
|
136
|
+
|
137
|
+
return res_data
|
138
|
+
end
|
139
|
+
|
140
|
+
# Get a plugin configuration for an organization.
|
141
|
+
# @param name [String] organization name.
|
142
|
+
# @param type [String] plugin 'type'
|
143
|
+
# @param plugin [String] plugin name.
|
144
|
+
# @return [Hash] Decoded server response object.
|
145
|
+
# @see #org_config_set
|
146
|
+
# @example Get the plugin config & schema for the 'foo' 'api' type plugin, for the 'example'
|
147
|
+
# organization
|
148
|
+
# org_config_get('example', 'api', 'foo')
|
149
|
+
def org_config_get(name, type, plugin)
|
150
|
+
uri = server_uri("/organizations/#{name}/configs/#{type}/#{plugin}")
|
151
|
+
res_data = api_get(uri)
|
152
|
+
@logger.debug res_data
|
153
|
+
|
154
|
+
return res_data
|
155
|
+
end
|
156
|
+
|
157
|
+
# Update a plugin configuration for an organization.
|
158
|
+
# @param name [String] organization name.
|
159
|
+
# @param type [String] plugin 'type'
|
160
|
+
# @param plugin [String] plugin name.
|
161
|
+
# @param config [Hash] plugin configuration data.
|
162
|
+
# @return [Hash] Decoded server response object.
|
163
|
+
# @see #org_config_get
|
164
|
+
def org_config_set(name, type, plugin, config)
|
165
|
+
uri = server_uri("/organizations/#{name}/configs/#{type}/#{plugin}")
|
166
|
+
res_data = api_json_put(uri, config)
|
167
|
+
@logger.debug res_data
|
168
|
+
|
169
|
+
return res_data
|
170
|
+
end
|
171
|
+
|
172
|
+
# Delete an organization
|
173
|
+
# @note The API does not currently support deleting an organization and
|
174
|
+
# this method will always fail.
|
175
|
+
# @param name [String] organization name.
|
176
|
+
# @return [Hash] Decoded server response object.
|
177
|
+
# @see #org_add
|
178
|
+
def org_delete(name)
|
179
|
+
uri = server_uri("/organizations/#{name}")
|
180
|
+
res_data = api_delete(uri)
|
181
|
+
@logger.debug res_data
|
182
|
+
|
183
|
+
return res_data
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# Copyright 2016 Liqwyd Ltd.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Cyclid
|
16
|
+
module Client
|
17
|
+
# Stage related methods
|
18
|
+
module Stage
|
19
|
+
# Retrieve the list of stages from a server
|
20
|
+
# @param organization [String] Organization name.
|
21
|
+
# @return [Array] The list of stages. Each entry is a hash with the name
|
22
|
+
# & version of the stage.
|
23
|
+
def stage_list(organization)
|
24
|
+
uri = server_uri("/organizations/#{organization}/stages")
|
25
|
+
res_data = api_get(uri)
|
26
|
+
@logger.debug res_data
|
27
|
+
|
28
|
+
stages = []
|
29
|
+
res_data.each do |item|
|
30
|
+
stages << { name: item['name'], version: item['version'] }
|
31
|
+
end
|
32
|
+
|
33
|
+
return stages
|
34
|
+
end
|
35
|
+
|
36
|
+
# Get details of a stage
|
37
|
+
# @param organization [String] Organization name.
|
38
|
+
# @param name [String] Name of the stage to retrieve.
|
39
|
+
# @return [Hash] Decoded server response object.
|
40
|
+
def stage_get(organization, name)
|
41
|
+
uri = server_uri("/organizations/#{organization}/stages/#{name}")
|
42
|
+
res_data = api_get(uri)
|
43
|
+
@logger.debug res_data
|
44
|
+
|
45
|
+
return res_data
|
46
|
+
end
|
47
|
+
|
48
|
+
# Create a stage
|
49
|
+
# @param organization [String] Organization name.
|
50
|
+
# @param stage [String] Raw stage definition, in JSON format.
|
51
|
+
# @return [Hash] Decoded server response object.
|
52
|
+
# @see #stage_modify
|
53
|
+
# @example Create a new stage from a file
|
54
|
+
# stage = File.read('stage.json')
|
55
|
+
# stage_create('example, stage)
|
56
|
+
def stage_create(organization, stage)
|
57
|
+
uri = server_uri("/organizations/#{organization}/stages")
|
58
|
+
res_data = api_json_post(uri, stage)
|
59
|
+
@logger.debug res_data
|
60
|
+
|
61
|
+
return res_data
|
62
|
+
end
|
63
|
+
|
64
|
+
# Modify a stage.
|
65
|
+
# @note Stages are immutable; this actually creates a new version of an existing stage.
|
66
|
+
# @param organization [String] Organization name.
|
67
|
+
# @param stage [String] Raw stage definition, in JSON format.
|
68
|
+
# @return [Hash] Decoded server response object.
|
69
|
+
# @see #stage_create
|
70
|
+
def stage_modify(organization, stage)
|
71
|
+
uri = server_uri("/organizations/#{organization}/stages")
|
72
|
+
res_data = api_json_post(uri, stage)
|
73
|
+
@logger.debug res_data
|
74
|
+
|
75
|
+
return res_data
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
# Copyright 2016 Liqwyd Ltd.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require 'bcrypt'
|
16
|
+
|
17
|
+
module Cyclid
|
18
|
+
module Client
|
19
|
+
# User related methods
|
20
|
+
module User
|
21
|
+
# Retrieve the list of users from a server
|
22
|
+
# @return [Array] List of user names.
|
23
|
+
def user_list
|
24
|
+
uri = server_uri('/users')
|
25
|
+
res_data = api_get(uri)
|
26
|
+
@logger.debug res_data
|
27
|
+
|
28
|
+
users = []
|
29
|
+
res_data.each do |item|
|
30
|
+
users << item['username']
|
31
|
+
end
|
32
|
+
|
33
|
+
return users
|
34
|
+
end
|
35
|
+
|
36
|
+
# Get details of a specific user
|
37
|
+
# @param username [String] User name of the user to retrieve.
|
38
|
+
# @return [Hash] Decoded server response object.
|
39
|
+
def user_get(username)
|
40
|
+
uri = server_uri("/users/#{username}")
|
41
|
+
res_data = api_get(uri)
|
42
|
+
@logger.debug res_data
|
43
|
+
|
44
|
+
return res_data
|
45
|
+
end
|
46
|
+
|
47
|
+
# Create a new user
|
48
|
+
# @param username [String] User name of the new user.
|
49
|
+
# @param name [String] Users real name.
|
50
|
+
# @param email [String] Users email address.
|
51
|
+
# @param password [String] Unencrypted initial password
|
52
|
+
# @param secret [String] Initial HMAC signing secret
|
53
|
+
# @return [Hash] Decoded server response object.
|
54
|
+
# @see #user_modify
|
55
|
+
# @see #user_delete
|
56
|
+
def user_add(username, email, name = nil, password = nil, secret = nil)
|
57
|
+
# Create the user object
|
58
|
+
user = { 'username' => username, 'email' => email }
|
59
|
+
|
60
|
+
# Add the real name is one was supplied
|
61
|
+
user['name'] = name unless name.nil?
|
62
|
+
|
63
|
+
# Add the HMAC secret if one was supplied
|
64
|
+
user['secret'] = secret unless secret.nil?
|
65
|
+
|
66
|
+
# Encrypt & add the password if one was supplied
|
67
|
+
user['password'] = BCrypt::Password.create(password).to_s unless password.nil?
|
68
|
+
|
69
|
+
@logger.debug user
|
70
|
+
|
71
|
+
# Sign & send the request
|
72
|
+
uri = server_uri('/users')
|
73
|
+
res_data = api_json_post(uri, user)
|
74
|
+
@logger.debug res_data
|
75
|
+
|
76
|
+
return res_data
|
77
|
+
end
|
78
|
+
|
79
|
+
# Modify a user
|
80
|
+
# @param username [String] User name of the new user.
|
81
|
+
# @param args [Hash] options to modify the user.
|
82
|
+
# @option args [String] name Users real name.
|
83
|
+
# @option args [String] email Users email address.
|
84
|
+
# @option args [String] secret Initial HMAC signing secret
|
85
|
+
# @option args [String] password Unencrypted initial password
|
86
|
+
# @return [Hash] Decoded server response object.
|
87
|
+
# @see #user_add
|
88
|
+
# @see #user_delete
|
89
|
+
# @example Change the email address of the user 'leslie'
|
90
|
+
# user_modify('leslie', email: 'leslie@example.com')
|
91
|
+
# @example Change the password & secret of the user 'bob'
|
92
|
+
# user_modify('bob', secret: 'sekrit', password: 'm1lkb0ne')
|
93
|
+
def user_modify(username, args)
|
94
|
+
# Create the user object
|
95
|
+
user = {}
|
96
|
+
|
97
|
+
# Add the real name is one was supplied
|
98
|
+
user['name'] = args[:name] if args.key? :name and args[:name]
|
99
|
+
|
100
|
+
# Add the email address if one was supplied
|
101
|
+
user['email'] = args[:email] if args.key? :email and args[:email]
|
102
|
+
|
103
|
+
# Add the HMAC secret if one was supplied
|
104
|
+
user['secret'] = args[:secret] if args.key? :secret and args[:secret]
|
105
|
+
|
106
|
+
# Encrypt & add the password if one was supplied
|
107
|
+
user['password'] = BCrypt::Password.create(args[:password]).to_s \
|
108
|
+
if args.key? :password and args[:password]
|
109
|
+
|
110
|
+
@logger.debug user
|
111
|
+
|
112
|
+
# Sign & send the request
|
113
|
+
uri = server_uri("/users/#{username}")
|
114
|
+
res_data = api_json_put(uri, user)
|
115
|
+
@logger.debug res_data
|
116
|
+
|
117
|
+
return res_data
|
118
|
+
end
|
119
|
+
|
120
|
+
# Delete a user
|
121
|
+
# @param username [String] User name of the user to delete.
|
122
|
+
# @return [Hash] Decoded server response object.
|
123
|
+
# @see #user_add
|
124
|
+
# @see #user_modify
|
125
|
+
def user_delete(username)
|
126
|
+
uri = server_uri("/users/#{username}")
|
127
|
+
res_data = api_delete(uri)
|
128
|
+
@logger.debug res_data
|
129
|
+
|
130
|
+
return res_data
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|