files.com 1.0.110 → 1.0.115

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b823cad7eb84b62cf77fbf4b37829a3b36c937c1532c7d9798fd7910fa48adf1
4
- data.tar.gz: 839b5d017058a7a21afe3b90a8acee4ddf5df348712ab2b61285be58441430a7
3
+ metadata.gz: b7031791026b107602d6b1c2f566d26e7281f8e718324a71be205246fe3f75de
4
+ data.tar.gz: 23a0c7636128c641964a9675f00d5e0dd1fda6026a5aa7e6d384b96356fc606c
5
5
  SHA512:
6
- metadata.gz: ab72c400c26db6e38f5c4c94ea1bfe01f60093dfbbfddb1c3c26699ba31bcdce257bd9422697f555914b8d2c403a0a28983af54a2097bb2a4e3277485127b883
7
- data.tar.gz: 2f0688fea58866785311afc8260306260d3d4d6ad811ce851dd9a2dffe899a9e39451c223b8fb40b1e01f70462f44ed8569b8179e3d73328e9d00e5d521321bb
6
+ metadata.gz: 96d1740aff82c409cf6b08c7f5fece8c23895b4a46778fb9270988fe440d1b9b7fa390b9b6e00c84baf9579afa3d8e3092846675a7d2e4c30bf89d334fe6b507
7
+ data.tar.gz: 4f5b9a1453b3e71eb4a8756fab2e4d990bd4aaaa92d462951441bada85935ba0d644a4c363ce18b2fc90d151000b45e71d83ead4aa84fc8a3f89039dad90f7d8
data/_VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.110
1
+ 1.0.115
@@ -156,7 +156,7 @@ Files::ApiKey.update(id,
156
156
  ## Delete current API key. (Requires current API connection to be using an API key.)
157
157
 
158
158
  ```
159
- Files::ApiKey.delete_current(
159
+ Files::ApiKey.current(
160
160
  format: "",
161
161
  api_key: ""
162
162
  )
@@ -20,6 +20,7 @@
20
20
  "username": "user",
21
21
  "clickwrap_id": 1,
22
22
  "inbox_id": 1,
23
+ "has_inbox": true,
23
24
  "paths": [
24
25
 
25
26
  ]
@@ -42,6 +43,7 @@
42
43
  * `username` (string): Bundle creator username
43
44
  * `clickwrap_id` (int64): ID of the clickwrap to use with this bundle.
44
45
  * `inbox_id` (int64): ID of the associated inbox, if available.
46
+ * `has_inbox` (boolean): Does this bundle have an associated inbox?
45
47
  * `paths` (array): A list of paths in this bundle
46
48
  * `password` (string): Password for this bundle.
47
49
 
@@ -34,9 +34,9 @@
34
34
  * `id` (int64): History Export ID
35
35
  * `start_at` (date-time): Start date/time of export range.
36
36
  * `end_at` (date-time): End date/time of export range.
37
- * `status` (string): Status of export. Will be: `building` or `ready`
37
+ * `status` (string): Status of export. Will be: `building`, `ready`, or `failed`
38
38
  * `query_action` (string): Filter results by this this action type. Valid values: `create`, `read`, `update`, `destroy`, `move`, `login`, `failedlogin`, `copy`, `user_create`, `user_update`, `user_destroy`, `group_create`, `group_update`, `group_destroy`, `permission_create`, `permission_destroy`, `api_key_create`, `api_key_update`, `api_key_destroy`
39
- * `query_interface` (string): Filter results by this this interface type. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`
39
+ * `query_interface` (string): Filter results by this this interface type. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`, `office`
40
40
  * `query_user_id` (string): Return results that are actions performed by the user indiciated by this User ID
41
41
  * `query_file_id` (string): Return results that are file actions related to the file indicated by this File ID
42
42
  * `query_parent_id` (string): Return results that are file actions inside the parent folder specified by this folder ID
@@ -108,7 +108,7 @@ Files::HistoryExport.create(
108
108
  * `start_at` (string): Start date/time of export range.
109
109
  * `end_at` (string): End date/time of export range.
110
110
  * `query_action` (string): Filter results by this this action type. Valid values: `create`, `read`, `update`, `destroy`, `move`, `login`, `failedlogin`, `copy`, `user_create`, `user_update`, `user_destroy`, `group_create`, `group_update`, `group_destroy`, `permission_create`, `permission_destroy`, `api_key_create`, `api_key_update`, `api_key_destroy`
111
- * `query_interface` (string): Filter results by this this interface type. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`
111
+ * `query_interface` (string): Filter results by this this interface type. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`, `office`
112
112
  * `query_user_id` (string): Return results that are actions performed by the user indiciated by this User ID
113
113
  * `query_file_id` (string): Return results that are file actions related to the file indicated by this File ID
114
114
  * `query_parent_id` (string): Return results that are file actions inside the parent folder specified by this folder ID
@@ -43,7 +43,7 @@
43
43
  * `username` (string): Username of the user that performed the action
44
44
  * `action` (string): What action was taken. Valid values: `create`, `read`, `update`, `destroy`, `move`, `login`, `failedlogin`, `copy`, `user_create`, `user_update`, `user_destroy`, `group_create`, `group_update`, `group_destroy`, `permission_create`, `permission_destroy`, `api_key_create`, `api_key_update`, `api_key_destroy`
45
45
  * `failure_type` (string): The type of login failure, if applicable. Valid values: `expired_trial`, `account_overdue`, `locked_out`, `ip_mismatch`, `password_mismatch`, `site_mismatch`, `username_not_found`, `none`, `no_ftp_permission`, `no_web_permission`, `no_directory`, `errno_enoent`, `no_sftp_permission`, `no_dav_permission`, `no_restapi_permission`, `key_mismatch`, `region_mismatch`, `expired_access`, `desktop_ip_mismatch`, `desktop_api_key_not_used_quickly_enough`, `disabled`
46
- * `interface` (string): Inteface through which the action was taken. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`
46
+ * `interface` (string): Inteface through which the action was taken. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`, `office`
47
47
  * `target_id` (int64): ID of the object (such as Users, or API Keys) on which the action was taken
48
48
  * `target_name` (string): Name of the User, Group or other object with a name related to this action
49
49
  * `target_permission` (string): Permission level of the action
@@ -10,6 +10,7 @@
10
10
  "group_name": "",
11
11
  "notify_user_actions": true,
12
12
  "notify_on_copy": true,
13
+ "recursive": true,
13
14
  "send_interval": "fifteen_minutes",
14
15
  "unsubscribed": true,
15
16
  "unsubscribed_reason": "",
@@ -25,6 +26,7 @@
25
26
  * `group_name` (string): Group name if applicable
26
27
  * `notify_user_actions` (boolean): Trigger notification on notification user actions?
27
28
  * `notify_on_copy` (boolean): Triggers notification when moving or copying files to this path
29
+ * `recursive` (boolean): Enable notifications for each subfolder in this path
28
30
  * `send_interval` (string): The time interval that notifications are aggregated to
29
31
  * `unsubscribed` (boolean): Is the user unsubscribed from this notification?
30
32
  * `unsubscribed_reason` (string): The reason that the user unsubscribed
@@ -88,6 +90,7 @@ Files::Notification.create(
88
90
  user_id: 1,
89
91
  notify_on_copy: true,
90
92
  notify_user_actions: true,
93
+ recursive: true,
91
94
  send_interval: "daily",
92
95
  group_id: 1,
93
96
  username: "User"
@@ -99,6 +102,7 @@ Files::Notification.create(
99
102
  * `user_id` (int64): The id of the user to notify. Provide `user_id`, `username` or `group_id`.
100
103
  * `notify_on_copy` (boolean): If `true`, copying or moving resources into this path will trigger a notification, in addition to just uploads.
101
104
  * `notify_user_actions` (boolean): If `true` actions initiated by the user will still result in a notification
105
+ * `recursive` (boolean): If `true`, enable notifications for each subfolder in this path
102
106
  * `send_interval` (string): The time interval that notifications are aggregated by. Can be `five_minutes`, `fifteen_minutes`, `hourly`, or `daily`.
103
107
  * `group_id` (int64): The ID of the group to notify. Provide `user_id`, `username` or `group_id`.
104
108
  * `path` (string): Path
@@ -113,6 +117,7 @@ Files::Notification.create(
113
117
  Files::Notification.update(id,
114
118
  notify_on_copy: true,
115
119
  notify_user_actions: true,
120
+ recursive: true,
116
121
  send_interval: "daily"
117
122
  )
118
123
  ```
@@ -122,6 +127,7 @@ Files::Notification.update(id,
122
127
  * `id` (int64): Required - Notification ID.
123
128
  * `notify_on_copy` (boolean): If `true`, copying or moving resources into this path will trigger a notification, in addition to just uploads.
124
129
  * `notify_user_actions` (boolean): If `true` actions initiated by the user will still result in a notification
130
+ * `recursive` (boolean): If `true`, enable notifications for each subfolder in this path
125
131
  * `send_interval` (string): The time interval that notifications are aggregated by. Can be `five_minutes`, `fifteen_minutes`, `hourly`, or `daily`.
126
132
 
127
133
 
@@ -148,6 +154,7 @@ notification = Files::Notification.list_for(path).first
148
154
  notification.update(
149
155
  notify_on_copy: true,
150
156
  notify_user_actions: true,
157
+ recursive: true,
151
158
  send_interval: "daily"
152
159
  )
153
160
  ```
@@ -157,6 +164,7 @@ notification.update(
157
164
  * `id` (int64): Required - Notification ID.
158
165
  * `notify_on_copy` (boolean): If `true`, copying or moving resources into this path will trigger a notification, in addition to just uploads.
159
166
  * `notify_user_actions` (boolean): If `true` actions initiated by the user will still result in a notification
167
+ * `recursive` (boolean): If `true`, enable notifications for each subfolder in this path
160
168
  * `send_interval` (string): The time interval that notifications are aggregated by. Can be `five_minutes`, `fifteen_minutes`, `hourly`, or `daily`.
161
169
 
162
170
 
@@ -32,6 +32,7 @@
32
32
  "disable_password_reset": true,
33
33
  "domain": "my-custom-domain.com",
34
34
  "email": "john.doe@files.com",
35
+ "reply_to_email": "jane.doe@files.com",
35
36
  "non_sso_groups_allowed": true,
36
37
  "non_sso_users_allowed": true,
37
38
  "folder_permissions_groups_only": true,
@@ -145,6 +146,7 @@
145
146
  * `disable_password_reset` (boolean): Is password reset disabled?
146
147
  * `domain` (string): Custom domain
147
148
  * `email` (email): Main email for this site
149
+ * `reply_to_email` (email): Reply-to email for this site
148
150
  * `non_sso_groups_allowed` (boolean): If true, groups can be manually created / modified / deleted by Site Admins. Otherwise, groups can only be managed via your SSO provider.
149
151
  * `non_sso_users_allowed` (boolean): If true, users can be manually created / modified / deleted by Site Admins. Otherwise, users can only be managed via your SSO provider.
150
152
  * `folder_permissions_groups_only` (boolean): If true, permissions for this site must be bound to a group (not a user). Otherwise, permissions must be bound to a user.
@@ -273,6 +275,7 @@ Files::Site.update(
273
275
  subdomain: "mysite",
274
276
  domain: "my-custom-domain.com",
275
277
  email: "john.doe@files.com",
278
+ reply_to_email: "jane.doe@files.com",
276
279
  allow_bundle_names: true,
277
280
  bundle_expiration: 1,
278
281
  overage_notify: true,
@@ -364,6 +367,7 @@ Files::Site.update(
364
367
  * `subdomain` (string): Site subdomain
365
368
  * `domain` (string): Custom domain
366
369
  * `email` (string): Main email for this site
370
+ * `reply_to_email` (string): Reply-to email for this site
367
371
  * `allow_bundle_names` (boolean): Are manual Bundle names allowed?
368
372
  * `bundle_expiration` (int64): Site-wide Bundle expiration in days
369
373
  * `overage_notify` (boolean): Notify site email of overages?
@@ -34,6 +34,7 @@
34
34
  "provision_ftp_permission": true,
35
35
  "provision_sftp_permission": true,
36
36
  "provision_time_zone": "Eastern Time (US & Canada)",
37
+ "provision_company": "ACME Corp.",
37
38
  "ldap_base_dn": "",
38
39
  "ldap_domain": "mysite.com",
39
40
  "enabled": true,
@@ -75,6 +76,7 @@
75
76
  * `provision_ftp_permission` (boolean): Auto-provisioned users get FTP permission?
76
77
  * `provision_sftp_permission` (boolean): Auto-provisioned users get SFTP permission?
77
78
  * `provision_time_zone` (string): Default time zone for auto provisioned users.
79
+ * `provision_company` (string): Default company for auto provisioned users.
78
80
  * `ldap_base_dn` (string): Base DN for looking up users in LDAP server
79
81
  * `ldap_domain` (string): Domain name that will be appended to LDAP usernames
80
82
  * `enabled` (boolean): Is strategy enabled?
@@ -30,6 +30,7 @@
30
30
  "last_protocol_cipher": "",
31
31
  "lockout_expires": "2000-01-01T01:00:00Z",
32
32
  "name": "John Doe",
33
+ "company": "ACME Corp.",
33
34
  "notes": "Internal notes on this user.",
34
35
  "notification_daily_send_time": 18,
35
36
  "office_integration_enabled": true,
@@ -38,6 +39,7 @@
38
39
  "public_keys_count": 1,
39
40
  "receive_admin_alerts": true,
40
41
  "require_2fa": true,
42
+ "active_2fa": true,
41
43
  "require_password_change": true,
42
44
  "restapi_permission": true,
43
45
  "self_managed": true,
@@ -78,6 +80,7 @@
78
80
  * `last_protocol_cipher` (string): The last protocol and cipher used
79
81
  * `lockout_expires` (date-time): Time in the future that the user will no longer be locked out if applicable
80
82
  * `name` (string): User's full name
83
+ * `company` (string): User's company
81
84
  * `notes` (string): Any internal notes on the user
82
85
  * `notification_daily_send_time` (int64): Hour of the day at which daily notifications should be sent. Can be in range 0 to 23
83
86
  * `office_integration_enabled` (boolean): Enable integration with Office for the web?
@@ -86,6 +89,7 @@
86
89
  * `public_keys_count` (int64): Number of public keys associated with this user
87
90
  * `receive_admin_alerts` (boolean): Should the user receive admin alerts such a certificate expiration notifications and overages?
88
91
  * `require_2fa` (boolean): Is 2fa required to sign in?
92
+ * `active_2fa` (boolean): Is 2fa active for the user?
89
93
  * `require_password_change` (boolean): Is a password change required upon next user login?
90
94
  * `restapi_permission` (boolean): Can this user access the REST API?
91
95
  * `self_managed` (boolean): Does this user manage it's own credentials or is it a shared/bot user?
@@ -127,13 +131,13 @@ Files::User.list(
127
131
  * `per_page` (int64): Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
128
132
  * `action` (string): Deprecated: If set to `count` returns a count of matching records rather than the records themselves.
129
133
  * `cursor` (string): Send cursor to resume an existing list from the point at which you left off. Get a cursor from an existing list via the X-Files-Cursor-Next header.
130
- * `sort_by` (object): If set, sort records by the specified field in either 'asc' or 'desc' direction (e.g. sort_by[last_login_at]=desc). Valid fields are `active`, `master_admin`, `site_id`, `authenticate_until`, `email`, `last_desktop_login_at`, `last_login_at`, `username`, `notes`, `site_admin`, `receive_admin_alerts`, `allowed_ips`, `password_validity_days`, `ssl_required` or `not_site_admin`.
131
- * `filter` (object): If set, return records where the specifiied field is equal to the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
132
- * `filter_gt` (object): If set, return records where the specifiied field is greater than the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
133
- * `filter_gteq` (object): If set, return records where the specifiied field is greater than or equal to the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
134
- * `filter_like` (object): If set, return records where the specifiied field is equal to the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
135
- * `filter_lt` (object): If set, return records where the specifiied field is less than the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
136
- * `filter_lteq` (object): If set, return records where the specifiied field is less than or equal to the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
134
+ * `sort_by` (object): If set, sort records by the specified field in either 'asc' or 'desc' direction (e.g. sort_by[last_login_at]=desc). Valid fields are `active`, `master_admin`, `site_id`, `authenticate_until`, `email`, `last_desktop_login_at`, `last_login_at`, `username`, `company`, `name`, `notes`, `site_admin`, `receive_admin_alerts`, `allowed_ips`, `password_validity_days`, `ssl_required` or `not_site_admin`.
135
+ * `filter` (object): If set, return records where the specifiied field is equal to the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
136
+ * `filter_gt` (object): If set, return records where the specifiied field is greater than the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
137
+ * `filter_gteq` (object): If set, return records where the specifiied field is greater than or equal to the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
138
+ * `filter_like` (object): If set, return records where the specifiied field is equal to the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
139
+ * `filter_lt` (object): If set, return records where the specifiied field is less than the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
140
+ * `filter_lteq` (object): If set, return records where the specifiied field is less than or equal to the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
137
141
  * `ids` (string): comma-separated list of User IDs
138
142
  * `q[username]` (string): List users matching username.
139
143
  * `q[email]` (string): List users matching email.
@@ -182,6 +186,7 @@ Files::User.create(
182
186
  language: "en",
183
187
  notification_daily_send_time: 18,
184
188
  name: "John Doe",
189
+ company: "ACME Corp.",
185
190
  notes: "Internal notes on this user.",
186
191
  office_integration_enabled: true,
187
192
  password_validity_days: 1,
@@ -227,6 +232,7 @@ Files::User.create(
227
232
  * `language` (string): Preferred language
228
233
  * `notification_daily_send_time` (int64): Hour of the day at which daily notifications should be sent. Can be in range 0 to 23
229
234
  * `name` (string): User's full name
235
+ * `company` (string): User's company
230
236
  * `notes` (string): Any internal notes on the user
231
237
  * `office_integration_enabled` (boolean): Enable integration with Office for the web?
232
238
  * `password_validity_days` (int64): Number of days to allow user to use the same password
@@ -308,6 +314,7 @@ Files::User.update(id,
308
314
  language: "en",
309
315
  notification_daily_send_time: 18,
310
316
  name: "John Doe",
317
+ company: "ACME Corp.",
311
318
  notes: "Internal notes on this user.",
312
319
  office_integration_enabled: true,
313
320
  password_validity_days: 1,
@@ -354,6 +361,7 @@ Files::User.update(id,
354
361
  * `language` (string): Preferred language
355
362
  * `notification_daily_send_time` (int64): Hour of the day at which daily notifications should be sent. Can be in range 0 to 23
356
363
  * `name` (string): User's full name
364
+ * `company` (string): User's company
357
365
  * `notes` (string): Any internal notes on the user
358
366
  * `office_integration_enabled` (boolean): Enable integration with Office for the web?
359
367
  * `password_validity_days` (int64): Number of days to allow user to use the same password
@@ -456,6 +464,7 @@ user.update(
456
464
  language: "en",
457
465
  notification_daily_send_time: 18,
458
466
  name: "John Doe",
467
+ company: "ACME Corp.",
459
468
  notes: "Internal notes on this user.",
460
469
  office_integration_enabled: true,
461
470
  password_validity_days: 1,
@@ -502,6 +511,7 @@ user.update(
502
511
  * `language` (string): Preferred language
503
512
  * `notification_daily_send_time` (int64): Hour of the day at which daily notifications should be sent. Can be in range 0 to 23
504
513
  * `name` (string): User's full name
514
+ * `company` (string): User's company
505
515
  * `notes` (string): Any internal notes on the user
506
516
  * `office_integration_enabled` (boolean): Enable integration with Office for the web?
507
517
  * `password_validity_days` (int64): Number of days to allow user to use the same password
@@ -25,6 +25,7 @@ require "files.com/response"
25
25
  require "files.com/system_profiler"
26
26
  require "files.com/util"
27
27
  require "files.com/list"
28
+ require "files.com/uri"
28
29
 
29
30
  require "files.com/models/account_line_item"
30
31
  require "files.com/models/action"
@@ -172,9 +172,10 @@ module Files
172
172
  private def api_url(url = "", base_url = nil)
173
173
  uri = Addressable::URI.new
174
174
  uri.host = Addressable::URI.parse(base_url).host
175
- uri.path = "/api/rest/v1" + url
175
+ uri.path = "/api/rest/v1" + Files::URI.normalized_path(url)
176
176
  uri.scheme = Addressable::URI.parse(base_url).scheme
177
- uri.normalize!.to_s
177
+
178
+ uri.to_s
178
179
  end
179
180
 
180
181
  private def check_api_key!(api_key)
@@ -257,7 +257,7 @@ module Files
257
257
  # Parameters:
258
258
  # format - string
259
259
  # api_key - object
260
- def self.delete_current(params = {}, options = {})
260
+ def self.current(params = {}, options = {})
261
261
  raise InvalidParameterError.new("Bad parameter: format must be an String") if params.dig(:format) and !params.dig(:format).is_a?(String)
262
262
  raise InvalidParameterError.new("Bad parameter: api_key must be an Hash") if params.dig(:api_key) and !params.dig(:api_key).is_a?(Hash)
263
263
 
@@ -149,6 +149,15 @@ module Files
149
149
  @attributes[:inbox_id] = value
150
150
  end
151
151
 
152
+ # boolean - Does this bundle have an associated inbox?
153
+ def has_inbox
154
+ @attributes[:has_inbox]
155
+ end
156
+
157
+ def has_inbox=(value)
158
+ @attributes[:has_inbox] = value
159
+ end
160
+
152
161
  # array - A list of paths in this bundle
153
162
  def paths
154
163
  @attributes[:paths]
@@ -36,7 +36,7 @@ module Files
36
36
  @attributes[:end_at] = value
37
37
  end
38
38
 
39
- # string - Status of export. Will be: `building` or `ready`
39
+ # string - Status of export. Will be: `building`, `ready`, or `failed`
40
40
  def status
41
41
  @attributes[:status]
42
42
  end
@@ -54,7 +54,7 @@ module Files
54
54
  @attributes[:query_action] = value
55
55
  end
56
56
 
57
- # string - Filter results by this this interface type. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`
57
+ # string - Filter results by this this interface type. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`, `office`
58
58
  def query_interface
59
59
  @attributes[:query_interface]
60
60
  end
@@ -264,7 +264,7 @@ module Files
264
264
  # start_at - string - Start date/time of export range.
265
265
  # end_at - string - End date/time of export range.
266
266
  # query_action - string - Filter results by this this action type. Valid values: `create`, `read`, `update`, `destroy`, `move`, `login`, `failedlogin`, `copy`, `user_create`, `user_update`, `user_destroy`, `group_create`, `group_update`, `group_destroy`, `permission_create`, `permission_destroy`, `api_key_create`, `api_key_update`, `api_key_destroy`
267
- # query_interface - string - Filter results by this this interface type. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`
267
+ # query_interface - string - Filter results by this this interface type. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`, `office`
268
268
  # query_user_id - string - Return results that are actions performed by the user indiciated by this User ID
269
269
  # query_file_id - string - Return results that are file actions related to the file indicated by this File ID
270
270
  # query_parent_id - string - Return results that are file actions inside the parent folder specified by this folder ID
@@ -74,7 +74,7 @@ module Files
74
74
  @attributes[:failure_type]
75
75
  end
76
76
 
77
- # string - Inteface through which the action was taken. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`
77
+ # string - Inteface through which the action was taken. Valid values: `web`, `ftp`, `robot`, `jsapi`, `webdesktopapi`, `sftp`, `dav`, `desktop`, `restapi`, `scim`, `office`
78
78
  def interface
79
79
  @attributes[:interface]
80
80
  end
@@ -63,6 +63,15 @@ module Files
63
63
  @attributes[:notify_on_copy] = value
64
64
  end
65
65
 
66
+ # boolean - Enable notifications for each subfolder in this path
67
+ def recursive
68
+ @attributes[:recursive]
69
+ end
70
+
71
+ def recursive=(value)
72
+ @attributes[:recursive] = value
73
+ end
74
+
66
75
  # string - The time interval that notifications are aggregated to
67
76
  def send_interval
68
77
  @attributes[:send_interval]
@@ -120,6 +129,7 @@ module Files
120
129
  # Parameters:
121
130
  # notify_on_copy - boolean - If `true`, copying or moving resources into this path will trigger a notification, in addition to just uploads.
122
131
  # notify_user_actions - boolean - If `true` actions initiated by the user will still result in a notification
132
+ # recursive - boolean - If `true`, enable notifications for each subfolder in this path
123
133
  # send_interval - string - The time interval that notifications are aggregated by. Can be `five_minutes`, `fifteen_minutes`, `hourly`, or `daily`.
124
134
  def update(params = {})
125
135
  params ||= {}
@@ -216,6 +226,7 @@ module Files
216
226
  # user_id - int64 - The id of the user to notify. Provide `user_id`, `username` or `group_id`.
217
227
  # notify_on_copy - boolean - If `true`, copying or moving resources into this path will trigger a notification, in addition to just uploads.
218
228
  # notify_user_actions - boolean - If `true` actions initiated by the user will still result in a notification
229
+ # recursive - boolean - If `true`, enable notifications for each subfolder in this path
219
230
  # send_interval - string - The time interval that notifications are aggregated by. Can be `five_minutes`, `fifteen_minutes`, `hourly`, or `daily`.
220
231
  # group_id - int64 - The ID of the group to notify. Provide `user_id`, `username` or `group_id`.
221
232
  # path - string - Path
@@ -234,6 +245,7 @@ module Files
234
245
  # Parameters:
235
246
  # notify_on_copy - boolean - If `true`, copying or moving resources into this path will trigger a notification, in addition to just uploads.
236
247
  # notify_user_actions - boolean - If `true` actions initiated by the user will still result in a notification
248
+ # recursive - boolean - If `true`, enable notifications for each subfolder in this path
237
249
  # send_interval - string - The time interval that notifications are aggregated by. Can be `five_minutes`, `fifteen_minutes`, `hourly`, or `daily`.
238
250
  def self.update(id, params = {}, options = {})
239
251
  params ||= {}
@@ -149,6 +149,11 @@ module Files
149
149
  @attributes[:email]
150
150
  end
151
151
 
152
+ # email - Reply-to email for this site
153
+ def reply_to_email
154
+ @attributes[:reply_to_email]
155
+ end
156
+
152
157
  # boolean - If true, groups can be manually created / modified / deleted by Site Admins. Otherwise, groups can only be managed via your SSO provider.
153
158
  def non_sso_groups_allowed
154
159
  @attributes[:non_sso_groups_allowed]
@@ -586,6 +591,7 @@ module Files
586
591
  # subdomain - string - Site subdomain
587
592
  # domain - string - Custom domain
588
593
  # email - string - Main email for this site
594
+ # reply_to_email - string - Reply-to email for this site
589
595
  # allow_bundle_names - boolean - Are manual Bundle names allowed?
590
596
  # bundle_expiration - int64 - Site-wide Bundle expiration in days
591
597
  # overage_notify - boolean - Notify site email of overages?
@@ -689,6 +695,7 @@ module Files
689
695
  raise InvalidParameterError.new("Bad parameter: subdomain must be an String") if params.dig(:subdomain) and !params.dig(:subdomain).is_a?(String)
690
696
  raise InvalidParameterError.new("Bad parameter: domain must be an String") if params.dig(:domain) and !params.dig(:domain).is_a?(String)
691
697
  raise InvalidParameterError.new("Bad parameter: email must be an String") if params.dig(:email) and !params.dig(:email).is_a?(String)
698
+ raise InvalidParameterError.new("Bad parameter: reply_to_email must be an String") if params.dig(:reply_to_email) and !params.dig(:reply_to_email).is_a?(String)
692
699
  raise InvalidParameterError.new("Bad parameter: bundle_expiration must be an Integer") if params.dig(:bundle_expiration) and !params.dig(:bundle_expiration).is_a?(Integer)
693
700
  raise InvalidParameterError.new("Bad parameter: welcome_email_cc must be an String") if params.dig(:welcome_email_cc) and !params.dig(:welcome_email_cc).is_a?(String)
694
701
  raise InvalidParameterError.new("Bad parameter: welcome_custom_text must be an String") if params.dig(:welcome_custom_text) and !params.dig(:welcome_custom_text).is_a?(String)
@@ -149,6 +149,11 @@ module Files
149
149
  @attributes[:provision_time_zone]
150
150
  end
151
151
 
152
+ # string - Default company for auto provisioned users.
153
+ def provision_company
154
+ @attributes[:provision_company]
155
+ end
156
+
152
157
  # string - Base DN for looking up users in LDAP server
153
158
  def ldap_base_dn
154
159
  @attributes[:ldap_base_dn]
@@ -221,6 +221,15 @@ module Files
221
221
  @attributes[:name] = value
222
222
  end
223
223
 
224
+ # string - User's company
225
+ def company
226
+ @attributes[:company]
227
+ end
228
+
229
+ def company=(value)
230
+ @attributes[:company] = value
231
+ end
232
+
224
233
  # string - Any internal notes on the user
225
234
  def notes
226
235
  @attributes[:notes]
@@ -293,6 +302,15 @@ module Files
293
302
  @attributes[:require_2fa] = value
294
303
  end
295
304
 
305
+ # boolean - Is 2fa active for the user?
306
+ def active_2fa
307
+ @attributes[:active_2fa]
308
+ end
309
+
310
+ def active_2fa=(value)
311
+ @attributes[:active_2fa] = value
312
+ end
313
+
296
314
  # boolean - Is a password change required upon next user login?
297
315
  def require_password_change
298
316
  @attributes[:require_password_change]
@@ -550,6 +568,7 @@ module Files
550
568
  # language - string - Preferred language
551
569
  # notification_daily_send_time - int64 - Hour of the day at which daily notifications should be sent. Can be in range 0 to 23
552
570
  # name - string - User's full name
571
+ # company - string - User's company
553
572
  # notes - string - Any internal notes on the user
554
573
  # office_integration_enabled - boolean - Enable integration with Office for the web?
555
574
  # password_validity_days - int64 - Number of days to allow user to use the same password
@@ -586,6 +605,7 @@ module Files
586
605
  raise InvalidParameterError.new("Bad parameter: language must be an String") if params.dig(:language) and !params.dig(:language).is_a?(String)
587
606
  raise InvalidParameterError.new("Bad parameter: notification_daily_send_time must be an Integer") if params.dig(:notification_daily_send_time) and !params.dig(:notification_daily_send_time).is_a?(Integer)
588
607
  raise InvalidParameterError.new("Bad parameter: name must be an String") if params.dig(:name) and !params.dig(:name).is_a?(String)
608
+ raise InvalidParameterError.new("Bad parameter: company must be an String") if params.dig(:company) and !params.dig(:company).is_a?(String)
589
609
  raise InvalidParameterError.new("Bad parameter: notes must be an String") if params.dig(:notes) and !params.dig(:notes).is_a?(String)
590
610
  raise InvalidParameterError.new("Bad parameter: password_validity_days must be an Integer") if params.dig(:password_validity_days) and !params.dig(:password_validity_days).is_a?(Integer)
591
611
  raise InvalidParameterError.new("Bad parameter: ssl_required must be an String") if params.dig(:ssl_required) and !params.dig(:ssl_required).is_a?(String)
@@ -626,13 +646,13 @@ module Files
626
646
  # per_page - int64 - Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
627
647
  # action - string - Deprecated: If set to `count` returns a count of matching records rather than the records themselves.
628
648
  # cursor - string - Send cursor to resume an existing list from the point at which you left off. Get a cursor from an existing list via the X-Files-Cursor-Next header.
629
- # sort_by - object - If set, sort records by the specified field in either 'asc' or 'desc' direction (e.g. sort_by[last_login_at]=desc). Valid fields are `active`, `master_admin`, `site_id`, `authenticate_until`, `email`, `last_desktop_login_at`, `last_login_at`, `username`, `notes`, `site_admin`, `receive_admin_alerts`, `allowed_ips`, `password_validity_days`, `ssl_required` or `not_site_admin`.
630
- # filter - object - If set, return records where the specifiied field is equal to the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
631
- # filter_gt - object - If set, return records where the specifiied field is greater than the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
632
- # filter_gteq - object - If set, return records where the specifiied field is greater than or equal to the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
633
- # filter_like - object - If set, return records where the specifiied field is equal to the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
634
- # filter_lt - object - If set, return records where the specifiied field is less than the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
635
- # filter_lteq - object - If set, return records where the specifiied field is less than or equal to the supplied value. Valid fields are `username`, `email`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
649
+ # sort_by - object - If set, sort records by the specified field in either 'asc' or 'desc' direction (e.g. sort_by[last_login_at]=desc). Valid fields are `active`, `master_admin`, `site_id`, `authenticate_until`, `email`, `last_desktop_login_at`, `last_login_at`, `username`, `company`, `name`, `notes`, `site_admin`, `receive_admin_alerts`, `allowed_ips`, `password_validity_days`, `ssl_required` or `not_site_admin`.
650
+ # filter - object - If set, return records where the specifiied field is equal to the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
651
+ # filter_gt - object - If set, return records where the specifiied field is greater than the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
652
+ # filter_gteq - object - If set, return records where the specifiied field is greater than or equal to the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
653
+ # filter_like - object - If set, return records where the specifiied field is equal to the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
654
+ # filter_lt - object - If set, return records where the specifiied field is less than the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
655
+ # filter_lteq - object - If set, return records where the specifiied field is less than or equal to the supplied value. Valid fields are `username`, `email`, `company`, `notes`, `site_admin`, `allowed_ips`, `password_validity_days`, `ssl_required`, `last_login_at`, `authenticate_until` or `not_site_admin`.
636
656
  # ids - string - comma-separated list of User IDs
637
657
  # q[username] - string - List users matching username.
638
658
  # q[email] - string - List users matching email.
@@ -708,6 +728,7 @@ module Files
708
728
  # language - string - Preferred language
709
729
  # notification_daily_send_time - int64 - Hour of the day at which daily notifications should be sent. Can be in range 0 to 23
710
730
  # name - string - User's full name
731
+ # company - string - User's company
711
732
  # notes - string - Any internal notes on the user
712
733
  # office_integration_enabled - boolean - Enable integration with Office for the web?
713
734
  # password_validity_days - int64 - Number of days to allow user to use the same password
@@ -740,6 +761,7 @@ module Files
740
761
  raise InvalidParameterError.new("Bad parameter: language must be an String") if params.dig(:language) and !params.dig(:language).is_a?(String)
741
762
  raise InvalidParameterError.new("Bad parameter: notification_daily_send_time must be an Integer") if params.dig(:notification_daily_send_time) and !params.dig(:notification_daily_send_time).is_a?(Integer)
742
763
  raise InvalidParameterError.new("Bad parameter: name must be an String") if params.dig(:name) and !params.dig(:name).is_a?(String)
764
+ raise InvalidParameterError.new("Bad parameter: company must be an String") if params.dig(:company) and !params.dig(:company).is_a?(String)
743
765
  raise InvalidParameterError.new("Bad parameter: notes must be an String") if params.dig(:notes) and !params.dig(:notes).is_a?(String)
744
766
  raise InvalidParameterError.new("Bad parameter: password_validity_days must be an Integer") if params.dig(:password_validity_days) and !params.dig(:password_validity_days).is_a?(Integer)
745
767
  raise InvalidParameterError.new("Bad parameter: ssl_required must be an String") if params.dig(:ssl_required) and !params.dig(:ssl_required).is_a?(String)
@@ -811,6 +833,7 @@ module Files
811
833
  # language - string - Preferred language
812
834
  # notification_daily_send_time - int64 - Hour of the day at which daily notifications should be sent. Can be in range 0 to 23
813
835
  # name - string - User's full name
836
+ # company - string - User's company
814
837
  # notes - string - Any internal notes on the user
815
838
  # office_integration_enabled - boolean - Enable integration with Office for the web?
816
839
  # password_validity_days - int64 - Number of days to allow user to use the same password
@@ -846,6 +869,7 @@ module Files
846
869
  raise InvalidParameterError.new("Bad parameter: language must be an String") if params.dig(:language) and !params.dig(:language).is_a?(String)
847
870
  raise InvalidParameterError.new("Bad parameter: notification_daily_send_time must be an Integer") if params.dig(:notification_daily_send_time) and !params.dig(:notification_daily_send_time).is_a?(Integer)
848
871
  raise InvalidParameterError.new("Bad parameter: name must be an String") if params.dig(:name) and !params.dig(:name).is_a?(String)
872
+ raise InvalidParameterError.new("Bad parameter: company must be an String") if params.dig(:company) and !params.dig(:company).is_a?(String)
849
873
  raise InvalidParameterError.new("Bad parameter: notes must be an String") if params.dig(:notes) and !params.dig(:notes).is_a?(String)
850
874
  raise InvalidParameterError.new("Bad parameter: password_validity_days must be an Integer") if params.dig(:password_validity_days) and !params.dig(:password_validity_days).is_a?(Integer)
851
875
  raise InvalidParameterError.new("Bad parameter: ssl_required must be an String") if params.dig(:ssl_required) and !params.dig(:ssl_required).is_a?(String)
@@ -0,0 +1,70 @@
1
+ module Files
2
+ module URI
3
+ # This is a copy of Addressable::URI.normalize_component without Addressable::IDNA.unicode_normalize_kc.
4
+ def self.normalize_component(component, character_class =
5
+ Addressable::URI::CharacterClasses::RESERVED + Addressable::URI::CharacterClasses::UNRESERVED,
6
+ leave_encoded = '')
7
+ return nil if component.nil?
8
+
9
+ unless component.is_a? String
10
+ begin
11
+ component = component.to_str
12
+ rescue NoMethodError, TypeError
13
+ raise TypeError, "Can't convert #{component.class} into String."
14
+ end
15
+ end
16
+
17
+ unless [ String, Regexp ].include?(character_class.class)
18
+ raise TypeError,
19
+ "Expected String or Regexp, got #{character_class.inspect}"
20
+ end
21
+ if character_class.is_a?(String)
22
+ leave_re = unless leave_encoded.empty?
23
+ character_class = "#{character_class}%" unless character_class.include?('%')
24
+
25
+ "|%(?!#{leave_encoded.chars.map do |char|
26
+ seq = SEQUENCE_ENCODING_TABLE[char]
27
+ [ seq.upcase, seq.downcase ]
28
+ end.flatten.join('|')})"
29
+ end
30
+
31
+ character_class = /[^#{character_class}]#{leave_re}/
32
+ end
33
+ # We can't perform regexps on invalid UTF sequences, but
34
+ # here we need to, so switch to ASCII.
35
+ component = component.dup
36
+ component.force_encoding(Encoding::ASCII_8BIT)
37
+ unencoded = Addressable::URI.unencode_component(component, String, leave_encoded)
38
+ begin
39
+ encoded = Addressable::URI.encode_component(
40
+ # Addressable::IDNA.unicode_normalize_kc(unencoded),
41
+ unencoded,
42
+ character_class,
43
+ leave_encoded
44
+ )
45
+ rescue ArgumentError
46
+ encoded = encode_component(unencoded)
47
+ end
48
+ encoded.force_encoding(Encoding::UTF_8)
49
+ encoded
50
+ end
51
+
52
+ def self.normalized_path(path)
53
+ if path =~ Addressable::URI::NORMPATH
54
+ # Relative paths with colons in the first segment are ambiguous.
55
+ path = path.sub(":", "%2F")
56
+ end
57
+ # String#split(delimeter, -1) uses the more strict splitting behavior
58
+ # found by default in Python.
59
+ result = path.strip.split(Addressable::URI::SLASH, -1).map do |segment|
60
+ normalize_component(
61
+ segment,
62
+ Addressable::URI::CharacterClasses::PCHAR
63
+ )
64
+ end.join(Addressable::URI::SLASH)
65
+
66
+ # All normalized values should be UTF-8
67
+ result.force_encoding(Encoding::UTF_8)
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,11 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Files::URI do
4
+ describe "normalized_path" do
5
+ it { expect(described_class.normalized_path("[[strange stuff]]#yes.text")).to eq("%5B%5Bstrange%20stuff%5D%5D%23yes.text") }
6
+ it { expect(Addressable::URI.unencode_component(described_class.normalized_path("[[strange stuff]]#yes.text"))).to eq("[[strange stuff]]#yes.text") }
7
+
8
+ it { expect(described_class.normalized_path("folder/AdÇe")).to eq("folder/AdC%CC%A7e") }
9
+ it { expect(Addressable::URI.unencode_component(described_class.normalized_path("AdÇe"))).to eq("AdÇe") }
10
+ end
11
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: files.com
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.110
4
+ version: 1.0.115
5
5
  platform: ruby
6
6
  authors:
7
7
  - files.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-27 00:00:00.000000000 Z
11
+ date: 2020-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -211,12 +211,14 @@ files:
211
211
  - lib/files.com/response.rb
212
212
  - lib/files.com/sizable_io.rb
213
213
  - lib/files.com/system_profiler.rb
214
+ - lib/files.com/uri.rb
214
215
  - lib/files.com/util.rb
215
216
  - lib/files.com/version.rb
216
217
  - spec/list_spec.rb
217
218
  - spec/models/file_spec.rb
218
219
  - spec/models/folder_spec.rb
219
220
  - spec/spec_helper.rb
221
+ - spec/uri_spec.rb
220
222
  - test.sh
221
223
  - test/test.rb
222
224
  homepage: https://www.files.com