losant_rest 1.8.6 → 1.8.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/docs/_schemas.md +2143 -330
  3. data/docs/applicationCertificate.md +133 -0
  4. data/docs/applicationCertificateAuthorities.md +93 -0
  5. data/docs/applicationCertificateAuthority.md +133 -0
  6. data/docs/applicationCertificates.md +93 -0
  7. data/docs/auth.md +1 -1
  8. data/docs/dataTableRows.md +2 -0
  9. data/docs/events.md +1 -1
  10. data/docs/experienceUsers.md +2 -1
  11. data/lib/losant_rest.rb +4 -0
  12. data/lib/losant_rest/application_certificate.rb +174 -0
  13. data/lib/losant_rest/application_certificate_authorities.rb +136 -0
  14. data/lib/losant_rest/application_certificate_authority.rb +174 -0
  15. data/lib/losant_rest/application_certificates.rb +136 -0
  16. data/lib/losant_rest/auth.rb +1 -1
  17. data/lib/losant_rest/client.rb +18 -2
  18. data/lib/losant_rest/data_table_rows.rb +4 -0
  19. data/lib/losant_rest/events.rb +1 -1
  20. data/lib/losant_rest/experience_users.rb +3 -1
  21. data/lib/losant_rest/version.rb +1 -1
  22. data/schemas/applicationApiTokenPost.json +14 -0
  23. data/schemas/applicationCertificate.json +67 -0
  24. data/schemas/applicationCertificateAuthorities.json +93 -0
  25. data/schemas/applicationCertificateAuthority.json +51 -0
  26. data/schemas/applicationCertificateAuthorityPatch.json +26 -0
  27. data/schemas/applicationCertificateAuthorityPost.json +30 -0
  28. data/schemas/applicationCertificatePatch.json +21 -0
  29. data/schemas/applicationCertificatePost.json +51 -0
  30. data/schemas/applicationCertificates.json +109 -0
  31. data/schemas/dashboard.json +274 -72
  32. data/schemas/dashboardPatch.json +274 -72
  33. data/schemas/dashboardPost.json +274 -72
  34. data/schemas/dashboards.json +274 -72
  35. data/schemas/dataTableQuery.json +12 -0
  36. data/schemas/dataTableRowsExport.json +12 -0
  37. data/schemas/deviceCredentials.json +1 -3
  38. data/schemas/event.json +15 -0
  39. data/schemas/eventPatch.json +12 -1
  40. data/schemas/eventPost.json +16 -1
  41. data/schemas/events.json +15 -0
  42. data/schemas/experienceDomain.json +2 -6
  43. data/schemas/experienceDomainPatch.json +2 -6
  44. data/schemas/experienceDomainPost.json +2 -6
  45. data/schemas/experienceDomains.json +2 -6
  46. data/schemas/experienceGroup.json +38 -0
  47. data/schemas/experienceGroupPatch.json +38 -0
  48. data/schemas/experienceGroupPost.json +38 -0
  49. data/schemas/experienceGroups.json +38 -0
  50. data/schemas/flow.json +1 -0
  51. data/schemas/flowPatch.json +3 -2
  52. data/schemas/flowPost.json +1 -0
  53. data/schemas/flowVersion.json +2 -0
  54. data/schemas/flowVersionPost.json +1 -0
  55. data/schemas/flowVersions.json +2 -0
  56. data/schemas/flows.json +1 -0
  57. data/schemas/flowsImportPost.json +4 -2
  58. data/schemas/flowsImportResult.json +3 -0
  59. data/schemas/githubLogin.json +14 -0
  60. data/schemas/userCredentials.json +14 -0
  61. data/schemas/userPost.json +14 -0
  62. metadata +18 -2
@@ -0,0 +1,136 @@
1
+ # The MIT License (MIT)
2
+ #
3
+ # Copyright (c) 2019 Losant IoT, Inc.
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
23
+ module LosantRest
24
+
25
+ # Class containing all the actions for the Application Certificates Resource
26
+ class ApplicationCertificates
27
+
28
+ def initialize(client)
29
+ @client = client
30
+ end
31
+
32
+ # Returns the application certificates for an application
33
+ #
34
+ # Authentication:
35
+ # The client must be configured with a valid api
36
+ # access token to call this action. The token
37
+ # must include at least one of the following scopes:
38
+ # all.Application, all.Application.read, all.Organization, all.Organization.read, all.User, all.User.read, applicationCertificates.*, or applicationCertificates.get.
39
+ #
40
+ # Parameters:
41
+ # * {string} applicationId - ID associated with the application
42
+ # * {string} sortField - Field to sort the results by. Accepted values are: certificateInfo.commonName, status, id, creationDate, lastUpdated
43
+ # * {string} sortDirection - Direction to sort the results by. Accepted values are: asc, desc
44
+ # * {string} page - Which page of results to return
45
+ # * {string} perPage - How many items to return per page
46
+ # * {string} filterField - Field to filter the results by. Blank or not provided means no filtering. Accepted values are: certificateInfo.commonName, status
47
+ # * {string} filter - Filter to apply against the filtered field. Supports globbing. Blank or not provided means no filtering.
48
+ # * {string} losantdomain - Domain scope of request (rarely needed)
49
+ # * {boolean} _actions - Return resource actions in response
50
+ # * {boolean} _links - Return resource link in response
51
+ # * {boolean} _embedded - Return embedded resources in response
52
+ #
53
+ # Responses:
54
+ # * 200 - Collection of application certificates (https://api.losant.com/#/definitions/applicationCertificates)
55
+ #
56
+ # Errors:
57
+ # * 400 - Error if malformed request (https://api.losant.com/#/definitions/error)
58
+ # * 404 - Error if application was not found (https://api.losant.com/#/definitions/error)
59
+ def get(params = {})
60
+ params = Utils.symbolize_hash_keys(params)
61
+ query_params = { _actions: false, _links: true, _embedded: true }
62
+ headers = {}
63
+ body = nil
64
+
65
+ raise ArgumentError.new("applicationId is required") unless params.has_key?(:applicationId)
66
+
67
+ query_params[:sortField] = params[:sortField] if params.has_key?(:sortField)
68
+ query_params[:sortDirection] = params[:sortDirection] if params.has_key?(:sortDirection)
69
+ query_params[:page] = params[:page] if params.has_key?(:page)
70
+ query_params[:perPage] = params[:perPage] if params.has_key?(:perPage)
71
+ query_params[:filterField] = params[:filterField] if params.has_key?(:filterField)
72
+ query_params[:filter] = params[:filter] if params.has_key?(:filter)
73
+ headers[:losantdomain] = params[:losantdomain] if params.has_key?(:losantdomain)
74
+ query_params[:_actions] = params[:_actions] if params.has_key?(:_actions)
75
+ query_params[:_links] = params[:_links] if params.has_key?(:_links)
76
+ query_params[:_embedded] = params[:_embedded] if params.has_key?(:_embedded)
77
+
78
+ path = "/applications/#{params[:applicationId]}/certificates"
79
+
80
+ @client.request(
81
+ method: :get,
82
+ path: path,
83
+ query: query_params,
84
+ headers: headers,
85
+ body: body)
86
+ end
87
+
88
+ # Create a new application certificate for an application
89
+ #
90
+ # Authentication:
91
+ # The client must be configured with a valid api
92
+ # access token to call this action. The token
93
+ # must include at least one of the following scopes:
94
+ # all.Application, all.Organization, all.User, applicationCertificates.*, or applicationCertificates.post.
95
+ #
96
+ # Parameters:
97
+ # * {string} applicationId - ID associated with the application
98
+ # * {hash} applicationCertificate - Application certificate information (https://api.losant.com/#/definitions/applicationCertificatePost)
99
+ # * {string} losantdomain - Domain scope of request (rarely needed)
100
+ # * {boolean} _actions - Return resource actions in response
101
+ # * {boolean} _links - Return resource link in response
102
+ # * {boolean} _embedded - Return embedded resources in response
103
+ #
104
+ # Responses:
105
+ # * 201 - Successfully created application certificate (https://api.losant.com/#/definitions/applicationCertificate)
106
+ #
107
+ # Errors:
108
+ # * 400 - Error if malformed request (https://api.losant.com/#/definitions/error)
109
+ # * 404 - Error if application was not found (https://api.losant.com/#/definitions/error)
110
+ def post(params = {})
111
+ params = Utils.symbolize_hash_keys(params)
112
+ query_params = { _actions: false, _links: true, _embedded: true }
113
+ headers = {}
114
+ body = nil
115
+
116
+ raise ArgumentError.new("applicationId is required") unless params.has_key?(:applicationId)
117
+ raise ArgumentError.new("applicationCertificate is required") unless params.has_key?(:applicationCertificate)
118
+
119
+ body = params[:applicationCertificate] if params.has_key?(:applicationCertificate)
120
+ headers[:losantdomain] = params[:losantdomain] if params.has_key?(:losantdomain)
121
+ query_params[:_actions] = params[:_actions] if params.has_key?(:_actions)
122
+ query_params[:_links] = params[:_links] if params.has_key?(:_links)
123
+ query_params[:_embedded] = params[:_embedded] if params.has_key?(:_embedded)
124
+
125
+ path = "/applications/#{params[:applicationId]}/certificates"
126
+
127
+ @client.request(
128
+ method: :post,
129
+ path: path,
130
+ query: query_params,
131
+ headers: headers,
132
+ body: body)
133
+ end
134
+
135
+ end
136
+ end
@@ -42,7 +42,7 @@ module LosantRest
42
42
  # * {boolean} _embedded - Return embedded resources in response
43
43
  #
44
44
  # Responses:
45
- # * 200 - Successful authentication. The included api access token has the scope 'all.Device'. (https://api.losant.com/#/definitions/authedDevice)
45
+ # * 200 - Successful authentication. The included api access token by default has the scope 'all.Device'. (https://api.losant.com/#/definitions/authedDevice)
46
46
  #
47
47
  # Errors:
48
48
  # * 400 - Error if malformed request (https://api.losant.com/#/definitions/error)
@@ -27,7 +27,7 @@ module LosantRest
27
27
  #
28
28
  # User API for accessing Losant data
29
29
  #
30
- # Built For Version 1.15.0
30
+ # Built For Version 1.15.1
31
31
  class Client
32
32
  attr_accessor :auth_token, :url
33
33
 
@@ -48,6 +48,22 @@ module LosantRest
48
48
  @application_api_tokens ||= ApplicationApiTokens.new(self)
49
49
  end
50
50
 
51
+ def application_certificate
52
+ @application_certificate ||= ApplicationCertificate.new(self)
53
+ end
54
+
55
+ def application_certificate_authorities
56
+ @application_certificate_authorities ||= ApplicationCertificateAuthorities.new(self)
57
+ end
58
+
59
+ def application_certificate_authority
60
+ @application_certificate_authority ||= ApplicationCertificateAuthority.new(self)
61
+ end
62
+
63
+ def application_certificates
64
+ @application_certificates ||= ApplicationCertificates.new(self)
65
+ end
66
+
51
67
  def application_key
52
68
  @application_key ||= ApplicationKey.new(self)
53
69
  end
@@ -274,7 +290,7 @@ module LosantRest
274
290
 
275
291
  headers["Accept"] = "application/json"
276
292
  headers["Content-Type"] = "application/json"
277
- headers["Accept-Version"] = "^1.15.0"
293
+ headers["Accept-Version"] = "^1.15.1"
278
294
  headers["Authorization"] = "Bearer #{self.auth_token}" if self.auth_token
279
295
  path = self.url + options.fetch(:path, "")
280
296
 
@@ -143,6 +143,7 @@ module LosantRest
143
143
  # * {string} sortDirection - Direction to sort the rows by. Accepted values are: asc, desc
144
144
  # * {string} limit - How many rows to return
145
145
  # * {string} offset - How many rows to skip
146
+ # * {string} includeFields - Comma-separated list of fields to include in resulting rows. When not provided, returns all fields.
146
147
  # * {string} losantdomain - Domain scope of request (rarely needed)
147
148
  # * {boolean} _actions - Return resource actions in response
148
149
  # * {boolean} _links - Return resource link in response
@@ -167,6 +168,7 @@ module LosantRest
167
168
  query_params[:sortDirection] = params[:sortDirection] if params.has_key?(:sortDirection)
168
169
  query_params[:limit] = params[:limit] if params.has_key?(:limit)
169
170
  query_params[:offset] = params[:offset] if params.has_key?(:offset)
171
+ query_params[:includeFields] = params[:includeFields] if params.has_key?(:includeFields)
170
172
  headers[:losantdomain] = params[:losantdomain] if params.has_key?(:losantdomain)
171
173
  query_params[:_actions] = params[:_actions] if params.has_key?(:_actions)
172
174
  query_params[:_links] = params[:_links] if params.has_key?(:_links)
@@ -246,6 +248,7 @@ module LosantRest
246
248
  # * {string} sortDirection - Direction to sort the rows by. Accepted values are: asc, desc
247
249
  # * {string} limit - How many rows to return
248
250
  # * {string} offset - How many rows to skip
251
+ # * {string} includeFields - Comma-separated list of fields to include in resulting rows. When not provided, returns all fields.
249
252
  # * {hash} query - Query to apply to filter the data table (https://api.losant.com/#/definitions/dataTableQuery)
250
253
  # * {string} losantdomain - Domain scope of request (rarely needed)
251
254
  # * {boolean} _actions - Return resource actions in response
@@ -271,6 +274,7 @@ module LosantRest
271
274
  query_params[:sortDirection] = params[:sortDirection] if params.has_key?(:sortDirection)
272
275
  query_params[:limit] = params[:limit] if params.has_key?(:limit)
273
276
  query_params[:offset] = params[:offset] if params.has_key?(:offset)
277
+ query_params[:includeFields] = params[:includeFields] if params.has_key?(:includeFields)
274
278
  body = params[:query] if params.has_key?(:query)
275
279
  headers[:losantdomain] = params[:losantdomain] if params.has_key?(:losantdomain)
276
280
  query_params[:_actions] = params[:_actions] if params.has_key?(:_actions)
@@ -39,7 +39,7 @@ module LosantRest
39
39
  #
40
40
  # Parameters:
41
41
  # * {string} applicationId - ID associated with the application
42
- # * {string} sortField - Field to sort the results by. Accepted values are: subject, id, creationDate
42
+ # * {string} sortField - Field to sort the results by. Accepted values are: subject, id, creationDate, lastUpdated, level, state, deviceId
43
43
  # * {string} sortDirection - Direction to sort the results by. Accepted values are: asc, desc
44
44
  # * {string} page - Which page of results to return
45
45
  # * {string} perPage - How many items to return per page
@@ -45,7 +45,8 @@ module LosantRest
45
45
  # * {string} perPage - How many items to return per page
46
46
  # * {string} filterField - Field to filter the results by. Blank or not provided means no filtering. Accepted values are: firstName, lastName, email
47
47
  # * {string} filter - Filter to apply against the filtered field. Supports globbing. Blank or not provided means no filtering.
48
- # * {string} experienceGroupId - Filter users to those only in the specified group
48
+ # * {string} experienceGroupId - Filter users to those only in the specified group, special experienceGroupIds of 'any' which will give users who are in at least one group and 'none' will give you users who are not in any groups.
49
+ # * {string} includeAncestorGroups - If set will include members from ancestors of the specified experienceGroupId
49
50
  # * {string} losantdomain - Domain scope of request (rarely needed)
50
51
  # * {boolean} _actions - Return resource actions in response
51
52
  # * {boolean} _links - Return resource link in response
@@ -72,6 +73,7 @@ module LosantRest
72
73
  query_params[:filterField] = params[:filterField] if params.has_key?(:filterField)
73
74
  query_params[:filter] = params[:filter] if params.has_key?(:filter)
74
75
  query_params[:experienceGroupId] = params[:experienceGroupId] if params.has_key?(:experienceGroupId)
76
+ query_params[:includeAncestorGroups] = params[:includeAncestorGroups] if params.has_key?(:includeAncestorGroups)
75
77
  headers[:losantdomain] = params[:losantdomain] if params.has_key?(:losantdomain)
76
78
  query_params[:_actions] = params[:_actions] if params.has_key?(:_actions)
77
79
  query_params[:_links] = params[:_links] if params.has_key?(:_links)
@@ -21,5 +21,5 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  module LosantRest
24
- VERSION = "1.8.6"
24
+ VERSION = "1.8.7"
25
25
  end
@@ -28,6 +28,10 @@
28
28
  "application.*",
29
29
  "applicationApiToken.*",
30
30
  "applicationApiTokens.*",
31
+ "applicationCertificate.*",
32
+ "applicationCertificates.*",
33
+ "applicationCertificateAuthority.*",
34
+ "applicationCertificateAuthorities.*",
31
35
  "applicationKey.*",
32
36
  "applicationKeys.*",
33
37
  "data.*",
@@ -84,6 +88,16 @@
84
88
  "applicationApiToken.patch",
85
89
  "applicationApiTokens.get",
86
90
  "applicationApiTokens.post",
91
+ "applicationCertificate.delete",
92
+ "applicationCertificate.get",
93
+ "applicationCertificate.patch",
94
+ "applicationCertificates.get",
95
+ "applicationCertificates.post",
96
+ "applicationCertificateAuthority.delete",
97
+ "applicationCertificateAuthority.get",
98
+ "applicationCertificateAuthority.patch",
99
+ "applicationCertificateAuthorities.get",
100
+ "applicationCertificateAuthorities.post",
87
101
  "applicationKey.delete",
88
102
  "applicationKey.get",
89
103
  "applicationKey.patch",
@@ -0,0 +1,67 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "id": {
6
+ "type": "string",
7
+ "pattern": "^[A-Fa-f\\d]{24}$"
8
+ },
9
+ "applicationCertificateId": {
10
+ "type": "string",
11
+ "pattern": "^[A-Fa-f\\d]{24}$"
12
+ },
13
+ "applicationId": {
14
+ "type": "string",
15
+ "pattern": "^[A-Fa-f\\d]{24}$"
16
+ },
17
+ "creationDate": {
18
+ "type": "string",
19
+ "format": "date-time"
20
+ },
21
+ "lastUpdated": {
22
+ "type": "string",
23
+ "format": "date-time"
24
+ },
25
+ "status": {
26
+ "type": "string",
27
+ "enum": [
28
+ "active",
29
+ "inactive"
30
+ ]
31
+ },
32
+ "description": {
33
+ "type": "string",
34
+ "maxLength": 32767
35
+ },
36
+ "deviceIds": {
37
+ "type": "array",
38
+ "items": {
39
+ "type": "string",
40
+ "pattern": "^[A-Fa-f\\d]{24}$"
41
+ },
42
+ "maxItems": 1000
43
+ },
44
+ "deviceTags": {
45
+ "type": "array",
46
+ "items": {
47
+ "type": "object",
48
+ "properties": {
49
+ "key": {
50
+ "type": "string",
51
+ "pattern": "^[0-9a-zA-Z_-]{1,255}$"
52
+ },
53
+ "value": {
54
+ "type": "string",
55
+ "minLength": 1,
56
+ "maxLength": 255
57
+ }
58
+ },
59
+ "additionalProperties": false
60
+ },
61
+ "maxItems": 100
62
+ },
63
+ "certificateInfo": {
64
+ "$ref": "#/definitions/certificateInfo"
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "items": {
6
+ "type": "array",
7
+ "items": {
8
+ "title": "Application Certificate Authority",
9
+ "description": "Schema for a single Application Certificate Authority",
10
+ "type": "object",
11
+ "properties": {
12
+ "id": {
13
+ "type": "string",
14
+ "pattern": "^[A-Fa-f\\d]{24}$"
15
+ },
16
+ "applicationCertificateAuthorityId": {
17
+ "type": "string",
18
+ "pattern": "^[A-Fa-f\\d]{24}$"
19
+ },
20
+ "applicationId": {
21
+ "type": "string",
22
+ "pattern": "^[A-Fa-f\\d]{24}$"
23
+ },
24
+ "creationDate": {
25
+ "type": "string",
26
+ "format": "date-time"
27
+ },
28
+ "lastUpdated": {
29
+ "type": "string",
30
+ "format": "date-time"
31
+ },
32
+ "status": {
33
+ "type": "string",
34
+ "enum": [
35
+ "active",
36
+ "inactive"
37
+ ]
38
+ },
39
+ "name": {
40
+ "type": "string",
41
+ "minLength": 1,
42
+ "maxLength": 255
43
+ },
44
+ "description": {
45
+ "type": "string",
46
+ "maxLength": 32767
47
+ },
48
+ "caBundle": {
49
+ "$ref": "#/definitions/common/certificateString"
50
+ },
51
+ "caInfo": {
52
+ "type": "array",
53
+ "items": {
54
+ "$ref": "#/definitions/certificateInfo"
55
+ }
56
+ }
57
+ }
58
+ }
59
+ },
60
+ "count": {
61
+ "type": "integer"
62
+ },
63
+ "totalCount": {
64
+ "type": "integer"
65
+ },
66
+ "perPage": {
67
+ "type": "integer"
68
+ },
69
+ "page": {
70
+ "type": "integer"
71
+ },
72
+ "filter": {
73
+ "type": "string"
74
+ },
75
+ "filterField": {
76
+ "type": "string"
77
+ },
78
+ "sortField": {
79
+ "type": "string"
80
+ },
81
+ "sortDirection": {
82
+ "type": "string",
83
+ "enum": [
84
+ "asc",
85
+ "desc"
86
+ ]
87
+ },
88
+ "applicationId": {
89
+ "type": "string",
90
+ "pattern": "^[A-Fa-f\\d]{24}$"
91
+ }
92
+ }
93
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "id": {
6
+ "type": "string",
7
+ "pattern": "^[A-Fa-f\\d]{24}$"
8
+ },
9
+ "applicationCertificateAuthorityId": {
10
+ "type": "string",
11
+ "pattern": "^[A-Fa-f\\d]{24}$"
12
+ },
13
+ "applicationId": {
14
+ "type": "string",
15
+ "pattern": "^[A-Fa-f\\d]{24}$"
16
+ },
17
+ "creationDate": {
18
+ "type": "string",
19
+ "format": "date-time"
20
+ },
21
+ "lastUpdated": {
22
+ "type": "string",
23
+ "format": "date-time"
24
+ },
25
+ "status": {
26
+ "type": "string",
27
+ "enum": [
28
+ "active",
29
+ "inactive"
30
+ ]
31
+ },
32
+ "name": {
33
+ "type": "string",
34
+ "minLength": 1,
35
+ "maxLength": 255
36
+ },
37
+ "description": {
38
+ "type": "string",
39
+ "maxLength": 32767
40
+ },
41
+ "caBundle": {
42
+ "$ref": "#/definitions/common/certificateString"
43
+ },
44
+ "caInfo": {
45
+ "type": "array",
46
+ "items": {
47
+ "$ref": "#/definitions/certificateInfo"
48
+ }
49
+ }
50
+ }
51
+ }