opendal 0.1.12 → 0.1.13

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.
Files changed (244) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +31 -36
  3. data/Cargo.toml +1 -1
  4. data/DEPENDENCIES.rust.tsv +25 -35
  5. data/README.md +1 -1
  6. data/core/CHANGELOG.md +4 -0
  7. data/core/Cargo.lock +128 -187
  8. data/core/Cargo.toml +95 -95
  9. data/core/DEPENDENCIES.rust.tsv +259 -289
  10. data/core/LICENSE +16 -0
  11. data/core/benches/vs_fs/Cargo.toml +1 -1
  12. data/core/benches/vs_s3/Cargo.toml +1 -1
  13. data/core/core/CHANGELOG.md +4 -0
  14. data/core/core/Cargo.toml +1 -1
  15. data/core/core/LICENSE +16 -0
  16. data/core/core/src/docs/upgrade.md +8 -0
  17. data/core/core/src/lib.rs +1 -3
  18. data/core/core/src/raw/futures_util.rs +26 -21
  19. data/core/core/src/raw/http_util/error.rs +9 -0
  20. data/core/core/src/raw/ops.rs +1 -0
  21. data/core/core/src/types/http_transport/mod.rs +30 -2
  22. data/core/core/src/types/http_transport/uri.rs +166 -0
  23. data/core/core/src/types/metadata.rs +1 -0
  24. data/core/core/src/types/mod.rs +2 -0
  25. data/core/http-transports/reqwest/Cargo.toml +1 -1
  26. data/core/http-transports/reqwest/LICENSE +16 -0
  27. data/core/http-transports/reqwest/src/lib.rs +46 -4
  28. data/core/layers/async-backtrace/Cargo.toml +2 -2
  29. data/core/layers/async-backtrace/LICENSE +16 -0
  30. data/core/layers/await-tree/Cargo.toml +2 -2
  31. data/core/layers/await-tree/LICENSE +16 -0
  32. data/core/layers/capability-check/Cargo.toml +2 -2
  33. data/core/layers/capability-check/LICENSE +16 -0
  34. data/core/layers/chaos/Cargo.toml +2 -2
  35. data/core/layers/chaos/LICENSE +16 -0
  36. data/core/layers/concurrent-limit/Cargo.toml +3 -3
  37. data/core/layers/concurrent-limit/LICENSE +16 -0
  38. data/core/layers/dtrace/Cargo.toml +2 -2
  39. data/core/layers/dtrace/LICENSE +16 -0
  40. data/core/layers/fastmetrics/Cargo.toml +3 -3
  41. data/core/layers/fastmetrics/LICENSE +16 -0
  42. data/core/layers/fastrace/Cargo.toml +2 -2
  43. data/core/layers/fastrace/LICENSE +16 -0
  44. data/core/layers/foyer/Cargo.toml +2 -2
  45. data/core/layers/foyer/LICENSE +16 -0
  46. data/core/layers/hotpath/Cargo.toml +2 -2
  47. data/core/layers/hotpath/LICENSE +16 -0
  48. data/core/layers/immutable-index/Cargo.toml +2 -2
  49. data/core/layers/immutable-index/LICENSE +16 -0
  50. data/core/layers/logging/Cargo.toml +2 -2
  51. data/core/layers/logging/LICENSE +16 -0
  52. data/core/layers/metrics/Cargo.toml +3 -3
  53. data/core/layers/metrics/LICENSE +16 -0
  54. data/core/layers/mime-guess/Cargo.toml +2 -2
  55. data/core/layers/mime-guess/LICENSE +16 -0
  56. data/core/layers/observe-metrics-common/Cargo.toml +1 -1
  57. data/core/layers/observe-metrics-common/LICENSE +16 -0
  58. data/core/layers/otelmetrics/Cargo.toml +3 -3
  59. data/core/layers/otelmetrics/LICENSE +16 -0
  60. data/core/layers/oteltrace/Cargo.toml +2 -2
  61. data/core/layers/oteltrace/LICENSE +16 -0
  62. data/core/layers/prometheus/Cargo.toml +3 -3
  63. data/core/layers/prometheus/LICENSE +16 -0
  64. data/core/layers/prometheus-client/Cargo.toml +3 -3
  65. data/core/layers/prometheus-client/LICENSE +16 -0
  66. data/core/layers/retry/Cargo.toml +4 -4
  67. data/core/layers/retry/LICENSE +16 -0
  68. data/core/layers/route/Cargo.toml +3 -3
  69. data/core/layers/route/LICENSE +16 -0
  70. data/core/layers/tail-cut/Cargo.toml +2 -2
  71. data/core/layers/tail-cut/LICENSE +16 -0
  72. data/core/layers/throttle/Cargo.toml +2 -2
  73. data/core/layers/throttle/LICENSE +16 -0
  74. data/core/layers/timeout/Cargo.toml +3 -3
  75. data/core/layers/timeout/LICENSE +16 -0
  76. data/core/layers/tracing/Cargo.toml +2 -2
  77. data/core/layers/tracing/LICENSE +16 -0
  78. data/core/services/aliyun-drive/Cargo.toml +2 -2
  79. data/core/services/aliyun-drive/LICENSE +16 -0
  80. data/core/services/alluxio/Cargo.toml +1 -1
  81. data/core/services/alluxio/LICENSE +16 -0
  82. data/core/services/azblob/Cargo.toml +2 -2
  83. data/core/services/azblob/LICENSE +16 -0
  84. data/core/services/azblob/src/backend.rs +21 -7
  85. data/core/services/azblob/src/config.rs +4 -1
  86. data/core/services/azdls/Cargo.toml +3 -3
  87. data/core/services/azdls/LICENSE +16 -0
  88. data/core/services/azfile/Cargo.toml +2 -2
  89. data/core/services/azfile/LICENSE +16 -0
  90. data/core/services/azure-common/Cargo.toml +1 -1
  91. data/core/services/azure-common/LICENSE +16 -0
  92. data/core/services/b2/Cargo.toml +2 -2
  93. data/core/services/b2/LICENSE +16 -0
  94. data/core/services/cacache/Cargo.toml +1 -1
  95. data/core/services/cacache/LICENSE +16 -0
  96. data/core/services/cloudflare-kv/Cargo.toml +1 -1
  97. data/core/services/cloudflare-kv/LICENSE +16 -0
  98. data/core/services/compfs/Cargo.toml +1 -1
  99. data/core/services/compfs/LICENSE +16 -0
  100. data/core/services/compfs/src/core.rs +27 -11
  101. data/core/services/cos/Cargo.toml +1 -1
  102. data/core/services/cos/LICENSE +16 -0
  103. data/core/services/d1/Cargo.toml +1 -1
  104. data/core/services/d1/LICENSE +16 -0
  105. data/core/services/dashmap/Cargo.toml +1 -1
  106. data/core/services/dashmap/LICENSE +16 -0
  107. data/core/services/dbfs/Cargo.toml +1 -1
  108. data/core/services/dbfs/LICENSE +16 -0
  109. data/core/services/dropbox/Cargo.toml +2 -2
  110. data/core/services/dropbox/LICENSE +16 -0
  111. data/core/services/etcd/Cargo.toml +2 -2
  112. data/core/services/etcd/LICENSE +16 -0
  113. data/core/services/etcd/src/core.rs +3 -3
  114. data/core/services/foundationdb/Cargo.toml +1 -1
  115. data/core/services/foundationdb/LICENSE +16 -0
  116. data/core/services/foyer/Cargo.toml +3 -3
  117. data/core/services/foyer/LICENSE +16 -0
  118. data/core/services/fs/Cargo.toml +1 -1
  119. data/core/services/fs/LICENSE +16 -0
  120. data/core/services/fs/src/core.rs +69 -10
  121. data/core/services/ftp/Cargo.toml +2 -2
  122. data/core/services/ftp/LICENSE +16 -0
  123. data/core/services/ftp/src/core.rs +1 -1
  124. data/core/services/ftp/src/reader.rs +1 -1
  125. data/core/services/ftp/src/writer.rs +1 -1
  126. data/core/services/gcs/Cargo.toml +3 -2
  127. data/core/services/gcs/LICENSE +16 -0
  128. data/core/services/gcs/src/composer.rs +11 -21
  129. data/core/services/gcs-grpc/Cargo.toml +1 -1
  130. data/core/services/gcs-grpc/proto/google/storage/v2/storage.proto +17 -18
  131. data/core/services/gdrive/Cargo.toml +3 -2
  132. data/core/services/gdrive/LICENSE +16 -0
  133. data/core/services/gdrive/src/docs.md +2 -0
  134. data/core/services/gdrive/src/path_index.rs +109 -18
  135. data/core/services/ghac/Cargo.toml +2 -2
  136. data/core/services/ghac/LICENSE +16 -0
  137. data/core/services/github/Cargo.toml +1 -1
  138. data/core/services/github/LICENSE +16 -0
  139. data/core/services/goosefs/Cargo.toml +13 -4
  140. data/core/services/goosefs/LICENSE +16 -0
  141. data/core/services/goosefs/README.md +11 -0
  142. data/core/services/goosefs/src/backend.rs +3 -5
  143. data/core/services/goosefs/src/core.rs +1 -1
  144. data/core/services/goosefs/src/docs.md +44 -3
  145. data/core/services/goosefs/src/reader.rs +22 -89
  146. data/core/services/gridfs/Cargo.toml +2 -2
  147. data/core/services/gridfs/LICENSE +16 -0
  148. data/core/services/hdfs/Cargo.toml +1 -1
  149. data/core/services/hdfs/LICENSE +16 -0
  150. data/core/services/hdfs-native/Cargo.toml +1 -1
  151. data/core/services/hdfs-native/LICENSE +16 -0
  152. data/core/services/hf/Cargo.toml +3 -3
  153. data/core/services/hf/LICENSE +16 -0
  154. data/core/services/hf/src/backend.rs +77 -9
  155. data/core/services/hf/src/config.rs +58 -0
  156. data/core/services/hf/src/core.rs +695 -318
  157. data/core/services/hf/src/docs.md +29 -0
  158. data/core/services/hf/src/lister.rs +3 -3
  159. data/core/services/hf/src/reader.rs +128 -143
  160. data/core/services/http/Cargo.toml +3 -3
  161. data/core/services/http/LICENSE +16 -0
  162. data/core/services/ipfs/Cargo.toml +1 -1
  163. data/core/services/ipfs/LICENSE +16 -0
  164. data/core/services/ipmfs/Cargo.toml +1 -1
  165. data/core/services/ipmfs/LICENSE +16 -0
  166. data/core/services/koofr/Cargo.toml +2 -2
  167. data/core/services/koofr/LICENSE +16 -0
  168. data/core/services/lakefs/Cargo.toml +1 -1
  169. data/core/services/lakefs/LICENSE +16 -0
  170. data/core/services/memcached/Cargo.toml +2 -2
  171. data/core/services/memcached/LICENSE +16 -0
  172. data/core/services/memcached/src/core.rs +3 -3
  173. data/core/services/mini_moka/Cargo.toml +1 -1
  174. data/core/services/mini_moka/LICENSE +16 -0
  175. data/core/services/moka/Cargo.toml +1 -1
  176. data/core/services/moka/LICENSE +16 -0
  177. data/core/services/mongodb/Cargo.toml +2 -2
  178. data/core/services/mongodb/LICENSE +16 -0
  179. data/core/services/monoiofs/Cargo.toml +2 -2
  180. data/core/services/monoiofs/LICENSE +16 -0
  181. data/core/services/monoiofs/src/core.rs +27 -11
  182. data/core/services/mysql/Cargo.toml +2 -2
  183. data/core/services/mysql/LICENSE +16 -0
  184. data/core/services/obs/Cargo.toml +1 -1
  185. data/core/services/obs/LICENSE +16 -0
  186. data/core/services/onedrive/Cargo.toml +2 -2
  187. data/core/services/onedrive/LICENSE +16 -0
  188. data/core/services/opfs/Cargo.toml +1 -1
  189. data/core/services/opfs/LICENSE +16 -0
  190. data/core/services/oss/Cargo.toml +1 -1
  191. data/core/services/oss/LICENSE +16 -0
  192. data/core/services/pcloud/Cargo.toml +1 -1
  193. data/core/services/pcloud/LICENSE +16 -0
  194. data/core/services/persy/Cargo.toml +1 -1
  195. data/core/services/persy/LICENSE +16 -0
  196. data/core/services/postgresql/Cargo.toml +2 -2
  197. data/core/services/postgresql/LICENSE +16 -0
  198. data/core/services/redb/Cargo.toml +1 -1
  199. data/core/services/redb/LICENSE +16 -0
  200. data/core/services/redis/Cargo.toml +2 -2
  201. data/core/services/redis/LICENSE +16 -0
  202. data/core/services/redis/src/core.rs +1 -1
  203. data/core/services/rocksdb/Cargo.toml +1 -1
  204. data/core/services/rocksdb/LICENSE +16 -0
  205. data/core/services/s3/Cargo.toml +1 -1
  206. data/core/services/s3/LICENSE +16 -0
  207. data/core/services/seafile/Cargo.toml +4 -2
  208. data/core/services/seafile/LICENSE +16 -0
  209. data/core/services/seafile/src/backend.rs +2 -3
  210. data/core/services/seafile/src/core.rs +189 -86
  211. data/core/services/seafile/src/docs.md +2 -0
  212. data/core/services/sftp/Cargo.toml +2 -2
  213. data/core/services/sftp/LICENSE +16 -0
  214. data/core/services/sftp/src/core.rs +1 -1
  215. data/core/services/sftp/src/reader.rs +1 -1
  216. data/core/services/sled/Cargo.toml +1 -1
  217. data/core/services/sled/LICENSE +16 -0
  218. data/core/services/sqlite/Cargo.toml +2 -2
  219. data/core/services/sqlite/LICENSE +16 -0
  220. data/core/services/surrealdb/Cargo.toml +2 -2
  221. data/core/services/surrealdb/LICENSE +16 -0
  222. data/core/services/swift/Cargo.toml +1 -1
  223. data/core/services/swift/LICENSE +16 -0
  224. data/core/services/tikv/Cargo.toml +2 -2
  225. data/core/services/tikv/LICENSE +16 -0
  226. data/core/services/tos/Cargo.toml +1 -1
  227. data/core/services/tos/LICENSE +16 -0
  228. data/core/services/upyun/Cargo.toml +1 -1
  229. data/core/services/upyun/LICENSE +16 -0
  230. data/core/services/vercel-artifacts/Cargo.toml +1 -1
  231. data/core/services/vercel-artifacts/LICENSE +16 -0
  232. data/core/services/vercel-blob/Cargo.toml +1 -1
  233. data/core/services/vercel-blob/LICENSE +16 -0
  234. data/core/services/webdav/Cargo.toml +1 -2
  235. data/core/services/webdav/LICENSE +16 -0
  236. data/core/services/webhdfs/Cargo.toml +2 -2
  237. data/core/services/webhdfs/LICENSE +16 -0
  238. data/core/services/yandex-disk/Cargo.toml +1 -1
  239. data/core/services/yandex-disk/LICENSE +16 -0
  240. data/core/src/lib.rs +1 -3
  241. data/core/testkit/Cargo.toml +4 -4
  242. data/core/testkit/LICENSE +16 -0
  243. data/core/upgrade.md +8 -0
  244. metadata +3 -2
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -33,7 +33,7 @@ all-features = true
33
33
 
34
34
  [dependencies]
35
35
  governor = "0.10.4"
36
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
36
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
37
37
 
38
38
  [dev-dependencies]
39
- opendal-core = { path = "../../core", version = "0.59.1" }
39
+ opendal-core = { path = "../../core", version = "0.59.2" }
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -32,11 +32,11 @@ version = { workspace = true }
32
32
  all-features = true
33
33
 
34
34
  [dependencies]
35
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
35
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
36
36
  tokio = { workspace = true, features = ["time"] }
37
37
 
38
38
  [dev-dependencies]
39
39
  futures = { workspace = true }
40
- opendal-core = { path = "../../core", version = "0.59.1" }
41
- opendal-layer-retry = { path = "../retry", version = "0.59.1" }
40
+ opendal-core = { path = "../../core", version = "0.59.2" }
41
+ opendal-layer-retry = { path = "../retry", version = "0.59.2" }
42
42
  tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -34,13 +34,13 @@ all-features = true
34
34
  [dependencies]
35
35
  futures = { workspace = true }
36
36
  http = { workspace = true }
37
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
37
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
38
38
  tracing = "0.1"
39
39
 
40
40
  [dev-dependencies]
41
41
  anyhow = "1.0"
42
42
  dotenvy = "0.15"
43
- opendal-core = { path = "../../core", version = "0.59.1" }
43
+ opendal-core = { path = "../../core", version = "0.59.2" }
44
44
  opentelemetry = { version = "0.32.0", default-features = false, features = [
45
45
  "trace",
46
46
  ] }
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -32,11 +32,11 @@ version = { workspace = true }
32
32
  all-features = true
33
33
 
34
34
  [dependencies]
35
- asyncband = { workspace = true }
35
+ asyncband = { workspace = true, features = ["mutex"] }
36
36
  bytes = { workspace = true }
37
37
  http = { workspace = true }
38
38
  log = { workspace = true }
39
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
39
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
40
40
  serde = { workspace = true, features = ["derive"] }
41
41
  serde_json = { workspace = true }
42
42
 
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -35,7 +35,7 @@ all-features = true
35
35
  bytes = { workspace = true }
36
36
  http = { workspace = true }
37
37
  log = { workspace = true }
38
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
38
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
39
39
  serde = { workspace = true, features = ["derive"] }
40
40
  serde_json = { workspace = true }
41
41
 
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -36,10 +36,10 @@ base64 = { workspace = true }
36
36
  bytes = { workspace = true }
37
37
  http = { workspace = true }
38
38
  log = { workspace = true }
39
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false, features = [
39
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false, features = [
40
40
  "reqsign",
41
41
  ] }
42
- opendal-service-azure-common = { path = "../azure-common", version = "0.59.1" }
42
+ opendal-service-azure-common = { path = "../azure-common", version = "0.59.2" }
43
43
  quick-xml = { workspace = true, features = ["serialize", "overlapped-lists"] }
44
44
  reqsign-azure-storage = { version = "3.1.1", default-features = false }
45
45
  reqsign-core = { version = "3.2.0", default-features = false }
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -22,11 +22,13 @@ use base64::Engine;
22
22
  use base64::prelude::BASE64_STANDARD;
23
23
  use http::StatusCode;
24
24
  use log::debug;
25
+ use reqsign_azure_storage::Credential;
25
26
  use reqsign_azure_storage::DefaultCredentialProvider;
26
27
  use reqsign_azure_storage::RequestSigner;
27
28
  use reqsign_azure_storage::StaticCredentialProvider;
28
29
  use reqsign_core::Context;
29
30
  use reqsign_core::OsEnv;
31
+ use reqsign_core::ProvideCredentialChain;
30
32
  use reqsign_core::Signer;
31
33
  use reqsign_file_read_tokio::TokioFileRead;
32
34
  use sha2::Digest;
@@ -73,6 +75,7 @@ impl From<AzureConnectionConfig> for AzblobConfig {
73
75
  #[derive(Default)]
74
76
  pub struct AzblobBuilder {
75
77
  pub(super) config: AzblobConfig,
78
+ pub(super) credential_providers: Option<ProvideCredentialChain<Credential>>,
76
79
  }
77
80
 
78
81
  impl Debug for AzblobBuilder {
@@ -240,6 +243,12 @@ impl AzblobBuilder {
240
243
  self
241
244
  }
242
245
 
246
+ /// Replace the credential providers with a custom chain.
247
+ pub fn credential_provider_chain(mut self, chain: ProvideCredentialChain<Credential>) -> Self {
248
+ self.credential_providers = Some(chain);
249
+ self
250
+ }
251
+
243
252
  /// Deprecated: Azblob delete batch capability is enabled by default with Azure Blob's 256-operation batch limit.
244
253
  #[deprecated(
245
254
  since = "0.57.0",
@@ -367,24 +376,29 @@ impl Builder for AzblobBuilder {
367
376
 
368
377
  let ctx = Context::new().with_file_read(TokioFileRead).with_env(OsEnv);
369
378
 
370
- let mut credential = DefaultCredentialProvider::new();
379
+ let mut credential_providers =
380
+ ProvideCredentialChain::new().push(DefaultCredentialProvider::new());
371
381
 
372
382
  if let (Some(account_name), Some(account_key)) =
373
383
  (account_name.as_deref(), self.config.account_key.as_deref())
374
384
  {
375
- credential = credential.push_front(StaticCredentialProvider::new_shared_key(
376
- account_name,
377
- account_key,
378
- ));
385
+ credential_providers = credential_providers.push_front(
386
+ StaticCredentialProvider::new_shared_key(account_name, account_key),
387
+ );
379
388
  }
380
389
 
381
390
  if let Some(sas_token) = self.config.sas_token.as_deref() {
382
- credential = credential.push_front(StaticCredentialProvider::new_sas_token(sas_token));
391
+ credential_providers =
392
+ credential_providers.push_front(StaticCredentialProvider::new_sas_token(sas_token));
393
+ }
394
+
395
+ if let Some(customized_credential_chain) = self.credential_providers {
396
+ credential_providers = customized_credential_chain;
383
397
  }
384
398
 
385
399
  let signer = Signer::new(
386
400
  ctx,
387
- credential,
401
+ credential_providers,
388
402
  RequestSigner::new().with_service_sas_permissions("racwd"),
389
403
  );
390
404
 
@@ -115,7 +115,10 @@ impl opendal_core::Configurator for AzblobConfig {
115
115
 
116
116
  #[allow(deprecated)]
117
117
  fn into_builder(self) -> Self::Builder {
118
- AzblobBuilder { config: self }
118
+ AzblobBuilder {
119
+ config: self,
120
+ credential_providers: None,
121
+ }
119
122
  }
120
123
  }
121
124
 
@@ -32,15 +32,15 @@ version = { workspace = true }
32
32
  all-features = true
33
33
 
34
34
  [dependencies]
35
- asyncband = { workspace = true }
35
+ asyncband = { workspace = true, features = ["once-cell"] }
36
36
  base64 = { workspace = true }
37
37
  bytes = { workspace = true }
38
38
  http = { workspace = true }
39
39
  log = { workspace = true }
40
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false, features = [
40
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false, features = [
41
41
  "reqsign",
42
42
  ] }
43
- opendal-service-azure-common = { path = "../azure-common", version = "0.59.1" }
43
+ opendal-service-azure-common = { path = "../azure-common", version = "0.59.2" }
44
44
  quick-xml = { workspace = true, features = ["serialize", "overlapped-lists"] }
45
45
  reqsign-azure-storage = { version = "3.1.1", default-features = false }
46
46
  reqsign-core = { version = "3.2.0", default-features = false }
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -35,10 +35,10 @@ all-features = true
35
35
  bytes = { workspace = true }
36
36
  http = { workspace = true }
37
37
  log = { workspace = true }
38
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false, features = [
38
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false, features = [
39
39
  "reqsign",
40
40
  ] }
41
- opendal-service-azure-common = { path = "../azure-common", version = "0.59.1" }
41
+ opendal-service-azure-common = { path = "../azure-common", version = "0.59.2" }
42
42
  quick-xml = { workspace = true, features = ["serialize", "overlapped-lists"] }
43
43
  reqsign-azure-storage = { version = "3.1.1", default-features = false }
44
44
  reqsign-core = { version = "3.2.0", default-features = false }
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -33,4 +33,4 @@ all-features = true
33
33
 
34
34
  [dependencies]
35
35
  http = { workspace = true }
36
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
36
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -32,11 +32,11 @@ version = { workspace = true }
32
32
  all-features = true
33
33
 
34
34
  [dependencies]
35
- asyncband = { workspace = true }
35
+ asyncband = { workspace = true, features = ["rwlock"] }
36
36
  bytes = { workspace = true }
37
37
  http = { workspace = true }
38
38
  log = { workspace = true }
39
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
39
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
40
40
  serde = { workspace = true, features = ["derive"] }
41
41
  serde_json = { workspace = true }
42
42
 
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -37,7 +37,7 @@ cacache = { version = "13.0", default-features = false, features = [
37
37
  "tokio-runtime",
38
38
  "mmap",
39
39
  ] }
40
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
40
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
41
41
  serde = { workspace = true, features = ["derive"] }
42
42
 
43
43
  [dev-dependencies]
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -34,6 +34,6 @@ all-features = true
34
34
  [dependencies]
35
35
  bytes = { workspace = true }
36
36
  http = { workspace = true }
37
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
37
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
38
38
  serde = { workspace = true, features = ["derive"] }
39
39
  serde_json = { workspace = true }
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -41,7 +41,7 @@ compio = { version = "0.19.0", features = [
41
41
  "runtime",
42
42
  "sync",
43
43
  ] }
44
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
44
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
45
45
  serde = { workspace = true, features = ["derive"] }
46
46
 
47
47
  [dev-dependencies]
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -64,21 +64,23 @@ pub(super) struct CompfsCore {
64
64
  }
65
65
 
66
66
  impl CompfsCore {
67
- /// Reject `..` traversal in a key so it cannot escape `root`, matching the
68
- /// `fs` backend (#7684). Confinement lives here because `normalize_path`
69
- /// deliberately leaves `.`/`..` unresolved (RFC 0112).
67
+ /// Reject `..` traversal and absolute keys so they cannot escape `root`,
68
+ /// matching the `fs` backend (#7684). Confinement lives here because
69
+ /// `normalize_path` deliberately leaves `.`/`..` unresolved (RFC 0112) and
70
+ /// `PathBuf::join` discards the base when the key is absolute.
70
71
  pub fn prepare_path(&self, path: &str) -> Result<PathBuf> {
71
72
  use std::path::Component;
72
73
  let trimmed = path.trim_end_matches('/');
73
- if Path::new(trimmed)
74
- .components()
75
- .any(|c| matches!(c, Component::ParentDir))
76
- {
77
- return Err(Error::new(
78
- ErrorKind::NotFound,
79
- "path escapes the configured root via `..`",
74
+ if Path::new(trimmed).components().any(|c| {
75
+ matches!(
76
+ c,
77
+ Component::ParentDir | Component::RootDir | Component::Prefix(_)
80
78
  )
81
- .with_context("path", path));
79
+ }) {
80
+ return Err(
81
+ Error::new(ErrorKind::NotFound, "path escapes the configured root")
82
+ .with_context("path", path),
83
+ );
82
84
  }
83
85
  Ok(self.root.join(trimmed))
84
86
  }
@@ -176,6 +178,20 @@ mod tests {
176
178
  }
177
179
  }
178
180
 
181
+ #[test]
182
+ fn test_prepare_path_rejects_absolute_path() {
183
+ let core = new_test_core();
184
+ // `PathBuf::join` drops the root when the key is absolute.
185
+ for key in ["/etc/passwd", "//etc/passwd"] {
186
+ let err = core.prepare_path(key).unwrap_err();
187
+ assert_eq!(
188
+ err.kind(),
189
+ ErrorKind::NotFound,
190
+ "key should be rejected: {key}"
191
+ );
192
+ }
193
+ }
194
+
179
195
  #[test]
180
196
  fn test_prepare_path_allows_normal_keys() {
181
197
  let core = new_test_core();
@@ -35,7 +35,7 @@ all-features = true
35
35
  bytes = { workspace = true }
36
36
  http = { workspace = true }
37
37
  log = { workspace = true }
38
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false, features = [
38
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false, features = [
39
39
  "reqsign",
40
40
  ] }
41
41
  quick-xml = { workspace = true, features = ["serialize", "overlapped-lists"] }
@@ -199,3 +199,19 @@
199
199
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
200
  See the License for the specific language governing permissions and
201
201
  limitations under the License.
202
+
203
+
204
+ ------------------------------------------------------------------------------------
205
+ This product bundles third-party components under other open source licenses.
206
+ This section summarizes those components and their licenses. See the referenced
207
+ license files for text of these licenses.
208
+
209
+
210
+ Creative Commons Zero v1.0 Universal
211
+ ------------------------------------
212
+
213
+ bindings/dotnet/.gitignore
214
+
215
+ The above file is derived from VisualStudio.gitignore in
216
+ https://github.com/github/gitignore. Its license text is in
217
+ bindings/dotnet/LICENSE-CC0-1.0.txt.
@@ -34,7 +34,7 @@ all-features = true
34
34
  [dependencies]
35
35
  bytes = { workspace = true }
36
36
  http = { workspace = true }
37
- opendal-core = { path = "../../core", version = "0.59.1", default-features = false }
37
+ opendal-core = { path = "../../core", version = "0.59.2", default-features = false }
38
38
  serde = { workspace = true, features = ["derive"] }
39
39
  serde_json = { workspace = true }
40
40