+4
CHANGELOG.md
+4
CHANGELOG.md
+549
-803
Cargo.lock
+549
-803
Cargo.lock
···
1
1
# This file is automatically @generated by Cargo.
2
2
# It is not intended for manual editing.
3
-
version = 4
3
+
version = 3
4
4
5
5
[[package]]
6
6
name = "addr2line"
7
-
version = "0.24.2"
7
+
version = "0.21.0"
8
8
source = "registry+https://github.com/rust-lang/crates.io-index"
9
-
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
9
+
checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
10
10
dependencies = [
11
11
"gimli",
12
12
]
13
13
14
14
[[package]]
15
-
name = "adler2"
16
-
version = "2.0.0"
15
+
name = "adler"
16
+
version = "1.0.2"
17
17
source = "registry+https://github.com/rust-lang/crates.io-index"
18
-
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
18
+
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
19
19
20
20
[[package]]
21
21
name = "aho-corasick"
···
28
28
29
29
[[package]]
30
30
name = "anstream"
31
-
version = "0.6.19"
31
+
version = "0.6.13"
32
32
source = "registry+https://github.com/rust-lang/crates.io-index"
33
-
checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933"
33
+
checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb"
34
34
dependencies = [
35
35
"anstyle",
36
36
"anstyle-parse",
37
37
"anstyle-query",
38
38
"anstyle-wincon",
39
39
"colorchoice",
40
-
"is_terminal_polyfill",
41
40
"utf8parse",
42
41
]
43
42
44
43
[[package]]
45
44
name = "anstyle"
46
-
version = "1.0.11"
45
+
version = "1.0.6"
47
46
source = "registry+https://github.com/rust-lang/crates.io-index"
48
-
checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd"
47
+
checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc"
49
48
50
49
[[package]]
51
50
name = "anstyle-parse"
52
-
version = "0.2.7"
51
+
version = "0.2.3"
53
52
source = "registry+https://github.com/rust-lang/crates.io-index"
54
-
checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
53
+
checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
55
54
dependencies = [
56
55
"utf8parse",
57
56
]
58
57
59
58
[[package]]
60
59
name = "anstyle-query"
61
-
version = "1.1.3"
60
+
version = "1.0.2"
62
61
source = "registry+https://github.com/rust-lang/crates.io-index"
63
-
checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9"
62
+
checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
64
63
dependencies = [
65
-
"windows-sys 0.59.0",
64
+
"windows-sys 0.52.0",
66
65
]
67
66
68
67
[[package]]
69
68
name = "anstyle-wincon"
70
-
version = "3.0.9"
69
+
version = "3.0.2"
71
70
source = "registry+https://github.com/rust-lang/crates.io-index"
72
-
checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882"
71
+
checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
73
72
dependencies = [
74
73
"anstyle",
75
-
"once_cell_polyfill",
76
-
"windows-sys 0.59.0",
74
+
"windows-sys 0.52.0",
77
75
]
78
76
79
77
[[package]]
80
78
name = "anyhow"
81
-
version = "1.0.98"
79
+
version = "1.0.81"
82
80
source = "registry+https://github.com/rust-lang/crates.io-index"
83
-
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
81
+
checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247"
84
82
85
83
[[package]]
86
84
name = "async-trait"
87
-
version = "0.1.88"
85
+
version = "0.1.78"
88
86
source = "registry+https://github.com/rust-lang/crates.io-index"
89
-
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
87
+
checksum = "461abc97219de0eaaf81fe3ef974a540158f3d079c2ab200f891f1a2ef201e85"
90
88
dependencies = [
91
89
"proc-macro2",
92
90
"quote",
···
95
93
96
94
[[package]]
97
95
name = "autocfg"
98
-
version = "1.4.0"
96
+
version = "1.1.0"
99
97
source = "registry+https://github.com/rust-lang/crates.io-index"
100
-
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
98
+
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
101
99
102
100
[[package]]
103
101
name = "backtrace"
104
-
version = "0.3.75"
102
+
version = "0.3.70"
105
103
source = "registry+https://github.com/rust-lang/crates.io-index"
106
-
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
104
+
checksum = "95d8e92cac0961e91dbd517496b00f7e9b92363dbe6d42c3198268323798860c"
107
105
dependencies = [
108
106
"addr2line",
107
+
"cc",
109
108
"cfg-if",
110
109
"libc",
111
110
"miniz_oxide",
112
111
"object",
113
112
"rustc-demangle",
114
-
"windows-targets",
115
113
]
116
114
117
115
[[package]]
···
121
119
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
122
120
123
121
[[package]]
124
-
name = "base64"
125
-
version = "0.22.1"
126
-
source = "registry+https://github.com/rust-lang/crates.io-index"
127
-
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
128
-
129
-
[[package]]
130
122
name = "bb8"
131
-
version = "0.8.6"
123
+
version = "0.8.3"
132
124
source = "registry+https://github.com/rust-lang/crates.io-index"
133
-
checksum = "d89aabfae550a5c44b43ab941844ffcd2e993cb6900b342debf59e9ea74acdb8"
125
+
checksum = "df7c2093d15d6a1d33b1f972e1c5ea3177748742b97a5f392aa83a65262c6780"
134
126
dependencies = [
135
127
"async-trait",
128
+
"futures-channel",
136
129
"futures-util",
137
130
"parking_lot",
138
131
"tokio",
···
146
139
147
140
[[package]]
148
141
name = "bitflags"
149
-
version = "2.9.1"
142
+
version = "1.3.2"
143
+
source = "registry+https://github.com/rust-lang/crates.io-index"
144
+
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
145
+
146
+
[[package]]
147
+
name = "bitflags"
148
+
version = "2.5.0"
150
149
source = "registry+https://github.com/rust-lang/crates.io-index"
151
-
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
150
+
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
152
151
153
152
[[package]]
154
153
name = "block-buffer"
···
161
160
162
161
[[package]]
163
162
name = "bumpalo"
164
-
version = "3.18.1"
163
+
version = "3.15.4"
165
164
source = "registry+https://github.com/rust-lang/crates.io-index"
166
-
checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee"
165
+
checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa"
167
166
168
167
[[package]]
169
168
name = "byteorder"
···
173
172
174
173
[[package]]
175
174
name = "bytes"
176
-
version = "1.10.1"
175
+
version = "1.5.0"
177
176
source = "registry+https://github.com/rust-lang/crates.io-index"
178
-
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
177
+
checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
179
178
180
179
[[package]]
181
180
name = "cc"
182
-
version = "1.2.26"
181
+
version = "1.0.90"
183
182
source = "registry+https://github.com/rust-lang/crates.io-index"
184
-
checksum = "956a5e21988b87f372569b66183b78babf23ebc2e744b733e4350a752c4dafac"
185
-
dependencies = [
186
-
"shlex",
187
-
]
183
+
checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5"
188
184
189
185
[[package]]
190
186
name = "cfg-if"
···
194
190
195
191
[[package]]
196
192
name = "clap"
197
-
version = "4.5.39"
193
+
version = "4.5.3"
198
194
source = "registry+https://github.com/rust-lang/crates.io-index"
199
-
checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f"
195
+
checksum = "949626d00e063efc93b6dca932419ceb5432f99769911c0b995f7e884c778813"
200
196
dependencies = [
201
197
"clap_builder",
202
198
]
203
199
204
200
[[package]]
205
201
name = "clap_builder"
206
-
version = "4.5.39"
202
+
version = "4.5.2"
207
203
source = "registry+https://github.com/rust-lang/crates.io-index"
208
-
checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51"
204
+
checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4"
209
205
dependencies = [
210
206
"anstream",
211
207
"anstyle",
···
215
211
216
212
[[package]]
217
213
name = "clap_lex"
218
-
version = "0.7.4"
214
+
version = "0.7.0"
219
215
source = "registry+https://github.com/rust-lang/crates.io-index"
220
-
checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
216
+
checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
221
217
222
218
[[package]]
223
219
name = "colorchoice"
224
-
version = "1.0.4"
220
+
version = "1.0.0"
225
221
source = "registry+https://github.com/rust-lang/crates.io-index"
226
-
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
222
+
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
227
223
228
224
[[package]]
229
225
name = "common"
···
236
232
"futures-util",
237
233
"log",
238
234
"native-tls",
235
+
"pbkdf2",
239
236
"postgres-native-tls",
240
237
"prometheus-client",
238
+
"rand",
241
239
"serde",
240
+
"sha2",
242
241
"time",
243
242
"tokio",
244
243
"tokio-postgres",
···
258
257
259
258
[[package]]
260
259
name = "core-foundation-sys"
261
-
version = "0.8.7"
260
+
version = "0.8.6"
262
261
source = "registry+https://github.com/rust-lang/crates.io-index"
263
-
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
262
+
checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
264
263
265
264
[[package]]
266
265
name = "cpufeatures"
267
-
version = "0.2.17"
266
+
version = "0.2.12"
268
267
source = "registry+https://github.com/rust-lang/crates.io-index"
269
-
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
268
+
checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
270
269
dependencies = [
271
270
"libc",
272
271
]
···
282
281
]
283
282
284
283
[[package]]
285
-
name = "darling"
286
-
version = "0.20.11"
287
-
source = "registry+https://github.com/rust-lang/crates.io-index"
288
-
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
289
-
dependencies = [
290
-
"darling_core",
291
-
"darling_macro",
292
-
]
293
-
294
-
[[package]]
295
-
name = "darling_core"
296
-
version = "0.20.11"
297
-
source = "registry+https://github.com/rust-lang/crates.io-index"
298
-
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
299
-
dependencies = [
300
-
"fnv",
301
-
"ident_case",
302
-
"proc-macro2",
303
-
"quote",
304
-
"strsim",
305
-
"syn",
306
-
]
307
-
308
-
[[package]]
309
-
name = "darling_macro"
310
-
version = "0.20.11"
311
-
source = "registry+https://github.com/rust-lang/crates.io-index"
312
-
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
313
-
dependencies = [
314
-
"darling_core",
315
-
"quote",
316
-
"syn",
317
-
]
318
-
319
-
[[package]]
320
284
name = "data-encoding"
321
-
version = "2.9.0"
285
+
version = "2.5.0"
322
286
source = "registry+https://github.com/rust-lang/crates.io-index"
323
-
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
287
+
checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
324
288
325
289
[[package]]
326
290
name = "deranged"
327
-
version = "0.4.0"
291
+
version = "0.3.11"
328
292
source = "registry+https://github.com/rust-lang/crates.io-index"
329
-
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
293
+
checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
330
294
dependencies = [
331
295
"powerfmt",
332
296
]
333
297
334
298
[[package]]
335
299
name = "diesel"
336
-
version = "2.2.10"
300
+
version = "2.1.5"
337
301
source = "registry+https://github.com/rust-lang/crates.io-index"
338
-
checksum = "ff3e1edb1f37b4953dd5176916347289ed43d7119cc2e6c7c3f7849ff44ea506"
302
+
checksum = "03fc05c17098f21b89bc7d98fe1dd3cce2c11c2ad8e145f2a44fe08ed28eb559"
339
303
dependencies = [
340
-
"bitflags",
304
+
"bitflags 2.5.0",
341
305
"byteorder",
342
306
"diesel_derives",
343
307
"itoa",
···
346
310
347
311
[[package]]
348
312
name = "diesel-async"
349
-
version = "0.5.2"
313
+
version = "0.4.1"
350
314
source = "registry+https://github.com/rust-lang/crates.io-index"
351
-
checksum = "51a307ac00f7c23f526a04a77761a0519b9f0eb2838ebf5b905a58580095bdcb"
315
+
checksum = "acada1517534c92d3f382217b485db8a8638f111b0e3f2a2a8e26165050f77be"
352
316
dependencies = [
353
317
"async-trait",
354
318
"bb8",
···
361
325
362
326
[[package]]
363
327
name = "diesel_derives"
364
-
version = "2.2.5"
328
+
version = "2.1.3"
365
329
source = "registry+https://github.com/rust-lang/crates.io-index"
366
-
checksum = "68d4216021b3ea446fd2047f5c8f8fe6e98af34508a254a01e4d6bc1e844f84d"
330
+
checksum = "5d02eecb814ae714ffe61ddc2db2dd03e6c49a42e269b5001355500d431cce0c"
367
331
dependencies = [
368
332
"diesel_table_macro_syntax",
369
-
"dsl_auto_type",
370
333
"proc-macro2",
371
334
"quote",
372
335
"syn",
···
374
337
375
338
[[package]]
376
339
name = "diesel_table_macro_syntax"
377
-
version = "0.2.0"
340
+
version = "0.1.0"
378
341
source = "registry+https://github.com/rust-lang/crates.io-index"
379
-
checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25"
342
+
checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5"
380
343
dependencies = [
381
344
"syn",
382
345
]
···
393
356
]
394
357
395
358
[[package]]
396
-
name = "displaydoc"
397
-
version = "0.2.5"
398
-
source = "registry+https://github.com/rust-lang/crates.io-index"
399
-
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
400
-
dependencies = [
401
-
"proc-macro2",
402
-
"quote",
403
-
"syn",
404
-
]
405
-
406
-
[[package]]
407
-
name = "dsl_auto_type"
408
-
version = "0.1.3"
409
-
source = "registry+https://github.com/rust-lang/crates.io-index"
410
-
checksum = "139ae9aca7527f85f26dd76483eb38533fd84bd571065da1739656ef71c5ff5b"
411
-
dependencies = [
412
-
"darling",
413
-
"either",
414
-
"heck",
415
-
"proc-macro2",
416
-
"quote",
417
-
"syn",
418
-
]
419
-
420
-
[[package]]
421
359
name = "dtoa"
422
-
version = "1.0.10"
360
+
version = "1.0.9"
423
361
source = "registry+https://github.com/rust-lang/crates.io-index"
424
-
checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04"
425
-
426
-
[[package]]
427
-
name = "either"
428
-
version = "1.15.0"
429
-
source = "registry+https://github.com/rust-lang/crates.io-index"
430
-
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
362
+
checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
431
363
432
364
[[package]]
433
365
name = "encoding_rs"
434
-
version = "0.8.35"
366
+
version = "0.8.33"
435
367
source = "registry+https://github.com/rust-lang/crates.io-index"
436
-
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
368
+
checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
437
369
dependencies = [
438
370
"cfg-if",
439
371
]
···
453
385
454
386
[[package]]
455
387
name = "equivalent"
456
-
version = "1.0.2"
388
+
version = "1.0.1"
457
389
source = "registry+https://github.com/rust-lang/crates.io-index"
458
-
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
390
+
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
459
391
460
392
[[package]]
461
393
name = "errno"
462
-
version = "0.3.12"
394
+
version = "0.3.8"
463
395
source = "registry+https://github.com/rust-lang/crates.io-index"
464
-
checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18"
396
+
checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
465
397
dependencies = [
466
398
"libc",
467
-
"windows-sys 0.59.0",
399
+
"windows-sys 0.52.0",
468
400
]
469
401
470
402
[[package]]
···
475
407
476
408
[[package]]
477
409
name = "fastrand"
478
-
version = "2.3.0"
410
+
version = "2.0.1"
479
411
source = "registry+https://github.com/rust-lang/crates.io-index"
480
-
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
412
+
checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
413
+
414
+
[[package]]
415
+
name = "finl_unicode"
416
+
version = "1.2.0"
417
+
source = "registry+https://github.com/rust-lang/crates.io-index"
418
+
checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6"
481
419
482
420
[[package]]
483
421
name = "fnv"
···
510
448
]
511
449
512
450
[[package]]
451
+
name = "futures"
452
+
version = "0.3.30"
453
+
source = "registry+https://github.com/rust-lang/crates.io-index"
454
+
checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
455
+
dependencies = [
456
+
"futures-channel",
457
+
"futures-core",
458
+
"futures-executor",
459
+
"futures-io",
460
+
"futures-sink",
461
+
"futures-task",
462
+
"futures-util",
463
+
]
464
+
465
+
[[package]]
513
466
name = "futures-channel"
514
-
version = "0.3.31"
467
+
version = "0.3.30"
515
468
source = "registry+https://github.com/rust-lang/crates.io-index"
516
-
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
469
+
checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
517
470
dependencies = [
518
471
"futures-core",
519
472
"futures-sink",
···
521
474
522
475
[[package]]
523
476
name = "futures-core"
524
-
version = "0.3.31"
477
+
version = "0.3.30"
478
+
source = "registry+https://github.com/rust-lang/crates.io-index"
479
+
checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
480
+
481
+
[[package]]
482
+
name = "futures-executor"
483
+
version = "0.3.30"
525
484
source = "registry+https://github.com/rust-lang/crates.io-index"
526
-
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
485
+
checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
486
+
dependencies = [
487
+
"futures-core",
488
+
"futures-task",
489
+
"futures-util",
490
+
]
491
+
492
+
[[package]]
493
+
name = "futures-io"
494
+
version = "0.3.30"
495
+
source = "registry+https://github.com/rust-lang/crates.io-index"
496
+
checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
527
497
528
498
[[package]]
529
499
name = "futures-macro"
530
-
version = "0.3.31"
500
+
version = "0.3.30"
531
501
source = "registry+https://github.com/rust-lang/crates.io-index"
532
-
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
502
+
checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
533
503
dependencies = [
534
504
"proc-macro2",
535
505
"quote",
···
538
508
539
509
[[package]]
540
510
name = "futures-sink"
541
-
version = "0.3.31"
511
+
version = "0.3.30"
542
512
source = "registry+https://github.com/rust-lang/crates.io-index"
543
-
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
513
+
checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
544
514
545
515
[[package]]
546
516
name = "futures-task"
547
-
version = "0.3.31"
517
+
version = "0.3.30"
548
518
source = "registry+https://github.com/rust-lang/crates.io-index"
549
-
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
519
+
checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
550
520
551
521
[[package]]
552
522
name = "futures-util"
553
-
version = "0.3.31"
523
+
version = "0.3.30"
554
524
source = "registry+https://github.com/rust-lang/crates.io-index"
555
-
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
525
+
checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
556
526
dependencies = [
527
+
"futures-channel",
557
528
"futures-core",
529
+
"futures-io",
558
530
"futures-macro",
559
531
"futures-sink",
560
532
"futures-task",
533
+
"memchr",
561
534
"pin-project-lite",
562
535
"pin-utils",
563
536
"slab",
···
575
548
576
549
[[package]]
577
550
name = "getrandom"
578
-
version = "0.2.16"
551
+
version = "0.2.12"
579
552
source = "registry+https://github.com/rust-lang/crates.io-index"
580
-
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
553
+
checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
581
554
dependencies = [
582
555
"cfg-if",
583
556
"libc",
584
-
"wasi 0.11.0+wasi-snapshot-preview1",
585
-
]
586
-
587
-
[[package]]
588
-
name = "getrandom"
589
-
version = "0.3.3"
590
-
source = "registry+https://github.com/rust-lang/crates.io-index"
591
-
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
592
-
dependencies = [
593
-
"cfg-if",
594
-
"libc",
595
-
"r-efi",
596
-
"wasi 0.14.2+wasi-0.2.4",
557
+
"wasi",
597
558
]
598
559
599
560
[[package]]
600
561
name = "gimli"
601
-
version = "0.31.1"
562
+
version = "0.28.1"
602
563
source = "registry+https://github.com/rust-lang/crates.io-index"
603
-
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
564
+
checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
604
565
605
566
[[package]]
606
567
name = "h2"
607
-
version = "0.3.26"
568
+
version = "0.3.25"
608
569
source = "registry+https://github.com/rust-lang/crates.io-index"
609
-
checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
570
+
checksum = "4fbd2820c5e49886948654ab546d0688ff24530286bdcf8fca3cefb16d4618eb"
610
571
dependencies = [
611
572
"bytes",
612
573
"fnv",
613
574
"futures-core",
614
575
"futures-sink",
615
576
"futures-util",
616
-
"http 0.2.12",
577
+
"http",
617
578
"indexmap",
618
579
"slab",
619
580
"tokio",
···
623
584
624
585
[[package]]
625
586
name = "hashbrown"
626
-
version = "0.15.4"
587
+
version = "0.14.3"
627
588
source = "registry+https://github.com/rust-lang/crates.io-index"
628
-
checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
589
+
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
629
590
630
591
[[package]]
631
592
name = "headers"
···
633
594
source = "registry+https://github.com/rust-lang/crates.io-index"
634
595
checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270"
635
596
dependencies = [
636
-
"base64 0.21.7",
597
+
"base64",
637
598
"bytes",
638
599
"headers-core",
639
-
"http 0.2.12",
600
+
"http",
640
601
"httpdate",
641
602
"mime",
642
603
"sha1",
···
648
609
source = "registry+https://github.com/rust-lang/crates.io-index"
649
610
checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
650
611
dependencies = [
651
-
"http 0.2.12",
612
+
"http",
652
613
]
653
614
654
615
[[package]]
655
-
name = "heck"
656
-
version = "0.5.0"
657
-
source = "registry+https://github.com/rust-lang/crates.io-index"
658
-
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
659
-
660
-
[[package]]
661
616
name = "hermit-abi"
662
-
version = "0.5.1"
617
+
version = "0.3.9"
663
618
source = "registry+https://github.com/rust-lang/crates.io-index"
664
-
checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08"
619
+
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
665
620
666
621
[[package]]
667
622
name = "hmac"
···
684
639
]
685
640
686
641
[[package]]
687
-
name = "http"
688
-
version = "1.3.1"
689
-
source = "registry+https://github.com/rust-lang/crates.io-index"
690
-
checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
691
-
dependencies = [
692
-
"bytes",
693
-
"fnv",
694
-
"itoa",
695
-
]
696
-
697
-
[[package]]
698
642
name = "http-body"
699
643
version = "0.4.6"
700
644
source = "registry+https://github.com/rust-lang/crates.io-index"
701
645
checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
702
646
dependencies = [
703
647
"bytes",
704
-
"http 0.2.12",
648
+
"http",
705
649
"pin-project-lite",
706
650
]
707
651
708
652
[[package]]
709
653
name = "httparse"
710
-
version = "1.10.1"
654
+
version = "1.8.0"
711
655
source = "registry+https://github.com/rust-lang/crates.io-index"
712
-
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
656
+
checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
713
657
714
658
[[package]]
715
659
name = "httpdate"
···
719
663
720
664
[[package]]
721
665
name = "humantime"
722
-
version = "2.2.0"
666
+
version = "2.1.0"
723
667
source = "registry+https://github.com/rust-lang/crates.io-index"
724
-
checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f"
668
+
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
725
669
726
670
[[package]]
727
671
name = "hyper"
728
-
version = "0.14.32"
672
+
version = "0.14.28"
729
673
source = "registry+https://github.com/rust-lang/crates.io-index"
730
-
checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7"
674
+
checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
731
675
dependencies = [
732
676
"bytes",
733
677
"futures-channel",
734
678
"futures-core",
735
679
"futures-util",
736
680
"h2",
737
-
"http 0.2.12",
681
+
"http",
738
682
"http-body",
739
683
"httparse",
740
684
"httpdate",
···
748
692
]
749
693
750
694
[[package]]
751
-
name = "icu_collections"
752
-
version = "2.0.0"
753
-
source = "registry+https://github.com/rust-lang/crates.io-index"
754
-
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
755
-
dependencies = [
756
-
"displaydoc",
757
-
"potential_utf",
758
-
"yoke",
759
-
"zerofrom",
760
-
"zerovec",
761
-
]
762
-
763
-
[[package]]
764
-
name = "icu_locale_core"
765
-
version = "2.0.0"
766
-
source = "registry+https://github.com/rust-lang/crates.io-index"
767
-
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
768
-
dependencies = [
769
-
"displaydoc",
770
-
"litemap",
771
-
"tinystr",
772
-
"writeable",
773
-
"zerovec",
774
-
]
775
-
776
-
[[package]]
777
-
name = "icu_normalizer"
778
-
version = "2.0.0"
779
-
source = "registry+https://github.com/rust-lang/crates.io-index"
780
-
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
781
-
dependencies = [
782
-
"displaydoc",
783
-
"icu_collections",
784
-
"icu_normalizer_data",
785
-
"icu_properties",
786
-
"icu_provider",
787
-
"smallvec",
788
-
"zerovec",
789
-
]
790
-
791
-
[[package]]
792
-
name = "icu_normalizer_data"
793
-
version = "2.0.0"
794
-
source = "registry+https://github.com/rust-lang/crates.io-index"
795
-
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
796
-
797
-
[[package]]
798
-
name = "icu_properties"
799
-
version = "2.0.1"
800
-
source = "registry+https://github.com/rust-lang/crates.io-index"
801
-
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
802
-
dependencies = [
803
-
"displaydoc",
804
-
"icu_collections",
805
-
"icu_locale_core",
806
-
"icu_properties_data",
807
-
"icu_provider",
808
-
"potential_utf",
809
-
"zerotrie",
810
-
"zerovec",
811
-
]
812
-
813
-
[[package]]
814
-
name = "icu_properties_data"
815
-
version = "2.0.1"
816
-
source = "registry+https://github.com/rust-lang/crates.io-index"
817
-
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
818
-
819
-
[[package]]
820
-
name = "icu_provider"
821
-
version = "2.0.0"
822
-
source = "registry+https://github.com/rust-lang/crates.io-index"
823
-
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
824
-
dependencies = [
825
-
"displaydoc",
826
-
"icu_locale_core",
827
-
"stable_deref_trait",
828
-
"tinystr",
829
-
"writeable",
830
-
"yoke",
831
-
"zerofrom",
832
-
"zerotrie",
833
-
"zerovec",
834
-
]
835
-
836
-
[[package]]
837
-
name = "ident_case"
838
-
version = "1.0.1"
839
-
source = "registry+https://github.com/rust-lang/crates.io-index"
840
-
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
841
-
842
-
[[package]]
843
695
name = "idna"
844
-
version = "1.0.3"
696
+
version = "0.5.0"
845
697
source = "registry+https://github.com/rust-lang/crates.io-index"
846
-
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
698
+
checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
847
699
dependencies = [
848
-
"idna_adapter",
849
-
"smallvec",
850
-
"utf8_iter",
851
-
]
852
-
853
-
[[package]]
854
-
name = "idna_adapter"
855
-
version = "1.2.1"
856
-
source = "registry+https://github.com/rust-lang/crates.io-index"
857
-
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
858
-
dependencies = [
859
-
"icu_normalizer",
860
-
"icu_properties",
700
+
"unicode-bidi",
701
+
"unicode-normalization",
861
702
]
862
703
863
704
[[package]]
864
705
name = "indexmap"
865
-
version = "2.9.0"
706
+
version = "2.2.5"
866
707
source = "registry+https://github.com/rust-lang/crates.io-index"
867
-
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
708
+
checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4"
868
709
dependencies = [
869
710
"equivalent",
870
711
"hashbrown",
···
872
713
873
714
[[package]]
874
715
name = "is-terminal"
875
-
version = "0.4.16"
716
+
version = "0.4.12"
876
717
source = "registry+https://github.com/rust-lang/crates.io-index"
877
-
checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9"
718
+
checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b"
878
719
dependencies = [
879
720
"hermit-abi",
880
721
"libc",
881
-
"windows-sys 0.59.0",
722
+
"windows-sys 0.52.0",
882
723
]
883
724
884
725
[[package]]
885
-
name = "is_terminal_polyfill"
886
-
version = "1.70.1"
887
-
source = "registry+https://github.com/rust-lang/crates.io-index"
888
-
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
889
-
890
-
[[package]]
891
726
name = "itoa"
892
-
version = "1.0.15"
727
+
version = "1.0.10"
893
728
source = "registry+https://github.com/rust-lang/crates.io-index"
894
-
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
729
+
checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
895
730
896
731
[[package]]
897
732
name = "js-sys"
898
-
version = "0.3.77"
733
+
version = "0.3.69"
899
734
source = "registry+https://github.com/rust-lang/crates.io-index"
900
-
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
735
+
checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
901
736
dependencies = [
902
-
"once_cell",
903
737
"wasm-bindgen",
904
738
]
905
739
906
740
[[package]]
907
-
name = "libc"
908
-
version = "0.2.172"
741
+
name = "lazy_static"
742
+
version = "1.4.0"
909
743
source = "registry+https://github.com/rust-lang/crates.io-index"
910
-
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
744
+
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
911
745
912
746
[[package]]
913
-
name = "linux-raw-sys"
914
-
version = "0.9.4"
747
+
name = "libc"
748
+
version = "0.2.153"
915
749
source = "registry+https://github.com/rust-lang/crates.io-index"
916
-
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
750
+
checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
917
751
918
752
[[package]]
919
-
name = "litemap"
920
-
version = "0.8.0"
753
+
name = "linux-raw-sys"
754
+
version = "0.4.13"
921
755
source = "registry+https://github.com/rust-lang/crates.io-index"
922
-
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
756
+
checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
923
757
924
758
[[package]]
925
759
name = "lock_api"
926
-
version = "0.4.13"
760
+
version = "0.4.11"
927
761
source = "registry+https://github.com/rust-lang/crates.io-index"
928
-
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
762
+
checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
929
763
dependencies = [
930
764
"autocfg",
931
765
"scopeguard",
···
933
767
934
768
[[package]]
935
769
name = "log"
936
-
version = "0.4.27"
770
+
version = "0.4.21"
937
771
source = "registry+https://github.com/rust-lang/crates.io-index"
938
-
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
772
+
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
939
773
940
774
[[package]]
941
775
name = "lumen"
···
947
781
"native-tls",
948
782
"pretty_env_logger",
949
783
"prometheus-client",
784
+
"rpassword",
950
785
"tokio",
951
786
"tokio-native-tls",
952
787
"warp",
···
964
799
965
800
[[package]]
966
801
name = "memchr"
967
-
version = "2.7.4"
802
+
version = "2.7.1"
968
803
source = "registry+https://github.com/rust-lang/crates.io-index"
969
-
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
804
+
checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
970
805
971
806
[[package]]
972
807
name = "mime"
···
976
811
977
812
[[package]]
978
813
name = "mime_guess"
979
-
version = "2.0.5"
814
+
version = "2.0.4"
980
815
source = "registry+https://github.com/rust-lang/crates.io-index"
981
-
checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
816
+
checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
982
817
dependencies = [
983
818
"mime",
984
819
"unicase",
···
986
821
987
822
[[package]]
988
823
name = "miniz_oxide"
989
-
version = "0.8.8"
824
+
version = "0.7.2"
990
825
source = "registry+https://github.com/rust-lang/crates.io-index"
991
-
checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a"
826
+
checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7"
992
827
dependencies = [
993
-
"adler2",
828
+
"adler",
994
829
]
995
830
996
831
[[package]]
997
832
name = "mio"
998
-
version = "1.0.4"
833
+
version = "0.8.11"
999
834
source = "registry+https://github.com/rust-lang/crates.io-index"
1000
-
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
835
+
checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
1001
836
dependencies = [
1002
837
"libc",
1003
-
"wasi 0.11.0+wasi-snapshot-preview1",
1004
-
"windows-sys 0.59.0",
838
+
"wasi",
839
+
"windows-sys 0.48.0",
1005
840
]
1006
841
1007
842
[[package]]
···
1013
848
"bytes",
1014
849
"encoding_rs",
1015
850
"futures-util",
1016
-
"http 0.2.12",
851
+
"http",
1017
852
"httparse",
1018
853
"log",
1019
854
"memchr",
···
1024
859
1025
860
[[package]]
1026
861
name = "native-tls"
1027
-
version = "0.2.14"
862
+
version = "0.2.11"
1028
863
source = "registry+https://github.com/rust-lang/crates.io-index"
1029
-
checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
864
+
checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
1030
865
dependencies = [
866
+
"lazy_static",
1031
867
"libc",
1032
868
"log",
1033
869
"openssl",
···
1046
882
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
1047
883
1048
884
[[package]]
1049
-
name = "object"
1050
-
version = "0.36.7"
885
+
name = "num_cpus"
886
+
version = "1.16.0"
1051
887
source = "registry+https://github.com/rust-lang/crates.io-index"
1052
-
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
888
+
checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
1053
889
dependencies = [
1054
-
"memchr",
890
+
"hermit-abi",
891
+
"libc",
1055
892
]
1056
893
1057
894
[[package]]
1058
-
name = "once_cell"
1059
-
version = "1.21.3"
895
+
name = "object"
896
+
version = "0.32.2"
1060
897
source = "registry+https://github.com/rust-lang/crates.io-index"
1061
-
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
898
+
checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
899
+
dependencies = [
900
+
"memchr",
901
+
]
1062
902
1063
903
[[package]]
1064
-
name = "once_cell_polyfill"
1065
-
version = "1.70.1"
904
+
name = "once_cell"
905
+
version = "1.19.0"
1066
906
source = "registry+https://github.com/rust-lang/crates.io-index"
1067
-
checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
907
+
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
1068
908
1069
909
[[package]]
1070
910
name = "openssl"
1071
-
version = "0.10.73"
911
+
version = "0.10.64"
1072
912
source = "registry+https://github.com/rust-lang/crates.io-index"
1073
-
checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8"
913
+
checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f"
1074
914
dependencies = [
1075
-
"bitflags",
915
+
"bitflags 2.5.0",
1076
916
"cfg-if",
1077
917
"foreign-types",
1078
918
"libc",
···
1094
934
1095
935
[[package]]
1096
936
name = "openssl-probe"
1097
-
version = "0.1.6"
937
+
version = "0.1.5"
1098
938
source = "registry+https://github.com/rust-lang/crates.io-index"
1099
-
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
939
+
checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
1100
940
1101
941
[[package]]
1102
942
name = "openssl-sys"
1103
-
version = "0.9.109"
943
+
version = "0.9.101"
1104
944
source = "registry+https://github.com/rust-lang/crates.io-index"
1105
-
checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571"
945
+
checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff"
1106
946
dependencies = [
1107
947
"cc",
1108
948
"libc",
···
1112
952
1113
953
[[package]]
1114
954
name = "parking_lot"
1115
-
version = "0.12.4"
955
+
version = "0.12.1"
1116
956
source = "registry+https://github.com/rust-lang/crates.io-index"
1117
-
checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
957
+
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
1118
958
dependencies = [
1119
959
"lock_api",
1120
960
"parking_lot_core",
···
1122
962
1123
963
[[package]]
1124
964
name = "parking_lot_core"
1125
-
version = "0.9.11"
965
+
version = "0.9.9"
1126
966
source = "registry+https://github.com/rust-lang/crates.io-index"
1127
-
checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
967
+
checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
1128
968
dependencies = [
1129
969
"cfg-if",
1130
970
"libc",
1131
971
"redox_syscall",
1132
972
"smallvec",
1133
-
"windows-targets",
973
+
"windows-targets 0.48.5",
974
+
]
975
+
976
+
[[package]]
977
+
name = "pbkdf2"
978
+
version = "0.12.2"
979
+
source = "registry+https://github.com/rust-lang/crates.io-index"
980
+
checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
981
+
dependencies = [
982
+
"digest",
983
+
"hmac",
1134
984
]
1135
985
1136
986
[[package]]
···
1141
991
1142
992
[[package]]
1143
993
name = "phf"
1144
-
version = "0.11.3"
994
+
version = "0.11.2"
1145
995
source = "registry+https://github.com/rust-lang/crates.io-index"
1146
-
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
996
+
checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
1147
997
dependencies = [
1148
998
"phf_shared",
1149
999
]
1150
1000
1151
1001
[[package]]
1152
1002
name = "phf_shared"
1153
-
version = "0.11.3"
1003
+
version = "0.11.2"
1154
1004
source = "registry+https://github.com/rust-lang/crates.io-index"
1155
-
checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
1005
+
checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
1156
1006
dependencies = [
1157
1007
"siphasher",
1158
1008
]
1159
1009
1160
1010
[[package]]
1161
1011
name = "pin-project"
1162
-
version = "1.1.10"
1012
+
version = "1.1.5"
1163
1013
source = "registry+https://github.com/rust-lang/crates.io-index"
1164
-
checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
1014
+
checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
1165
1015
dependencies = [
1166
1016
"pin-project-internal",
1167
1017
]
1168
1018
1169
1019
[[package]]
1170
1020
name = "pin-project-internal"
1171
-
version = "1.1.10"
1021
+
version = "1.1.5"
1172
1022
source = "registry+https://github.com/rust-lang/crates.io-index"
1173
-
checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
1023
+
checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
1174
1024
dependencies = [
1175
1025
"proc-macro2",
1176
1026
"quote",
···
1179
1029
1180
1030
[[package]]
1181
1031
name = "pin-project-lite"
1182
-
version = "0.2.16"
1032
+
version = "0.2.13"
1183
1033
source = "registry+https://github.com/rust-lang/crates.io-index"
1184
-
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
1034
+
checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
1185
1035
1186
1036
[[package]]
1187
1037
name = "pin-utils"
···
1191
1041
1192
1042
[[package]]
1193
1043
name = "pkg-config"
1194
-
version = "0.3.32"
1044
+
version = "0.3.30"
1195
1045
source = "registry+https://github.com/rust-lang/crates.io-index"
1196
-
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
1046
+
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
1197
1047
1198
1048
[[package]]
1199
1049
name = "postgres-native-tls"
1200
-
version = "0.5.1"
1050
+
version = "0.5.0"
1201
1051
source = "registry+https://github.com/rust-lang/crates.io-index"
1202
-
checksum = "a1f39498473c92f7b6820ae970382c1d83178a3454c618161cb772e8598d9f6f"
1052
+
checksum = "2d442770e2b1e244bb5eb03b31c79b65bb2568f413b899eaba850fa945a65954"
1203
1053
dependencies = [
1054
+
"futures",
1204
1055
"native-tls",
1205
1056
"tokio",
1206
1057
"tokio-native-tls",
···
1209
1060
1210
1061
[[package]]
1211
1062
name = "postgres-protocol"
1212
-
version = "0.6.8"
1063
+
version = "0.6.6"
1213
1064
source = "registry+https://github.com/rust-lang/crates.io-index"
1214
-
checksum = "76ff0abab4a9b844b93ef7b81f1efc0a366062aaef2cd702c76256b5dc075c54"
1065
+
checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520"
1215
1066
dependencies = [
1216
-
"base64 0.22.1",
1067
+
"base64",
1217
1068
"byteorder",
1218
1069
"bytes",
1219
1070
"fallible-iterator",
1220
1071
"hmac",
1221
1072
"md-5",
1222
1073
"memchr",
1223
-
"rand 0.9.1",
1074
+
"rand",
1224
1075
"sha2",
1225
1076
"stringprep",
1226
1077
]
1227
1078
1228
1079
[[package]]
1229
1080
name = "postgres-types"
1230
-
version = "0.2.9"
1081
+
version = "0.2.6"
1231
1082
source = "registry+https://github.com/rust-lang/crates.io-index"
1232
-
checksum = "613283563cd90e1dfc3518d548caee47e0e725455ed619881f5cf21f36de4b48"
1083
+
checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c"
1233
1084
dependencies = [
1234
1085
"bytes",
1235
1086
"fallible-iterator",
···
1237
1088
]
1238
1089
1239
1090
[[package]]
1240
-
name = "potential_utf"
1241
-
version = "0.1.2"
1242
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1243
-
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
1244
-
dependencies = [
1245
-
"zerovec",
1246
-
]
1247
-
1248
-
[[package]]
1249
1091
name = "powerfmt"
1250
1092
version = "0.2.0"
1251
1093
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1253
1095
1254
1096
[[package]]
1255
1097
name = "ppv-lite86"
1256
-
version = "0.2.21"
1098
+
version = "0.2.17"
1257
1099
source = "registry+https://github.com/rust-lang/crates.io-index"
1258
-
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
1259
-
dependencies = [
1260
-
"zerocopy",
1261
-
]
1100
+
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
1262
1101
1263
1102
[[package]]
1264
1103
name = "pretty_env_logger"
···
1272
1111
1273
1112
[[package]]
1274
1113
name = "proc-macro2"
1275
-
version = "1.0.95"
1114
+
version = "1.0.79"
1276
1115
source = "registry+https://github.com/rust-lang/crates.io-index"
1277
-
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
1116
+
checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
1278
1117
dependencies = [
1279
1118
"unicode-ident",
1280
1119
]
1281
1120
1282
1121
[[package]]
1283
1122
name = "prometheus-client"
1284
-
version = "0.22.3"
1123
+
version = "0.22.2"
1285
1124
source = "registry+https://github.com/rust-lang/crates.io-index"
1286
-
checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca"
1125
+
checksum = "c1ca959da22a332509f2a73ae9e5f23f9dcfc31fd3a54d71f159495bd5909baa"
1287
1126
dependencies = [
1288
1127
"dtoa",
1289
1128
"itoa",
···
1304
1143
1305
1144
[[package]]
1306
1145
name = "quote"
1307
-
version = "1.0.40"
1146
+
version = "1.0.35"
1308
1147
source = "registry+https://github.com/rust-lang/crates.io-index"
1309
-
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
1148
+
checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
1310
1149
dependencies = [
1311
1150
"proc-macro2",
1312
1151
]
1313
1152
1314
1153
[[package]]
1315
-
name = "r-efi"
1316
-
version = "5.2.0"
1317
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1318
-
checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
1319
-
1320
-
[[package]]
1321
1154
name = "rand"
1322
1155
version = "0.8.5"
1323
1156
source = "registry+https://github.com/rust-lang/crates.io-index"
1324
1157
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
1325
1158
dependencies = [
1326
1159
"libc",
1327
-
"rand_chacha 0.3.1",
1328
-
"rand_core 0.6.4",
1329
-
]
1330
-
1331
-
[[package]]
1332
-
name = "rand"
1333
-
version = "0.9.1"
1334
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1335
-
checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"
1336
-
dependencies = [
1337
-
"rand_chacha 0.9.0",
1338
-
"rand_core 0.9.3",
1160
+
"rand_chacha",
1161
+
"rand_core",
1339
1162
]
1340
1163
1341
1164
[[package]]
···
1345
1168
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
1346
1169
dependencies = [
1347
1170
"ppv-lite86",
1348
-
"rand_core 0.6.4",
1349
-
]
1350
-
1351
-
[[package]]
1352
-
name = "rand_chacha"
1353
-
version = "0.9.0"
1354
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1355
-
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
1356
-
dependencies = [
1357
-
"ppv-lite86",
1358
-
"rand_core 0.9.3",
1171
+
"rand_core",
1359
1172
]
1360
1173
1361
1174
[[package]]
···
1364
1177
source = "registry+https://github.com/rust-lang/crates.io-index"
1365
1178
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
1366
1179
dependencies = [
1367
-
"getrandom 0.2.16",
1368
-
]
1369
-
1370
-
[[package]]
1371
-
name = "rand_core"
1372
-
version = "0.9.3"
1373
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1374
-
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
1375
-
dependencies = [
1376
-
"getrandom 0.3.3",
1180
+
"getrandom",
1377
1181
]
1378
1182
1379
1183
[[package]]
1380
1184
name = "redox_syscall"
1381
-
version = "0.5.12"
1185
+
version = "0.4.1"
1382
1186
source = "registry+https://github.com/rust-lang/crates.io-index"
1383
-
checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af"
1187
+
checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
1384
1188
dependencies = [
1385
-
"bitflags",
1189
+
"bitflags 1.3.2",
1386
1190
]
1387
1191
1388
1192
[[package]]
1389
1193
name = "regex"
1390
-
version = "1.11.1"
1194
+
version = "1.10.3"
1391
1195
source = "registry+https://github.com/rust-lang/crates.io-index"
1392
-
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
1196
+
checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
1393
1197
dependencies = [
1394
1198
"aho-corasick",
1395
1199
"memchr",
···
1399
1203
1400
1204
[[package]]
1401
1205
name = "regex-automata"
1402
-
version = "0.4.9"
1206
+
version = "0.4.6"
1403
1207
source = "registry+https://github.com/rust-lang/crates.io-index"
1404
-
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
1208
+
checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea"
1405
1209
dependencies = [
1406
1210
"aho-corasick",
1407
1211
"memchr",
···
1410
1214
1411
1215
[[package]]
1412
1216
name = "regex-syntax"
1413
-
version = "0.8.5"
1217
+
version = "0.8.2"
1218
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1219
+
checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
1220
+
1221
+
[[package]]
1222
+
name = "rpassword"
1223
+
version = "7.3.1"
1224
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1225
+
checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f"
1226
+
dependencies = [
1227
+
"libc",
1228
+
"rtoolbox",
1229
+
"windows-sys 0.48.0",
1230
+
]
1231
+
1232
+
[[package]]
1233
+
name = "rtoolbox"
1234
+
version = "0.0.2"
1414
1235
source = "registry+https://github.com/rust-lang/crates.io-index"
1415
-
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
1236
+
checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e"
1237
+
dependencies = [
1238
+
"libc",
1239
+
"windows-sys 0.48.0",
1240
+
]
1416
1241
1417
1242
[[package]]
1418
1243
name = "rustc-demangle"
1419
-
version = "0.1.24"
1244
+
version = "0.1.23"
1420
1245
source = "registry+https://github.com/rust-lang/crates.io-index"
1421
-
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
1246
+
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
1422
1247
1423
1248
[[package]]
1424
1249
name = "rustix"
1425
-
version = "1.0.7"
1250
+
version = "0.38.32"
1426
1251
source = "registry+https://github.com/rust-lang/crates.io-index"
1427
-
checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266"
1252
+
checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89"
1428
1253
dependencies = [
1429
-
"bitflags",
1254
+
"bitflags 2.5.0",
1430
1255
"errno",
1431
1256
"libc",
1432
1257
"linux-raw-sys",
1433
-
"windows-sys 0.59.0",
1258
+
"windows-sys 0.52.0",
1259
+
]
1260
+
1261
+
[[package]]
1262
+
name = "rustls-pemfile"
1263
+
version = "1.0.4"
1264
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1265
+
checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
1266
+
dependencies = [
1267
+
"base64",
1434
1268
]
1435
1269
1436
1270
[[package]]
1437
1271
name = "ryu"
1438
-
version = "1.0.20"
1272
+
version = "1.0.17"
1439
1273
source = "registry+https://github.com/rust-lang/crates.io-index"
1440
-
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
1274
+
checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
1441
1275
1442
1276
[[package]]
1443
1277
name = "schannel"
1444
-
version = "0.1.27"
1278
+
version = "0.1.23"
1445
1279
source = "registry+https://github.com/rust-lang/crates.io-index"
1446
-
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
1280
+
checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
1447
1281
dependencies = [
1448
-
"windows-sys 0.59.0",
1282
+
"windows-sys 0.52.0",
1449
1283
]
1450
1284
1451
1285
[[package]]
1452
1286
name = "scoped-futures"
1453
-
version = "0.1.4"
1287
+
version = "0.1.3"
1454
1288
source = "registry+https://github.com/rust-lang/crates.io-index"
1455
-
checksum = "1b24aae2d0636530f359e9d5ef0c04669d11c5e756699b27a6a6d845d8329091"
1289
+
checksum = "b1473e24c637950c9bd38763220bea91ec3e095a89f672bbd7a10d03e77ba467"
1456
1290
dependencies = [
1457
-
"pin-project-lite",
1291
+
"cfg-if",
1292
+
"pin-utils",
1458
1293
]
1459
1294
1460
1295
[[package]]
···
1471
1306
1472
1307
[[package]]
1473
1308
name = "security-framework"
1474
-
version = "2.11.1"
1309
+
version = "2.9.2"
1475
1310
source = "registry+https://github.com/rust-lang/crates.io-index"
1476
-
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
1311
+
checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
1477
1312
dependencies = [
1478
-
"bitflags",
1313
+
"bitflags 1.3.2",
1479
1314
"core-foundation",
1480
1315
"core-foundation-sys",
1481
1316
"libc",
···
1484
1319
1485
1320
[[package]]
1486
1321
name = "security-framework-sys"
1487
-
version = "2.14.0"
1322
+
version = "2.9.1"
1488
1323
source = "registry+https://github.com/rust-lang/crates.io-index"
1489
-
checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
1324
+
checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
1490
1325
dependencies = [
1491
1326
"core-foundation-sys",
1492
1327
"libc",
···
1494
1329
1495
1330
[[package]]
1496
1331
name = "serde"
1497
-
version = "1.0.219"
1332
+
version = "1.0.197"
1498
1333
source = "registry+https://github.com/rust-lang/crates.io-index"
1499
-
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
1334
+
checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2"
1500
1335
dependencies = [
1501
1336
"serde_derive",
1502
1337
]
1503
1338
1504
1339
[[package]]
1505
1340
name = "serde_derive"
1506
-
version = "1.0.219"
1341
+
version = "1.0.197"
1507
1342
source = "registry+https://github.com/rust-lang/crates.io-index"
1508
-
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
1343
+
checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
1509
1344
dependencies = [
1510
1345
"proc-macro2",
1511
1346
"quote",
···
1514
1349
1515
1350
[[package]]
1516
1351
name = "serde_json"
1517
-
version = "1.0.140"
1352
+
version = "1.0.114"
1518
1353
source = "registry+https://github.com/rust-lang/crates.io-index"
1519
-
checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
1354
+
checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0"
1520
1355
dependencies = [
1521
1356
"itoa",
1522
-
"memchr",
1523
1357
"ryu",
1524
1358
"serde",
1525
1359
]
1526
1360
1527
1361
[[package]]
1528
1362
name = "serde_spanned"
1529
-
version = "0.6.9"
1363
+
version = "0.6.5"
1530
1364
source = "registry+https://github.com/rust-lang/crates.io-index"
1531
-
checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
1365
+
checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
1532
1366
dependencies = [
1533
1367
"serde",
1534
1368
]
···
1558
1392
1559
1393
[[package]]
1560
1394
name = "sha2"
1561
-
version = "0.10.9"
1395
+
version = "0.10.8"
1562
1396
source = "registry+https://github.com/rust-lang/crates.io-index"
1563
-
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
1397
+
checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
1564
1398
dependencies = [
1565
1399
"cfg-if",
1566
1400
"cpufeatures",
···
1568
1402
]
1569
1403
1570
1404
[[package]]
1571
-
name = "shlex"
1572
-
version = "1.3.0"
1573
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1574
-
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
1575
-
1576
-
[[package]]
1577
1405
name = "signal-hook-registry"
1578
-
version = "1.4.5"
1406
+
version = "1.4.1"
1579
1407
source = "registry+https://github.com/rust-lang/crates.io-index"
1580
-
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
1408
+
checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
1581
1409
dependencies = [
1582
1410
"libc",
1583
1411
]
1584
1412
1585
1413
[[package]]
1586
1414
name = "siphasher"
1587
-
version = "1.0.1"
1415
+
version = "0.3.11"
1588
1416
source = "registry+https://github.com/rust-lang/crates.io-index"
1589
-
checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
1417
+
checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
1590
1418
1591
1419
[[package]]
1592
1420
name = "slab"
···
1599
1427
1600
1428
[[package]]
1601
1429
name = "smallvec"
1602
-
version = "1.15.1"
1430
+
version = "1.13.2"
1603
1431
source = "registry+https://github.com/rust-lang/crates.io-index"
1604
-
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
1432
+
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
1605
1433
1606
1434
[[package]]
1607
1435
name = "socket2"
1608
-
version = "0.5.10"
1436
+
version = "0.5.6"
1609
1437
source = "registry+https://github.com/rust-lang/crates.io-index"
1610
-
checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
1438
+
checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871"
1611
1439
dependencies = [
1612
1440
"libc",
1613
1441
"windows-sys 0.52.0",
···
1620
1448
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
1621
1449
1622
1450
[[package]]
1623
-
name = "stable_deref_trait"
1624
-
version = "1.2.0"
1625
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1626
-
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
1627
-
1628
-
[[package]]
1629
1451
name = "stringprep"
1630
-
version = "0.1.5"
1452
+
version = "0.1.4"
1631
1453
source = "registry+https://github.com/rust-lang/crates.io-index"
1632
-
checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1"
1454
+
checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6"
1633
1455
dependencies = [
1456
+
"finl_unicode",
1634
1457
"unicode-bidi",
1635
1458
"unicode-normalization",
1636
-
"unicode-properties",
1637
1459
]
1638
1460
1639
1461
[[package]]
1640
1462
name = "strsim"
1641
-
version = "0.11.1"
1463
+
version = "0.11.0"
1642
1464
source = "registry+https://github.com/rust-lang/crates.io-index"
1643
-
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
1465
+
checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01"
1644
1466
1645
1467
[[package]]
1646
1468
name = "subtle"
1647
-
version = "2.6.1"
1469
+
version = "2.5.0"
1648
1470
source = "registry+https://github.com/rust-lang/crates.io-index"
1649
-
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
1471
+
checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
1650
1472
1651
1473
[[package]]
1652
1474
name = "syn"
1653
-
version = "2.0.101"
1475
+
version = "2.0.53"
1654
1476
source = "registry+https://github.com/rust-lang/crates.io-index"
1655
-
checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
1477
+
checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032"
1656
1478
dependencies = [
1657
1479
"proc-macro2",
1658
1480
"quote",
···
1660
1482
]
1661
1483
1662
1484
[[package]]
1663
-
name = "synstructure"
1664
-
version = "0.13.2"
1665
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1666
-
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
1667
-
dependencies = [
1668
-
"proc-macro2",
1669
-
"quote",
1670
-
"syn",
1671
-
]
1672
-
1673
-
[[package]]
1674
1485
name = "tempfile"
1675
-
version = "3.20.0"
1486
+
version = "3.10.1"
1676
1487
source = "registry+https://github.com/rust-lang/crates.io-index"
1677
-
checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
1488
+
checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
1678
1489
dependencies = [
1490
+
"cfg-if",
1679
1491
"fastrand",
1680
-
"getrandom 0.3.3",
1681
-
"once_cell",
1682
1492
"rustix",
1683
-
"windows-sys 0.59.0",
1493
+
"windows-sys 0.52.0",
1684
1494
]
1685
1495
1686
1496
[[package]]
···
1694
1504
1695
1505
[[package]]
1696
1506
name = "thiserror"
1697
-
version = "1.0.69"
1507
+
version = "1.0.58"
1698
1508
source = "registry+https://github.com/rust-lang/crates.io-index"
1699
-
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
1509
+
checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
1700
1510
dependencies = [
1701
1511
"thiserror-impl",
1702
1512
]
1703
1513
1704
1514
[[package]]
1705
1515
name = "thiserror-impl"
1706
-
version = "1.0.69"
1516
+
version = "1.0.58"
1707
1517
source = "registry+https://github.com/rust-lang/crates.io-index"
1708
-
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
1518
+
checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
1709
1519
dependencies = [
1710
1520
"proc-macro2",
1711
1521
"quote",
···
1714
1524
1715
1525
[[package]]
1716
1526
name = "time"
1717
-
version = "0.3.41"
1527
+
version = "0.3.34"
1718
1528
source = "registry+https://github.com/rust-lang/crates.io-index"
1719
-
checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
1529
+
checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749"
1720
1530
dependencies = [
1721
1531
"deranged",
1722
1532
"num-conv",
···
1728
1538
1729
1539
[[package]]
1730
1540
name = "time-core"
1731
-
version = "0.1.4"
1541
+
version = "0.1.2"
1732
1542
source = "registry+https://github.com/rust-lang/crates.io-index"
1733
-
checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
1543
+
checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
1734
1544
1735
1545
[[package]]
1736
1546
name = "time-macros"
1737
-
version = "0.2.22"
1547
+
version = "0.2.17"
1738
1548
source = "registry+https://github.com/rust-lang/crates.io-index"
1739
-
checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
1549
+
checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774"
1740
1550
dependencies = [
1741
1551
"num-conv",
1742
1552
"time-core",
1743
1553
]
1744
1554
1745
1555
[[package]]
1746
-
name = "tinystr"
1747
-
version = "0.8.1"
1748
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1749
-
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
1750
-
dependencies = [
1751
-
"displaydoc",
1752
-
"zerovec",
1753
-
]
1754
-
1755
-
[[package]]
1756
1556
name = "tinyvec"
1757
-
version = "1.9.0"
1557
+
version = "1.6.0"
1758
1558
source = "registry+https://github.com/rust-lang/crates.io-index"
1759
-
checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
1559
+
checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
1760
1560
dependencies = [
1761
1561
"tinyvec_macros",
1762
1562
]
···
1769
1569
1770
1570
[[package]]
1771
1571
name = "tokio"
1772
-
version = "1.45.1"
1572
+
version = "1.36.0"
1773
1573
source = "registry+https://github.com/rust-lang/crates.io-index"
1774
-
checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779"
1574
+
checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931"
1775
1575
dependencies = [
1776
1576
"backtrace",
1777
1577
"bytes",
1778
1578
"libc",
1779
1579
"mio",
1580
+
"num_cpus",
1780
1581
"parking_lot",
1781
1582
"pin-project-lite",
1782
1583
"signal-hook-registry",
1783
1584
"socket2",
1784
1585
"tokio-macros",
1785
-
"windows-sys 0.52.0",
1586
+
"windows-sys 0.48.0",
1786
1587
]
1787
1588
1788
1589
[[package]]
1789
1590
name = "tokio-macros"
1790
-
version = "2.5.0"
1591
+
version = "2.2.0"
1791
1592
source = "registry+https://github.com/rust-lang/crates.io-index"
1792
-
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
1593
+
checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
1793
1594
dependencies = [
1794
1595
"proc-macro2",
1795
1596
"quote",
···
1808
1609
1809
1610
[[package]]
1810
1611
name = "tokio-postgres"
1811
-
version = "0.7.13"
1612
+
version = "0.7.10"
1812
1613
source = "registry+https://github.com/rust-lang/crates.io-index"
1813
-
checksum = "6c95d533c83082bb6490e0189acaa0bbeef9084e60471b696ca6988cd0541fb0"
1614
+
checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8"
1814
1615
dependencies = [
1815
1616
"async-trait",
1816
1617
"byteorder",
···
1825
1626
"pin-project-lite",
1826
1627
"postgres-protocol",
1827
1628
"postgres-types",
1828
-
"rand 0.9.1",
1629
+
"rand",
1829
1630
"socket2",
1830
1631
"tokio",
1831
1632
"tokio-util",
1832
1633
"whoami",
1634
+
]
1635
+
1636
+
[[package]]
1637
+
name = "tokio-stream"
1638
+
version = "0.1.15"
1639
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1640
+
checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af"
1641
+
dependencies = [
1642
+
"futures-core",
1643
+
"pin-project-lite",
1644
+
"tokio",
1833
1645
]
1834
1646
1835
1647
[[package]]
1836
1648
name = "tokio-tungstenite"
1837
-
version = "0.21.0"
1649
+
version = "0.20.1"
1838
1650
source = "registry+https://github.com/rust-lang/crates.io-index"
1839
-
checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38"
1651
+
checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c"
1840
1652
dependencies = [
1841
1653
"futures-util",
1842
1654
"log",
···
1846
1658
1847
1659
[[package]]
1848
1660
name = "tokio-util"
1849
-
version = "0.7.15"
1661
+
version = "0.7.10"
1850
1662
source = "registry+https://github.com/rust-lang/crates.io-index"
1851
-
checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
1663
+
checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
1852
1664
dependencies = [
1853
1665
"bytes",
1854
1666
"futures-core",
1855
1667
"futures-sink",
1856
1668
"pin-project-lite",
1857
1669
"tokio",
1670
+
"tracing",
1858
1671
]
1859
1672
1860
1673
[[package]]
1861
1674
name = "toml"
1862
-
version = "0.8.23"
1675
+
version = "0.8.12"
1863
1676
source = "registry+https://github.com/rust-lang/crates.io-index"
1864
-
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
1677
+
checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3"
1865
1678
dependencies = [
1866
1679
"serde",
1867
1680
"serde_spanned",
···
1871
1684
1872
1685
[[package]]
1873
1686
name = "toml_datetime"
1874
-
version = "0.6.11"
1687
+
version = "0.6.5"
1875
1688
source = "registry+https://github.com/rust-lang/crates.io-index"
1876
-
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
1689
+
checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
1877
1690
dependencies = [
1878
1691
"serde",
1879
1692
]
1880
1693
1881
1694
[[package]]
1882
1695
name = "toml_edit"
1883
-
version = "0.22.27"
1696
+
version = "0.22.9"
1884
1697
source = "registry+https://github.com/rust-lang/crates.io-index"
1885
-
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
1698
+
checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4"
1886
1699
dependencies = [
1887
1700
"indexmap",
1888
1701
"serde",
1889
1702
"serde_spanned",
1890
1703
"toml_datetime",
1891
-
"toml_write",
1892
1704
"winnow",
1893
1705
]
1894
1706
1895
1707
[[package]]
1896
-
name = "toml_write"
1897
-
version = "0.1.2"
1898
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1899
-
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
1900
-
1901
-
[[package]]
1902
1708
name = "tower-service"
1903
-
version = "0.3.3"
1709
+
version = "0.3.2"
1904
1710
source = "registry+https://github.com/rust-lang/crates.io-index"
1905
-
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
1711
+
checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
1906
1712
1907
1713
[[package]]
1908
1714
name = "tracing"
1909
-
version = "0.1.41"
1715
+
version = "0.1.40"
1910
1716
source = "registry+https://github.com/rust-lang/crates.io-index"
1911
-
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
1717
+
checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
1912
1718
dependencies = [
1913
1719
"log",
1914
1720
"pin-project-lite",
···
1917
1723
1918
1724
[[package]]
1919
1725
name = "tracing-core"
1920
-
version = "0.1.34"
1726
+
version = "0.1.32"
1921
1727
source = "registry+https://github.com/rust-lang/crates.io-index"
1922
-
checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
1728
+
checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
1923
1729
dependencies = [
1924
1730
"once_cell",
1925
1731
]
···
1932
1738
1933
1739
[[package]]
1934
1740
name = "tungstenite"
1935
-
version = "0.21.0"
1741
+
version = "0.20.1"
1936
1742
source = "registry+https://github.com/rust-lang/crates.io-index"
1937
-
checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1"
1743
+
checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9"
1938
1744
dependencies = [
1939
1745
"byteorder",
1940
1746
"bytes",
1941
1747
"data-encoding",
1942
-
"http 1.3.1",
1748
+
"http",
1943
1749
"httparse",
1944
1750
"log",
1945
-
"rand 0.8.5",
1751
+
"rand",
1946
1752
"sha1",
1947
1753
"thiserror",
1948
1754
"url",
···
1951
1757
1952
1758
[[package]]
1953
1759
name = "typenum"
1954
-
version = "1.18.0"
1760
+
version = "1.17.0"
1955
1761
source = "registry+https://github.com/rust-lang/crates.io-index"
1956
-
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
1762
+
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
1957
1763
1958
1764
[[package]]
1959
1765
name = "unicase"
1960
-
version = "2.8.1"
1766
+
version = "2.7.0"
1961
1767
source = "registry+https://github.com/rust-lang/crates.io-index"
1962
-
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
1768
+
checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
1769
+
dependencies = [
1770
+
"version_check",
1771
+
]
1963
1772
1964
1773
[[package]]
1965
1774
name = "unicode-bidi"
1966
-
version = "0.3.18"
1775
+
version = "0.3.15"
1967
1776
source = "registry+https://github.com/rust-lang/crates.io-index"
1968
-
checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
1777
+
checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
1969
1778
1970
1779
[[package]]
1971
1780
name = "unicode-ident"
1972
-
version = "1.0.18"
1781
+
version = "1.0.12"
1973
1782
source = "registry+https://github.com/rust-lang/crates.io-index"
1974
-
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
1783
+
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
1975
1784
1976
1785
[[package]]
1977
1786
name = "unicode-normalization"
1978
-
version = "0.1.24"
1787
+
version = "0.1.23"
1979
1788
source = "registry+https://github.com/rust-lang/crates.io-index"
1980
-
checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"
1789
+
checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
1981
1790
dependencies = [
1982
1791
"tinyvec",
1983
1792
]
1984
1793
1985
1794
[[package]]
1986
-
name = "unicode-properties"
1987
-
version = "0.1.3"
1988
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1989
-
checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
1990
-
1991
-
[[package]]
1992
1795
name = "url"
1993
-
version = "2.5.4"
1796
+
version = "2.5.0"
1994
1797
source = "registry+https://github.com/rust-lang/crates.io-index"
1995
-
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
1798
+
checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
1996
1799
dependencies = [
1997
1800
"form_urlencoded",
1998
1801
"idna",
···
2006
1809
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
2007
1810
2008
1811
[[package]]
2009
-
name = "utf8_iter"
2010
-
version = "1.0.4"
2011
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2012
-
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
2013
-
2014
-
[[package]]
2015
1812
name = "utf8parse"
2016
-
version = "0.2.2"
1813
+
version = "0.2.1"
2017
1814
source = "registry+https://github.com/rust-lang/crates.io-index"
2018
-
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
1815
+
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
2019
1816
2020
1817
[[package]]
2021
1818
name = "vcpkg"
···
2025
1822
2026
1823
[[package]]
2027
1824
name = "version_check"
2028
-
version = "0.9.5"
1825
+
version = "0.9.4"
2029
1826
source = "registry+https://github.com/rust-lang/crates.io-index"
2030
-
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
1827
+
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
2031
1828
2032
1829
[[package]]
2033
1830
name = "want"
···
2040
1837
2041
1838
[[package]]
2042
1839
name = "warp"
2043
-
version = "0.3.7"
1840
+
version = "0.3.6"
2044
1841
source = "registry+https://github.com/rust-lang/crates.io-index"
2045
-
checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c"
1842
+
checksum = "c1e92e22e03ff1230c03a1a8ee37d2f89cd489e2e541b7550d6afad96faed169"
2046
1843
dependencies = [
2047
1844
"bytes",
2048
1845
"futures-channel",
2049
1846
"futures-util",
2050
1847
"headers",
2051
-
"http 0.2.12",
1848
+
"http",
2052
1849
"hyper",
2053
1850
"log",
2054
1851
"mime",
···
2056
1853
"multer",
2057
1854
"percent-encoding",
2058
1855
"pin-project",
1856
+
"rustls-pemfile",
2059
1857
"scoped-tls",
2060
1858
"serde",
2061
1859
"serde_json",
2062
1860
"serde_urlencoded",
2063
1861
"tokio",
1862
+
"tokio-stream",
2064
1863
"tokio-tungstenite",
2065
1864
"tokio-util",
2066
1865
"tower-service",
···
2074
1873
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
2075
1874
2076
1875
[[package]]
2077
-
name = "wasi"
2078
-
version = "0.14.2+wasi-0.2.4"
2079
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2080
-
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
2081
-
dependencies = [
2082
-
"wit-bindgen-rt",
2083
-
]
2084
-
2085
-
[[package]]
2086
1876
name = "wasite"
2087
1877
version = "0.1.0"
2088
1878
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2090
1880
2091
1881
[[package]]
2092
1882
name = "wasm-bindgen"
2093
-
version = "0.2.100"
1883
+
version = "0.2.92"
2094
1884
source = "registry+https://github.com/rust-lang/crates.io-index"
2095
-
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
1885
+
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
2096
1886
dependencies = [
2097
1887
"cfg-if",
2098
-
"once_cell",
2099
1888
"wasm-bindgen-macro",
2100
1889
]
2101
1890
2102
1891
[[package]]
2103
1892
name = "wasm-bindgen-backend"
2104
-
version = "0.2.100"
1893
+
version = "0.2.92"
2105
1894
source = "registry+https://github.com/rust-lang/crates.io-index"
2106
-
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
1895
+
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
2107
1896
dependencies = [
2108
1897
"bumpalo",
2109
1898
"log",
1899
+
"once_cell",
2110
1900
"proc-macro2",
2111
1901
"quote",
2112
1902
"syn",
···
2115
1905
2116
1906
[[package]]
2117
1907
name = "wasm-bindgen-macro"
2118
-
version = "0.2.100"
1908
+
version = "0.2.92"
2119
1909
source = "registry+https://github.com/rust-lang/crates.io-index"
2120
-
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
1910
+
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
2121
1911
dependencies = [
2122
1912
"quote",
2123
1913
"wasm-bindgen-macro-support",
···
2125
1915
2126
1916
[[package]]
2127
1917
name = "wasm-bindgen-macro-support"
2128
-
version = "0.2.100"
1918
+
version = "0.2.92"
2129
1919
source = "registry+https://github.com/rust-lang/crates.io-index"
2130
-
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
1920
+
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
2131
1921
dependencies = [
2132
1922
"proc-macro2",
2133
1923
"quote",
···
2138
1928
2139
1929
[[package]]
2140
1930
name = "wasm-bindgen-shared"
2141
-
version = "0.2.100"
1931
+
version = "0.2.92"
2142
1932
source = "registry+https://github.com/rust-lang/crates.io-index"
2143
-
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
2144
-
dependencies = [
2145
-
"unicode-ident",
2146
-
]
1933
+
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
2147
1934
2148
1935
[[package]]
2149
1936
name = "web-sys"
2150
-
version = "0.3.77"
1937
+
version = "0.3.69"
2151
1938
source = "registry+https://github.com/rust-lang/crates.io-index"
2152
-
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
1939
+
checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef"
2153
1940
dependencies = [
2154
1941
"js-sys",
2155
1942
"wasm-bindgen",
···
2157
1944
2158
1945
[[package]]
2159
1946
name = "whoami"
2160
-
version = "1.6.0"
1947
+
version = "1.5.1"
2161
1948
source = "registry+https://github.com/rust-lang/crates.io-index"
2162
-
checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7"
1949
+
checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9"
2163
1950
dependencies = [
2164
1951
"redox_syscall",
2165
1952
"wasite",
···
2167
1954
]
2168
1955
2169
1956
[[package]]
2170
-
name = "winapi-util"
2171
-
version = "0.1.9"
2172
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2173
-
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
2174
-
dependencies = [
2175
-
"windows-sys 0.59.0",
2176
-
]
2177
-
2178
-
[[package]]
2179
-
name = "windows-sys"
2180
-
version = "0.52.0"
1957
+
name = "winapi"
1958
+
version = "0.3.9"
2181
1959
source = "registry+https://github.com/rust-lang/crates.io-index"
2182
-
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
1960
+
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
2183
1961
dependencies = [
2184
-
"windows-targets",
1962
+
"winapi-i686-pc-windows-gnu",
1963
+
"winapi-x86_64-pc-windows-gnu",
2185
1964
]
2186
1965
2187
1966
[[package]]
2188
-
name = "windows-sys"
2189
-
version = "0.59.0"
1967
+
name = "winapi-i686-pc-windows-gnu"
1968
+
version = "0.4.0"
2190
1969
source = "registry+https://github.com/rust-lang/crates.io-index"
2191
-
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
2192
-
dependencies = [
2193
-
"windows-targets",
2194
-
]
1970
+
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
2195
1971
2196
1972
[[package]]
2197
-
name = "windows-targets"
2198
-
version = "0.52.6"
1973
+
name = "winapi-util"
1974
+
version = "0.1.6"
2199
1975
source = "registry+https://github.com/rust-lang/crates.io-index"
2200
-
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
1976
+
checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
2201
1977
dependencies = [
2202
-
"windows_aarch64_gnullvm",
2203
-
"windows_aarch64_msvc",
2204
-
"windows_i686_gnu",
2205
-
"windows_i686_gnullvm",
2206
-
"windows_i686_msvc",
2207
-
"windows_x86_64_gnu",
2208
-
"windows_x86_64_gnullvm",
2209
-
"windows_x86_64_msvc",
1978
+
"winapi",
2210
1979
]
2211
1980
2212
1981
[[package]]
2213
-
name = "windows_aarch64_gnullvm"
2214
-
version = "0.52.6"
1982
+
name = "winapi-x86_64-pc-windows-gnu"
1983
+
version = "0.4.0"
2215
1984
source = "registry+https://github.com/rust-lang/crates.io-index"
2216
-
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
1985
+
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
2217
1986
2218
1987
[[package]]
2219
-
name = "windows_aarch64_msvc"
2220
-
version = "0.52.6"
1988
+
name = "windows-sys"
1989
+
version = "0.48.0"
2221
1990
source = "registry+https://github.com/rust-lang/crates.io-index"
2222
-
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
1991
+
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
1992
+
dependencies = [
1993
+
"windows-targets 0.48.5",
1994
+
]
2223
1995
2224
1996
[[package]]
2225
-
name = "windows_i686_gnu"
2226
-
version = "0.52.6"
1997
+
name = "windows-sys"
1998
+
version = "0.52.0"
2227
1999
source = "registry+https://github.com/rust-lang/crates.io-index"
2228
-
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
2000
+
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
2001
+
dependencies = [
2002
+
"windows-targets 0.52.4",
2003
+
]
2229
2004
2230
2005
[[package]]
2231
-
name = "windows_i686_gnullvm"
2232
-
version = "0.52.6"
2006
+
name = "windows-targets"
2007
+
version = "0.48.5"
2233
2008
source = "registry+https://github.com/rust-lang/crates.io-index"
2234
-
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
2009
+
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
2010
+
dependencies = [
2011
+
"windows_aarch64_gnullvm 0.48.5",
2012
+
"windows_aarch64_msvc 0.48.5",
2013
+
"windows_i686_gnu 0.48.5",
2014
+
"windows_i686_msvc 0.48.5",
2015
+
"windows_x86_64_gnu 0.48.5",
2016
+
"windows_x86_64_gnullvm 0.48.5",
2017
+
"windows_x86_64_msvc 0.48.5",
2018
+
]
2235
2019
2236
2020
[[package]]
2237
-
name = "windows_i686_msvc"
2238
-
version = "0.52.6"
2021
+
name = "windows-targets"
2022
+
version = "0.52.4"
2239
2023
source = "registry+https://github.com/rust-lang/crates.io-index"
2240
-
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
2024
+
checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b"
2025
+
dependencies = [
2026
+
"windows_aarch64_gnullvm 0.52.4",
2027
+
"windows_aarch64_msvc 0.52.4",
2028
+
"windows_i686_gnu 0.52.4",
2029
+
"windows_i686_msvc 0.52.4",
2030
+
"windows_x86_64_gnu 0.52.4",
2031
+
"windows_x86_64_gnullvm 0.52.4",
2032
+
"windows_x86_64_msvc 0.52.4",
2033
+
]
2241
2034
2242
2035
[[package]]
2243
-
name = "windows_x86_64_gnu"
2244
-
version = "0.52.6"
2036
+
name = "windows_aarch64_gnullvm"
2037
+
version = "0.48.5"
2245
2038
source = "registry+https://github.com/rust-lang/crates.io-index"
2246
-
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
2039
+
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
2247
2040
2248
2041
[[package]]
2249
-
name = "windows_x86_64_gnullvm"
2250
-
version = "0.52.6"
2042
+
name = "windows_aarch64_gnullvm"
2043
+
version = "0.52.4"
2251
2044
source = "registry+https://github.com/rust-lang/crates.io-index"
2252
-
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
2045
+
checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9"
2253
2046
2254
2047
[[package]]
2255
-
name = "windows_x86_64_msvc"
2256
-
version = "0.52.6"
2048
+
name = "windows_aarch64_msvc"
2049
+
version = "0.48.5"
2257
2050
source = "registry+https://github.com/rust-lang/crates.io-index"
2258
-
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
2051
+
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
2259
2052
2260
2053
[[package]]
2261
-
name = "winnow"
2262
-
version = "0.7.10"
2054
+
name = "windows_aarch64_msvc"
2055
+
version = "0.52.4"
2263
2056
source = "registry+https://github.com/rust-lang/crates.io-index"
2264
-
checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec"
2265
-
dependencies = [
2266
-
"memchr",
2267
-
]
2057
+
checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675"
2268
2058
2269
2059
[[package]]
2270
-
name = "wit-bindgen-rt"
2271
-
version = "0.39.0"
2060
+
name = "windows_i686_gnu"
2061
+
version = "0.48.5"
2272
2062
source = "registry+https://github.com/rust-lang/crates.io-index"
2273
-
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
2274
-
dependencies = [
2275
-
"bitflags",
2276
-
]
2063
+
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
2277
2064
2278
2065
[[package]]
2279
-
name = "writeable"
2280
-
version = "0.6.1"
2066
+
name = "windows_i686_gnu"
2067
+
version = "0.52.4"
2281
2068
source = "registry+https://github.com/rust-lang/crates.io-index"
2282
-
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
2069
+
checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3"
2283
2070
2284
2071
[[package]]
2285
-
name = "yoke"
2286
-
version = "0.8.0"
2072
+
name = "windows_i686_msvc"
2073
+
version = "0.48.5"
2287
2074
source = "registry+https://github.com/rust-lang/crates.io-index"
2288
-
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
2289
-
dependencies = [
2290
-
"serde",
2291
-
"stable_deref_trait",
2292
-
"yoke-derive",
2293
-
"zerofrom",
2294
-
]
2075
+
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
2295
2076
2296
2077
[[package]]
2297
-
name = "yoke-derive"
2298
-
version = "0.8.0"
2078
+
name = "windows_i686_msvc"
2079
+
version = "0.52.4"
2299
2080
source = "registry+https://github.com/rust-lang/crates.io-index"
2300
-
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
2301
-
dependencies = [
2302
-
"proc-macro2",
2303
-
"quote",
2304
-
"syn",
2305
-
"synstructure",
2306
-
]
2081
+
checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02"
2307
2082
2308
2083
[[package]]
2309
-
name = "zerocopy"
2310
-
version = "0.8.25"
2084
+
name = "windows_x86_64_gnu"
2085
+
version = "0.48.5"
2311
2086
source = "registry+https://github.com/rust-lang/crates.io-index"
2312
-
checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb"
2313
-
dependencies = [
2314
-
"zerocopy-derive",
2315
-
]
2087
+
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
2316
2088
2317
2089
[[package]]
2318
-
name = "zerocopy-derive"
2319
-
version = "0.8.25"
2090
+
name = "windows_x86_64_gnu"
2091
+
version = "0.52.4"
2320
2092
source = "registry+https://github.com/rust-lang/crates.io-index"
2321
-
checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef"
2322
-
dependencies = [
2323
-
"proc-macro2",
2324
-
"quote",
2325
-
"syn",
2326
-
]
2093
+
checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03"
2327
2094
2328
2095
[[package]]
2329
-
name = "zerofrom"
2330
-
version = "0.1.6"
2096
+
name = "windows_x86_64_gnullvm"
2097
+
version = "0.48.5"
2331
2098
source = "registry+https://github.com/rust-lang/crates.io-index"
2332
-
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
2333
-
dependencies = [
2334
-
"zerofrom-derive",
2335
-
]
2099
+
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
2336
2100
2337
2101
[[package]]
2338
-
name = "zerofrom-derive"
2339
-
version = "0.1.6"
2102
+
name = "windows_x86_64_gnullvm"
2103
+
version = "0.52.4"
2340
2104
source = "registry+https://github.com/rust-lang/crates.io-index"
2341
-
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
2342
-
dependencies = [
2343
-
"proc-macro2",
2344
-
"quote",
2345
-
"syn",
2346
-
"synstructure",
2347
-
]
2105
+
checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177"
2348
2106
2349
2107
[[package]]
2350
-
name = "zerotrie"
2351
-
version = "0.2.2"
2108
+
name = "windows_x86_64_msvc"
2109
+
version = "0.48.5"
2352
2110
source = "registry+https://github.com/rust-lang/crates.io-index"
2353
-
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
2354
-
dependencies = [
2355
-
"displaydoc",
2356
-
"yoke",
2357
-
"zerofrom",
2358
-
]
2111
+
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
2359
2112
2360
2113
[[package]]
2361
-
name = "zerovec"
2362
-
version = "0.11.2"
2114
+
name = "windows_x86_64_msvc"
2115
+
version = "0.52.4"
2363
2116
source = "registry+https://github.com/rust-lang/crates.io-index"
2364
-
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
2365
-
dependencies = [
2366
-
"yoke",
2367
-
"zerofrom",
2368
-
"zerovec-derive",
2369
-
]
2117
+
checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"
2370
2118
2371
2119
[[package]]
2372
-
name = "zerovec-derive"
2373
-
version = "0.11.1"
2120
+
name = "winnow"
2121
+
version = "0.6.5"
2374
2122
source = "registry+https://github.com/rust-lang/crates.io-index"
2375
-
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
2123
+
checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8"
2376
2124
dependencies = [
2377
-
"proc-macro2",
2378
-
"quote",
2379
-
"syn",
2125
+
"memchr",
2380
2126
]
+6
-5
Dockerfile
+6
-5
Dockerfile
···
1
-
FROM rust:1.87.0-slim-bookworm
1
+
FROM rust:1.74.1-slim-buster
2
2
ARG DEBIAN_FRONTEND=noninteractive
3
3
RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests ca-certificates pkg-config libssl-dev libpq-dev
4
4
ENV CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse
5
5
6
6
RUN --mount=type=cache,target=$CARGO_HOME/registry \
7
-
cargo install diesel_cli --version 2.2.10 --no-default-features --features postgres
7
+
cargo install diesel_cli --version 2.1.1 --no-default-features --features postgres
8
8
9
9
COPY common /lumen/common
10
10
COPY lumen /lumen/lumen
11
11
COPY Cargo.toml /lumen/
12
12
RUN --mount=type=cache,target=$CARGO_HOME/registry,target=/lumen/target \
13
-
cd /lumen && cargo build --release && cp /lumen/target/release/lumen /root/
13
+
cd /lumen && cargo build --release && cp /lumen/target/release/lumen /root/
14
14
15
-
FROM debian:bookworm-slim
15
+
FROM debian:buster-slim
16
16
ARG DEBIAN_FRONTEND=noninteractive
17
17
RUN apt-get update && apt-get install -y --no-install-recommends --no-install-suggests openssl libpq5 && \
18
-
sed -i -e 's,\[ v3_req \],\[ v3_req \]\nextendedKeyUsage = serverAuth,' /etc/ssl/openssl.cnf
18
+
sed -i -e 's,\[ v3_req \],\[ v3_req \]\nextendedKeyUsage = serverAuth,' /etc/ssl/openssl.cnf
19
19
RUN mkdir /usr/lib/lumen/
20
20
21
21
COPY --from=0 /usr/local/cargo/bin/diesel /usr/bin/diesel
···
26
26
COPY config-example.toml docker-init.sh /lumen/
27
27
RUN chmod a+x /lumen/docker-init.sh && chmod a+x /usr/bin/lumen
28
28
WORKDIR /lumen
29
+
STOPSIGNAL SIGINT
29
30
CMD /lumen/docker-init.sh
+15
-26
common/Cargo.toml
+15
-26
common/Cargo.toml
···
7
7
publish = false
8
8
9
9
[dependencies]
10
-
tokio = { version = "1.39", features = ["full"], optional = true }
11
-
log = { version = "0.4", features = ["release_max_level_debug"] }
12
-
serde = { version = "1.0", features = ["derive"] }
13
-
postgres-native-tls = { version = "0.5", optional = true }
14
-
native-tls = { version = "0.2", optional = true }
10
+
tokio = {version = "1.32", features = ["full"], optional = true}
11
+
log = {version = "0.4", features = ["release_max_level_debug"]}
12
+
serde = {version = "1.0", features = ["derive"]}
13
+
postgres-native-tls = {version = "0.5", optional = true}
14
+
native-tls = {version = "0.2", optional = true}
15
15
futures-util = "0.3"
16
16
toml = "0.8"
17
-
warp = { version = "0.3", optional = true }
17
+
warp = {version = "0.3", optional = true}
18
18
binascii = "0.1"
19
19
20
-
tokio-postgres = { version = "0.7", default-features = false, optional = true }
21
-
diesel = { version = "2.2", optional = true, default-features = false, features = [
22
-
"postgres_backend",
23
-
"time",
24
-
] }
25
-
time = { version = "0.3.36", optional = true }
26
-
diesel-async = { version = "0.5", optional = true, features = [
27
-
"postgres",
28
-
"bb8",
29
-
] }
20
+
tokio-postgres = {version = "0.7", default-features = false, optional = true}
21
+
diesel = {version = "2.1", optional = true, default-features = false, features = ["postgres_backend", "time"]}
22
+
time = {version = "0.3.31", optional = true}
23
+
diesel-async = {version = "0.4.1", optional = true, features = ["postgres", "bb8"]}
30
24
anyhow = "1.0"
31
-
prometheus-client = "0.22"
25
+
prometheus-client = "0.22.0"
26
+
pbkdf2 = { version = "0.12.2" }
27
+
sha2 = "0.10.8"
28
+
rand = "0.8.5"
32
29
33
30
[features]
34
31
default = ["web", "db"]
35
32
web = ["warp"]
36
-
db = [
37
-
"tokio",
38
-
"postgres-native-tls",
39
-
"native-tls",
40
-
"diesel",
41
-
"diesel-async",
42
-
"tokio-postgres",
43
-
"time",
44
-
]
33
+
db = ["tokio", "postgres-native-tls", "native-tls", "diesel", "diesel-async", "tokio-postgres", "time"]
+21
common/migrations/2024-01-20-215809_users/down.sql
+21
common/migrations/2024-01-20-215809_users/down.sql
···
1
+
-- don't allow table to be modified until we're done...
2
+
LOCK TABLE users;
3
+
4
+
-- delete funcs that belong to users
5
+
DELETE FROM funcs USING dbs, users
6
+
WHERE dbs.id=funcs.db_id
7
+
AND users.id=dbs.user_id
8
+
AND users.cred_id IS NOT NULL;
9
+
10
+
-- delete dbs that belong to users
11
+
DELETE FROM dbs USING users WHERE dbs.user_id=users.id AND users.cred_id IS NOT NULL;
12
+
13
+
-- delete all users with creds...
14
+
DELETE FROM users WHERE cred_id is NOT NULL;
15
+
DROP TABLE creds CASCADE;
16
+
17
+
CREATE UNIQUE INDEX IF NOT EXISTS user_rec ON users(lic_id,lic_data,hostname);
18
+
CREATE UNIQUE INDEX IF NOT EXISTS user_hn_null ON users (lic_id,lic_data, (hostname IS NULL)) WHERE hostname is NULL;
19
+
DROP INDEX user_cred_idx;
20
+
21
+
ALTER TABLE users DROP COLUMN cred_id;
+22
common/migrations/2024-01-20-215809_users/up.sql
+22
common/migrations/2024-01-20-215809_users/up.sql
···
1
+
CREATE TABLE creds (
2
+
id SERIAL PRIMARY KEY,
3
+
4
+
username VARCHAR(256) UNIQUE NOT NULL,
5
+
email VARCHAR(256) UNIQUE NOT NULL,
6
+
7
+
passwd_salt bytea,
8
+
passwd_iters INTEGER NOT NULL DEFAULT 10000,
9
+
passwd_hash bytea,
10
+
11
+
last_active TIMESTAMPTZ,
12
+
creation_dt TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL,
13
+
14
+
is_admin BOOLEAN NOT NULL DEFAULT FALSE,
15
+
is_enabled BOOLEAN NOT NULL DEFAULT TRUE
16
+
);
17
+
18
+
ALTER TABLE users ADD COLUMN cred_id INTEGER REFERENCES creds(id) ON DELETE CASCADE;
19
+
20
+
CREATE UNIQUE INDEX user_cred_idx ON users(lic_id,lic_data,hostname,cred_id) NULLS NOT DISTINCT;
21
+
DROP INDEX user_hn_null;
22
+
DROP INDEX user_rec;
+36
-3
common/src/config.rs
+36
-3
common/src/config.rs
···
1
1
use serde::Deserialize;
2
+
use std::num::NonZeroU32;
2
3
use std::time::Duration;
3
4
use std::{net::SocketAddr, path::PathBuf};
4
5
use toml::from_str;
···
9
10
}
10
11
11
12
#[derive(Deserialize)]
13
+
#[serde(default)]
12
14
pub struct LuminaServer {
13
15
pub bind_addr: SocketAddr,
14
-
pub use_tls: Option<bool>,
16
+
pub use_tls: bool,
15
17
pub tls: Option<TlsIdentity>,
16
18
pub server_name: Option<String>,
17
-
pub allow_deletes: Option<bool>,
19
+
pub allow_deletes: bool,
18
20
19
21
/// limit of function histories to return per function.
20
22
/// `None`, or `Some(0)` will disable the feature on the server.
21
-
pub get_history_limit: Option<u32>,
23
+
pub get_history_limit: NonZeroU32,
24
+
}
25
+
impl Default for LuminaServer {
26
+
fn default() -> Self {
27
+
Self {
28
+
bind_addr: "0.0.0.0:1234".parse().unwrap(),
29
+
use_tls: false,
30
+
tls: None,
31
+
server_name: None,
32
+
allow_deletes: false,
33
+
get_history_limit: NonZeroU32::new(50).unwrap(),
34
+
}
35
+
}
22
36
}
23
37
24
38
#[derive(Deserialize)]
···
63
77
}
64
78
65
79
#[derive(Deserialize)]
80
+
#[serde(default)]
81
+
pub struct Users {
82
+
/// Sets if guests are allowed to login. required for IDA<8.1
83
+
pub allow_guests: bool,
84
+
85
+
/// PBKDF2 iterations for newly set passwords.
86
+
pub pbkdf2_iterations: NonZeroU32,
87
+
}
88
+
89
+
impl Default for Users {
90
+
fn default() -> Self {
91
+
Self { allow_guests: true, pbkdf2_iterations: NonZeroU32::new(120_000).unwrap() }
92
+
}
93
+
}
94
+
95
+
#[derive(Deserialize)]
66
96
pub struct Config {
67
97
pub lumina: LuminaServer,
68
98
pub api_server: Option<WebServer>,
···
70
100
71
101
#[serde(default)]
72
102
pub limits: Limits,
103
+
104
+
#[serde(default)]
105
+
pub users: Users,
73
106
}
74
107
75
108
pub trait HasConfig {
+131
-17
common/src/db/mod.rs
+131
-17
common/src/db/mod.rs
···
1
-
use crate::async_drop::{AsyncDropGuard, AsyncDropper};
1
+
use crate::{
2
+
async_drop::{AsyncDropGuard, AsyncDropper},
3
+
db::schema::Creds,
4
+
};
2
5
use log::*;
3
6
use postgres_native_tls::MakeTlsConnector;
4
7
use serde::Serialize;
···
12
15
query_builder::{Query, QueryFragment},
13
16
sql_types::{Array, Binary, Integer, VarChar},
14
17
upsert::excluded,
15
-
ExpressionMethods, NullableExpressionMethods, QueryDsl,
18
+
ExpressionMethods, NullableExpressionMethods, QueryDsl, SelectableHelper,
16
19
};
17
20
use diesel_async::{pooled_connection::ManagerConfig, RunQueryDsl};
21
+
22
+
use self::schema::creds;
18
23
19
24
pub type DynConfig = dyn crate::config::HasConfig + Send + Sync;
20
25
···
135
140
}
136
141
137
142
pub async fn get_funcs(
138
-
&self, funcs: &[crate::rpc::PullMetadataFunc<'_>],
143
+
&self, funcs: &[crate::rpc::PatternId<'_>],
139
144
) -> Result<Vec<Option<FunctionInfo>>, anyhow::Error> {
140
-
let chksums: Vec<&[u8]> = funcs.iter().map(|v| v.mb_hash).collect();
145
+
let chksums: Vec<&[u8]> = funcs.iter().map(|v| v.data).collect();
141
146
142
147
let rows: Vec<(String, i32, Vec<u8>, Vec<u8>)> = {
143
148
let conn = &mut self.diesel.get().await?;
···
169
174
}
170
175
171
176
pub async fn get_or_create_user<'a>(
172
-
&self, user: &'a crate::rpc::RpcHello<'a>, hostname: &str,
177
+
&self, user: &'a crate::rpc::RpcHello<'a>, cred_id: Option<i32>, hostname: &str,
173
178
) -> Result<i32, anyhow::Error> {
174
179
use schema::users;
175
180
···
179
184
let lic_data = user.license_data;
180
185
181
186
let get_user = || {
182
-
users::table
187
+
let query = users::table
188
+
.into_boxed()
183
189
.select(users::id)
184
190
.filter(users::lic_data.eq(lic_data))
185
191
.filter(users::lic_id.eq(lic_id))
186
-
.filter(users::hostname.eq(hostname))
192
+
.filter(users::hostname.eq(hostname));
193
+
194
+
if let Some(cred_id) = cred_id {
195
+
query.filter(users::cred_id.eq(cred_id))
196
+
} else {
197
+
query.filter(users::cred_id.is_null())
198
+
}
187
199
};
188
200
189
201
match get_user().get_result::<i32>(conn).await {
···
197
209
users::lic_id.eq(lic_id),
198
210
users::lic_data.eq(lic_data),
199
211
users::hostname.eq(hostname),
212
+
users::cred_id.eq(cred_id),
200
213
)])
201
214
.returning(users::id) // xmax = 0 if the row is new
202
215
.get_result::<i32>(conn)
···
218
231
) -> Result<i32, anyhow::Error> {
219
232
use schema::files::{chksum, id, table as files};
220
233
221
-
let hash = &funcs.md5[..];
234
+
let hash = &funcs.input_md5[..];
222
235
223
236
let conn = &mut self.diesel.get().await?;
224
237
···
247
260
}
248
261
249
262
async fn get_or_create_db<'a>(
250
-
&self, user: &'a crate::rpc::RpcHello<'a>, funcs: &'a crate::rpc::PushMetadata<'a>,
263
+
&self, user: &'a crate::rpc::RpcHello<'a>, cred_id: Option<i32>,
264
+
funcs: &'a crate::rpc::PushMetadata<'a>,
251
265
) -> Result<i32, anyhow::Error> {
252
266
use schema::dbs::{
253
267
file_id as db_file_id, file_path, id as db_id, idb_path, table as dbs,
···
255
269
};
256
270
257
271
let file_id = self.get_or_create_file(funcs);
258
-
let user_id = self.get_or_create_user(user, funcs.hostname);
272
+
let user_id = self.get_or_create_user(user, cred_id, funcs.hostname);
259
273
260
274
let (file_id, user_id): (i32, i32) = futures_util::try_join!(file_id, user_id)?;
261
275
···
265
279
dbs.select(db_id)
266
280
.filter(db_user.eq(user_id))
267
281
.filter(db_file_id.eq(file_id))
268
-
.filter(file_path.eq(funcs.file_path))
282
+
.filter(file_path.eq(funcs.input_path))
269
283
.filter(idb_path.eq(funcs.idb_path))
270
284
};
271
285
···
279
293
.values(vec![(
280
294
db_user.eq(user_id),
281
295
db_file_id.eq(file_id),
282
-
file_path.eq(funcs.file_path),
296
+
file_path.eq(funcs.input_path),
283
297
idb_path.eq(funcs.idb_path),
284
298
)])
285
299
.returning(db_id)
···
297
311
}
298
312
299
313
pub async fn push_funcs<'a, 'b>(
300
-
&'b self, user: &'a crate::rpc::RpcHello<'a>, funcs: &'a crate::rpc::PushMetadata<'a>,
301
-
scores: &[u32],
314
+
&'b self, user: &'a crate::rpc::RpcHello<'a>, cred_id: Option<i32>,
315
+
funcs: &'a crate::rpc::PushMetadata<'a>, scores: &[u32],
302
316
) -> Result<Vec<bool>, anyhow::Error> {
303
317
use futures_util::TryStreamExt;
304
318
305
319
// postgres has a limitation of binding per statement (i16::MAX). Split large push requests into smaller chunks.
306
320
const PUSH_FUNC_CHUNK_SIZE: usize = 3000;
307
321
308
-
let db_id = self.get_or_create_db(user, funcs).await?;
322
+
let db_id = self.get_or_create_db(user, cred_id, funcs).await?;
309
323
310
324
let mut rows = Vec::with_capacity(funcs.funcs.len().min(PUSH_FUNC_CHUNK_SIZE));
311
325
let mut is_new = Vec::with_capacity(funcs.funcs.len());
···
315
329
for (idx, (func, &score)) in funcs.funcs.iter().zip(scores.iter()).enumerate() {
316
330
let name = func.name;
317
331
let len = func.func_len as i32;
318
-
let chksum = func.hash;
332
+
let chksum = func.pattern_id.data;
319
333
let md = func.func_data;
320
334
let score = score as i32;
321
335
···
418
432
) -> Result<(), anyhow::Error> {
419
433
use schema::funcs::{chksum, table as funcs};
420
434
421
-
let chksums = req.funcs.iter().map(|v| v.as_slice()).collect::<Vec<_>>();
435
+
let chksums = req.calcrel_hashes.iter().map(|v| v.as_slice()).collect::<Vec<_>>();
422
436
423
437
let conn = &mut self.diesel.get().await?;
424
438
let rows_modified =
···
445
459
.get_results::<(time::OffsetDateTime, String, Vec<u8>)>(conn)
446
460
.await?;
447
461
Ok(rows)
462
+
}
463
+
464
+
pub async fn get_users(&self) -> Result<Vec<(i32, String, String, bool, bool)>, anyhow::Error> {
465
+
let db = &mut self.diesel.get().await?;
466
+
467
+
creds::table
468
+
.select((
469
+
creds::id,
470
+
creds::username,
471
+
creds::email,
472
+
creds::is_admin,
473
+
creds::passwd_hash.is_not_null(),
474
+
))
475
+
.get_results::<(i32, String, String, bool, bool)>(db)
476
+
.await
477
+
.map_err(|v| v.into())
478
+
}
479
+
480
+
pub async fn delete_user(&self, username: &str) -> Result<(), anyhow::Error> {
481
+
let db = &mut self.diesel.get().await?;
482
+
483
+
let changes =
484
+
diesel::delete(creds::table.filter(creds::username.eq(username))).execute(db).await?;
485
+
if changes != 1 {
486
+
return Err(anyhow::anyhow!("expected a single row deletion, got {changes}"));
487
+
}
488
+
Ok(())
489
+
}
490
+
491
+
pub async fn set_password(
492
+
&self, username: &str, password: String, iters: u32,
493
+
) -> Result<(), anyhow::Error> {
494
+
let (salt, hash) =
495
+
tokio::task::spawn_blocking(move || Creds::generate_creds(&password, iters)).await?;
496
+
497
+
let db = &mut self.diesel.get().await?;
498
+
let rows = diesel::update(creds::table)
499
+
.filter(creds::username.eq(username))
500
+
.set((
501
+
creds::passwd_iters.eq(iters as i32),
502
+
creds::passwd_salt.eq(&salt[..]),
503
+
creds::passwd_hash.eq(&hash[..]),
504
+
))
505
+
.execute(db)
506
+
.await?;
507
+
if rows != 1 {
508
+
return Err(anyhow::anyhow!("updated {rows} rows, expected to update 1"));
509
+
}
510
+
Ok(())
511
+
}
512
+
513
+
pub async fn add_user(
514
+
&self, username: &str, email: &str, is_admin: bool,
515
+
) -> Result<u32, anyhow::Error> {
516
+
let db = &mut self.diesel.get().await?;
517
+
518
+
diesel::insert_into(creds::table)
519
+
.values(&Creds {
520
+
username: username.into(),
521
+
email: email.into(),
522
+
passwd_salt: None,
523
+
passwd_iters: 10_000,
524
+
passwd_hash: None,
525
+
last_active: None,
526
+
is_enabled: true,
527
+
is_admin,
528
+
})
529
+
.returning(creds::id)
530
+
.get_result::<i32>(db)
531
+
.await
532
+
.map_err(|v| v.into())
533
+
.map(|v| v as u32)
534
+
}
535
+
536
+
pub async fn get_user_by_username(
537
+
&self, username: &str,
538
+
) -> Result<(i32, Creds), anyhow::Error> {
539
+
let db = &mut self.diesel.get().await?;
540
+
541
+
Ok(creds::table
542
+
.select((creds::id, Creds::as_select()))
543
+
.filter(creds::username.eq(username))
544
+
.get_result::<(i32, Creds)>(db)
545
+
.await?)
546
+
}
547
+
548
+
pub async fn get_user_by_id(&self, id: i32) -> Result<Creds, anyhow::Error> {
549
+
let db = &mut self.diesel.get().await?;
550
+
551
+
Ok(creds::table.select(Creds::as_select()).filter(creds::id.eq(id)).get_result(db).await?)
552
+
}
553
+
554
+
pub async fn update_last_active(&self, user_id: i32) -> Result<(), anyhow::Error> {
555
+
let mut db = self.diesel.get().await?;
556
+
diesel::update(schema::creds::table)
557
+
.filter(schema::creds::id.eq(user_id))
558
+
.set((schema::creds::last_active.eq(time::OffsetDateTime::now_utc()),))
559
+
.execute(&mut db)
560
+
.await?;
561
+
Ok(())
448
562
}
449
563
}
450
564
+78
common/src/db/schema.rs
+78
common/src/db/schema.rs
···
1
+
use std::borrow::Cow;
2
+
3
+
use diesel::{Insertable, Queryable, Selectable};
4
+
use log::error;
5
+
use pbkdf2::{hmac::Hmac, pbkdf2};
6
+
use sha2::Sha256;
7
+
1
8
pub use super::schema_auto::*;
2
9
3
10
diesel::table! {
···
15
22
}
16
23
17
24
diesel::joinable!(func_ranks -> dbs (id));
25
+
26
+
#[derive(Insertable, Queryable, Selectable, Default)]
27
+
#[diesel(table_name = creds)]
28
+
pub struct Creds<'a> {
29
+
pub username: Cow<'a, str>,
30
+
pub email: Cow<'a, str>,
31
+
32
+
pub passwd_salt: Option<Cow<'a, [u8]>>,
33
+
pub passwd_iters: i32,
34
+
pub passwd_hash: Option<Cow<'a, [u8]>>,
35
+
36
+
pub last_active: Option<time::OffsetDateTime>,
37
+
38
+
pub is_admin: bool,
39
+
pub is_enabled: bool,
40
+
}
41
+
42
+
impl<'a> Creds<'a> {
43
+
pub fn verify_password(&self, password: &str) -> bool {
44
+
let salt = if let Some(v) = self.passwd_salt.as_ref() {
45
+
v
46
+
} else {
47
+
return false;
48
+
};
49
+
let current_hash = if let Some(v) = self.passwd_hash.as_ref() {
50
+
v
51
+
} else {
52
+
return false;
53
+
};
54
+
if self.passwd_iters <= 0 {
55
+
return false;
56
+
}
57
+
58
+
let mut hash = vec![0u8; 32];
59
+
if pbkdf2::<Hmac<Sha256>>(password.as_bytes(), salt, self.passwd_iters as u32, &mut hash)
60
+
.is_err()
61
+
{
62
+
error!("invalid output digest length");
63
+
return false;
64
+
}
65
+
66
+
hash == current_hash.as_ref()
67
+
}
68
+
69
+
pub(crate) fn generate_creds(password: &str, iters: u32) -> ([u8; 4], [u8; 32]) {
70
+
let salt: [u8; 4] = rand::random();
71
+
let mut res = [0u8; 32];
72
+
pbkdf2::pbkdf2::<Hmac<Sha256>>(password.as_bytes(), &salt, iters, &mut res)
73
+
.expect("failed to perform pbkdf2_hmac_sha256");
74
+
(salt, res)
75
+
}
76
+
}
77
+
78
+
#[cfg(test)]
79
+
mod tests {
80
+
use super::*;
81
+
82
+
#[test]
83
+
fn generate_and_verify_password() {
84
+
let password = "MyPassword1$";
85
+
let iters = 10_000;
86
+
let (salt, hash) = Creds::generate_creds(password, iters);
87
+
let creds = Creds {
88
+
passwd_hash: Some((&hash[..]).into()),
89
+
passwd_salt: Some((&salt[..]).into()),
90
+
passwd_iters: iters as i32,
91
+
..Default::default()
92
+
};
93
+
assert!(creds.verify_password(password), "failed to verify password");
94
+
}
95
+
}
+29
-1
common/src/db/schema_auto.rs
+29
-1
common/src/db/schema_auto.rs
···
1
1
// @generated automatically by Diesel CLI.
2
2
3
3
diesel::table! {
4
+
creds (id) {
5
+
id -> Int4,
6
+
#[max_length = 256]
7
+
username -> Varchar,
8
+
#[max_length = 256]
9
+
email -> Varchar,
10
+
passwd_salt -> Nullable<Bytea>,
11
+
passwd_iters -> Int4,
12
+
passwd_hash -> Nullable<Bytea>,
13
+
last_active -> Nullable<Timestamptz>,
14
+
creation_dt -> Timestamptz,
15
+
is_admin -> Bool,
16
+
is_enabled -> Bool,
17
+
}
18
+
}
19
+
20
+
diesel::table! {
4
21
dbs (id) {
5
22
id -> Int4,
23
+
#[max_length = 260]
6
24
file_path -> Nullable<Varchar>,
25
+
#[max_length = 260]
7
26
idb_path -> Nullable<Varchar>,
8
27
file_id -> Nullable<Int4>,
9
28
user_id -> Nullable<Int4>,
···
36
55
id -> Int4,
37
56
lic_id -> Nullable<Bytea>,
38
57
lic_data -> Nullable<Bytea>,
58
+
#[max_length = 260]
39
59
hostname -> Nullable<Varchar>,
40
60
first_seen -> Nullable<Timestamptz>,
61
+
cred_id -> Nullable<Int4>,
41
62
}
42
63
}
43
64
44
65
diesel::joinable!(dbs -> files (file_id));
45
66
diesel::joinable!(dbs -> users (user_id));
46
67
diesel::joinable!(funcs -> dbs (db_id));
68
+
diesel::joinable!(users -> creds (cred_id));
47
69
48
-
diesel::allow_tables_to_appear_in_same_query!(dbs, files, funcs, users,);
70
+
diesel::allow_tables_to_appear_in_same_query!(
71
+
creds,
72
+
dbs,
73
+
files,
74
+
funcs,
75
+
users,
76
+
);
+35
-38
common/src/rpc/messages.rs
+35
-38
common/src/rpc/messages.rs
···
3
3
4
4
#[derive(Deserialize, Serialize)]
5
5
pub struct RpcFail<'a> {
6
-
pub code: u32,
7
-
pub message: &'a str,
6
+
pub result: u32,
7
+
pub error: &'a str,
8
8
}
9
9
10
10
#[derive(Serialize, Deserialize)]
11
11
pub struct RpcNotify<'a> {
12
-
pub code: u32,
13
-
pub msg: &'a str,
12
+
pub ty: u32,
13
+
pub text: &'a str,
14
14
}
15
15
16
16
#[derive(Serialize, Deserialize, Debug)]
···
21
21
22
22
#[derive(Serialize, Deserialize)]
23
23
pub struct RpcHello<'a> {
24
-
pub protocol_version: u32,
24
+
pub client_version: u32,
25
25
pub license_data: &'a [u8],
26
26
pub lic_number: [u8; 6],
27
-
pub unk2: u32,
27
+
pub record_conv: u32,
28
28
}
29
29
30
30
#[derive(Debug, Deserialize, Serialize, Clone)]
31
-
pub struct PullMetadataFunc<'a> {
32
-
pub unk0: u32,
33
-
pub mb_hash: &'a [u8],
31
+
pub struct PatternId<'a> {
32
+
pub ty: u32,
33
+
pub data: &'a [u8],
34
34
}
35
35
36
36
#[derive(Deserialize, Serialize)]
37
37
pub struct PullMetadata<'a> {
38
-
pub unk0: u32,
39
-
pub unk1: Cow<'a, [u32]>,
38
+
pub flags: u32,
39
+
pub keys: Cow<'a, [u32]>,
40
40
41
41
#[serde(borrow)]
42
-
pub funcs: Cow<'a, [PullMetadataFunc<'a>]>,
42
+
pub pattern_ids: Cow<'a, [PatternId<'a>]>,
43
43
}
44
44
45
45
#[derive(Deserialize, Serialize, Clone)]
···
52
52
53
53
#[derive(Deserialize, Serialize)]
54
54
pub struct PullMetadataResult<'a> {
55
-
pub unk0: Cow<'a, [u32]>,
55
+
pub codes: Cow<'a, [u32]>,
56
56
#[serde(borrow)]
57
57
pub funcs: Cow<'a, [PullMetadataResultFunc<'a>]>,
58
58
}
···
62
62
pub name: &'a str,
63
63
pub func_len: u32,
64
64
pub func_data: &'a [u8],
65
-
66
-
// PullMetadata's fields (tuple 'unk2') are similar to these two
67
-
pub unk2: u32,
68
-
pub hash: &'a [u8],
65
+
pub pattern_id: PatternId<'a>,
69
66
}
70
67
71
68
#[derive(Deserialize, Serialize)]
72
69
pub struct PushMetadata<'a> {
73
-
pub unk0: u32,
70
+
pub flags: u32,
74
71
pub idb_path: &'a str,
75
-
pub file_path: &'a str,
76
-
pub md5: [u8; 16],
72
+
pub input_path: &'a str,
73
+
pub input_md5: [u8; 16],
77
74
pub hostname: &'a str,
78
75
pub funcs: Cow<'a, [PushMetadataFunc<'a>]>,
79
-
pub unk1: Cow<'a, [u64]>,
76
+
pub ea64s: Cow<'a, [u64]>,
80
77
}
81
78
82
79
#[derive(Deserialize, Serialize)]
···
87
84
88
85
#[derive(Debug, Deserialize, Serialize)]
89
86
pub struct DelHistory<'a> {
90
-
pub unk0: u32, // =0x08
91
-
pub unk1: Cow<'a, [Cow<'a, str>]>,
92
-
pub unk2: Cow<'a, [[u64; 2]]>,
93
-
pub unk3: Cow<'a, [[u64; 2]]>,
94
-
pub unk4: Cow<'a, [Cow<'a, str>]>,
95
-
pub unk5: Cow<'a, [Cow<'a, str>]>,
96
-
pub unk6: Cow<'a, [Cow<'a, str>]>,
97
-
pub unk7: Cow<'a, [Cow<'a, str>]>,
98
-
pub unk8: Cow<'a, [Cow<'a, [u8; 16]>]>,
99
-
pub funcs: Cow<'a, [Cow<'a, [u8; 16]>]>,
100
-
pub unk10: Cow<'a, [[u64; 2]]>,
101
-
pub unk11: u64,
87
+
pub flags: u32, // =0x08
88
+
pub license_ids: Cow<'a, [Cow<'a, str>]>,
89
+
pub time_ranges: Cow<'a, [[u64; 2]]>,
90
+
pub history_id_ranges: Cow<'a, [[u64; 2]]>,
91
+
pub idbs: Cow<'a, [Cow<'a, str>]>,
92
+
pub inputs: Cow<'a, [Cow<'a, str>]>,
93
+
pub funcs: Cow<'a, [Cow<'a, str>]>, // funcs
94
+
pub usernames: Cow<'a, [Cow<'a, str>]>,
95
+
pub input_hashes: Cow<'a, [Cow<'a, [u8; 16]>]>,
96
+
pub calcrel_hashes: Cow<'a, [Cow<'a, [u8; 16]>]>,
97
+
pub push_id_ranges: Cow<'a, [[u64; 2]]>,
98
+
pub max_entries: u64,
102
99
}
103
100
104
101
#[derive(Deserialize, Serialize)]
105
102
pub struct DelHistoryResult {
106
-
pub deleted_mds: u32,
103
+
pub ndeleted: u32,
107
104
}
108
105
109
106
#[derive(Debug, Deserialize, Serialize, Default)]
···
125
122
#[derive(Debug, Deserialize, Serialize)]
126
123
pub struct GetFuncHistories<'a> {
127
124
#[serde(borrow)]
128
-
pub funcs: Cow<'a, [PullMetadataFunc<'a>]>,
129
-
pub unk0: u32,
125
+
pub funcs: Cow<'a, [PatternId<'a>]>,
126
+
pub flags: u32,
130
127
}
131
128
132
129
#[derive(Debug, Deserialize, Serialize, Clone)]
···
151
148
pub status: Cow<'a, [u32]>,
152
149
#[serde(borrow)]
153
150
pub funcs: Cow<'a, [FunctionHistories<'a>]>,
154
-
pub users: Cow<'a, [Cow<'a, str>]>,
155
-
pub dbs: Cow<'a, [Cow<'a, str>]>,
151
+
pub authors: Cow<'a, [Cow<'a, str>]>,
152
+
pub idb_paths: Cow<'a, [Cow<'a, str>]>,
156
153
}
+45
-21
common/src/rpc/mod.rs
+45
-21
common/src/rpc/mod.rs
···
63
63
}
64
64
}
65
65
66
-
pub async fn read_packet<R: AsyncRead + Unpin>(mut reader: R) -> Result<Vec<u8>, Error> {
66
+
pub struct PacketHeader {
67
+
code: u8,
68
+
size: usize,
69
+
}
70
+
71
+
pub async fn read_packet_header<R: AsyncRead + Unpin>(
72
+
mut reader: R,
73
+
) -> Result<PacketHeader, Error> {
67
74
let mut head = [0u8; 5];
68
75
match reader.read_exact(&mut head).await {
69
76
Ok(_) => {},
···
83
90
.into());
84
91
}
85
92
86
-
let max_len = get_code_maxlen(code);
93
+
Ok(PacketHeader { code, size: buf_len })
94
+
}
87
95
88
-
if buf_len > max_len {
89
-
info!("maxium size exceeded: code={}: max={}; req={}", code, max_len, buf_len);
90
-
return Err(std::io::Error::new(
91
-
std::io::ErrorKind::InvalidData,
92
-
"request length exceeded maximum limit",
93
-
)
94
-
.into());
95
-
}
96
+
impl PacketHeader {
97
+
pub async fn read<R: AsyncRead + Unpin>(self, mut reader: R) -> Result<Vec<u8>, Error> {
98
+
trace!("expecting {} bytes...", self.size);
99
+
let buf_len = self.size + 1;
96
100
97
-
// the additional byte is for the RPC code
98
-
trace!("expecting {} bytes...", buf_len);
99
-
let buf_len = buf_len + 1;
101
+
let max_len = get_code_maxlen(self.code);
102
+
if self.size > max_len {
103
+
info!("maxium size exceeded: code={}: max={}; req={}", self.code, max_len, self.size);
104
+
return Err(std::io::Error::new(
105
+
std::io::ErrorKind::InvalidData,
106
+
"request length exceeded maximum limit",
107
+
)
108
+
.into());
109
+
}
100
110
101
-
let mut data = Vec::new();
102
-
data.try_reserve_exact(buf_len)?;
103
-
data.resize(buf_len, 0);
104
-
data[0] = code;
105
-
reader.read_exact(&mut data[1..]).await?;
111
+
let mut data = Vec::new();
112
+
data.try_reserve_exact(buf_len)?;
113
+
data.resize(buf_len, 0);
114
+
data[0] = self.code;
115
+
reader.read_exact(&mut data[1..]).await?;
116
+
117
+
Ok(data)
118
+
}
119
+
120
+
// returns true if this could be an http request.
121
+
pub fn is_http(&self) -> bool {
122
+
let mut sz = (self.size as u32).to_be_bytes();
123
+
sz.make_ascii_uppercase();
124
+
let sz = &sz[..];
106
125
107
-
Ok(data)
126
+
match sz {
127
+
b"GET " | b"PUT " if self.code == b'/' => true,
128
+
b"POST" | b"HEAD" if self.code == b' ' => true,
129
+
_ => false,
130
+
}
131
+
}
108
132
}
109
133
110
134
async fn write_packet<W: AsyncWrite + Unpin>(mut w: W, data: &[u8]) -> Result<(), std::io::Error> {
···
193
217
0x0c => RpcMessage::Notify(Self::deserialize_check(payload)?),
194
218
0x0d => {
195
219
let (hello, consumed) = de::from_slice::<messages::RpcHello>(payload)?;
196
-
let creds = if payload.len() > consumed && hello.protocol_version > 2 {
220
+
let creds = if payload.len() > consumed && hello.client_version > 2 {
197
221
let payload = &payload[consumed..];
198
222
let (creds, consumed) = de::from_slice::<Creds>(payload)?;
199
223
if payload.len() != consumed {
···
201
225
}
202
226
Some(creds)
203
227
} else {
204
-
if hello.protocol_version > 2 || payload.len() != consumed {
228
+
if hello.client_version > 2 || payload.len() != consumed {
205
229
trace!("Unexpected Hello msg: {payload:02x?}");
206
230
}
207
231
None
+1
-1
common/src/web/api.rs
+1
-1
common/src/web/api.rs
···
111
111
in_files: &'a [Md5],
112
112
}
113
113
114
-
let funcs = [crate::rpc::PullMetadataFunc { unk0: 1, mb_hash: &md5.0 }];
114
+
let funcs = [crate::rpc::PatternId { ty: 1, data: &md5.0 }];
115
115
116
116
let files_with = state.db.get_files_with_func(&md5.0[..]);
117
117
let files_info = state.db.get_funcs(&funcs);
+8
-2
config-example.toml
+8
-2
config-example.toml
···
7
7
server_name = "lumen"
8
8
9
9
# Allow clients to delete metadata from the database?
10
-
allow_deletes = false
10
+
allow_deletes = true
11
11
# How many function histories should we return? 0=Disabled.
12
12
get_history_limit = 50
13
13
14
+
[users]
15
+
# Enable guest accounts? disabling this will only allow IDA 8.1+ to connect.
16
+
allow_guests = true
17
+
# sets the amount of PBKDF2 iterations for storing passwords.
18
+
pbkdf2_iterations = 120000
19
+
14
20
# only required when `use_tls` is set to true.
15
21
[lumina.tls]
16
-
# Specify the server's certificate.
22
+
# Specify the server's certificate.
17
23
# Clients connecting to the server must match this certificate.
18
24
# If the certificate is password protected, the password can be specified in the `PKCSPASSWD` environment variable.
19
25
server_cert = "path/to/server_crt"
+4
-3
lumen/Cargo.toml
+4
-3
lumen/Cargo.toml
···
8
8
9
9
[dependencies]
10
10
common = { path = "../common" }
11
-
tokio = { version = "1.39", features = ["full"] }
11
+
tokio = { version = "1.32", features = ["full"] }
12
12
log = { version = "0.4", features = ["release_max_level_debug"] }
13
13
pretty_env_logger = "0.5"
14
-
clap = "4.5"
14
+
clap = "4.3"
15
15
tokio-native-tls = "0.3"
16
16
native-tls = { version = "0.2" }
17
17
warp = "0.3"
18
-
prometheus-client = "0.22"
18
+
prometheus-client = "0.22.0"
19
+
rpassword = "7.3.1"
+62
-6
lumen/src/main.rs
+62
-6
lumen/src/main.rs
···
4
4
#![warn(unused_crate_dependencies)]
5
5
#![deny(clippy::all)]
6
6
7
-
use clap::Arg;
7
+
use clap::{builder::BoolishValueParser, Arg, Command};
8
8
use log::*;
9
9
use server::do_lumen;
10
10
use std::sync::Arc;
11
+
use users::UserMgmt;
11
12
12
13
mod server;
14
+
mod users;
13
15
mod web;
14
16
15
-
use common::config;
16
-
17
17
fn setup_logger() {
18
18
if std::env::var("RUST_LOG").is_err() {
19
19
std::env::set_var("RUST_LOG", concat!(env!("CARGO_PKG_NAME"), "=info"));
···
23
23
24
24
#[tokio::main]
25
25
async fn main() {
26
-
setup_logger();
27
26
let matches = clap::Command::new("lumen")
28
27
.version(env!("CARGO_PKG_VERSION"))
29
28
.about("lumen is a private Lumina server for IDA.\nVisit https://github.com/naim94a/lumen/ for updates.")
···
34
33
.default_value("config.toml")
35
34
.help("Configuration file path")
36
35
)
36
+
.subcommand(
37
+
Command::new("users")
38
+
.about("User Management")
39
+
.subcommand(
40
+
Command::new("add")
41
+
.about("Adds a user")
42
+
.arg(
43
+
Arg::new("username")
44
+
.required(true)
45
+
)
46
+
.arg(
47
+
Arg::new("email")
48
+
.required(true)
49
+
)
50
+
.arg(
51
+
Arg::new("is_admin")
52
+
.required(false)
53
+
.default_value("no")
54
+
.value_parser(BoolishValueParser::new())
55
+
)
56
+
)
57
+
.subcommand(
58
+
Command::new("del")
59
+
.about("Deletes a user")
60
+
.arg(Arg::new("username"))
61
+
)
62
+
)
63
+
.subcommand(Command::new("passwd").about("Set user password").arg(Arg::new("username").required(true)))
37
64
.get_matches();
38
65
39
66
let config = {
40
-
config::load_config(
67
+
common::config::load_config(
41
68
std::fs::File::open(matches.get_one::<String>("config").unwrap())
42
69
.expect("failed to read config"),
43
70
)
44
71
};
45
72
let config = Arc::new(config);
46
73
47
-
do_lumen(config).await;
74
+
match matches.subcommand() {
75
+
Some(("users", m)) => {
76
+
let users = UserMgmt::new(&config).await;
77
+
match m.subcommand() {
78
+
None => users.list_users().await,
79
+
Some(("add", m)) => {
80
+
let username = m.get_one::<String>("username").unwrap();
81
+
let email = m.get_one::<String>("email").unwrap();
82
+
let is_admin = *m.get_one::<bool>("is_admin").unwrap_or(&false);
83
+
users.add_user(username, email, is_admin).await;
84
+
},
85
+
Some(("del", m)) => {
86
+
let username = m.get_one::<String>("username").unwrap();
87
+
users.delete_user(username).await;
88
+
},
89
+
_ => unreachable!(),
90
+
};
91
+
},
92
+
Some(("passwd", m)) => {
93
+
let username = m.get_one::<String>("username").unwrap();
94
+
let password = rpassword::prompt_password("New Password: ").unwrap();
95
+
let users = UserMgmt::new(&config).await;
96
+
users.set_password(username, &password).await;
97
+
},
98
+
Some(_) => unreachable!(),
99
+
None => {
100
+
setup_logger();
101
+
do_lumen(config).await
102
+
},
103
+
};
48
104
}
+240
-102
lumen/src/server.rs
+240
-102
lumen/src/server.rs
···
1
1
use std::{
2
-
borrow::Cow, collections::HashMap, mem::discriminant, process::exit, sync::Arc, time::Instant,
2
+
borrow::Cow,
3
+
collections::HashMap,
4
+
mem::discriminant,
5
+
process::exit,
6
+
sync::Arc,
7
+
time::{Duration, Instant},
3
8
};
4
9
5
10
use common::{
6
11
async_drop::AsyncDropper,
7
12
config::Config,
8
-
db::Database,
13
+
db::{self, Database},
9
14
make_pretty_hex, md,
10
15
metrics::LuminaVersion,
11
-
rpc::{self, Error, HelloResult, RpcFail, RpcHello, RpcMessage},
16
+
rpc::{self, Creds, Error, HelloResult, RpcFail, RpcHello, RpcMessage},
12
17
SharedState, SharedState_,
13
18
};
14
19
use log::{debug, error, info, trace, warn};
···
21
26
22
27
use crate::web;
23
28
29
+
struct Session<'a> {
30
+
state: &'a SharedState_,
31
+
hello_msg: RpcHello<'a>,
32
+
_creds: db::schema::Creds<'a>,
33
+
creds_id: Option<i32>,
34
+
last_cred_check: Instant,
35
+
}
36
+
impl<'a> Session<'a> {
37
+
/// Check if the user changed in the database.
38
+
pub async fn is_valid(&mut self) -> bool {
39
+
let db = &self.state.db;
40
+
if let Some(cred_id) = self.creds_id {
41
+
if self.last_cred_check.elapsed() > Duration::from_secs(60 * 5) {
42
+
match db.get_user_by_id(cred_id).await {
43
+
Ok(v) => {
44
+
if !v.is_enabled
45
+
|| v.is_admin != self._creds.is_admin
46
+
|| v.passwd_salt != self._creds.passwd_salt
47
+
{
48
+
// user changed, force them to login again.
49
+
return false;
50
+
}
51
+
self.last_cred_check = Instant::now();
52
+
return true;
53
+
},
54
+
Err(err) => {
55
+
error!("db error: {err}");
56
+
return false;
57
+
},
58
+
}
59
+
}
60
+
}
61
+
true
62
+
}
63
+
}
64
+
24
65
async fn handle_transaction<'a, S: AsyncRead + AsyncWrite + Unpin>(
25
-
state: &SharedState, user: &'a RpcHello<'a>, mut stream: S,
66
+
session: &mut Session<'a>, mut stream: S,
26
67
) -> Result<(), Error> {
68
+
let state = session.state;
27
69
let db = &state.db;
28
70
let server_name = state.server_name.as_str();
29
71
30
72
trace!("waiting for command..");
31
-
let req =
32
-
match timeout(state.config.limits.command_timeout, rpc::read_packet(&mut stream)).await {
33
-
Ok(res) => match res {
34
-
Ok(v) => v,
35
-
Err(e) => return Err(e),
36
-
},
37
-
Err(_) => {
38
-
_ = RpcMessage::Fail(RpcFail {
39
-
code: 0,
40
-
message: &format!("{server_name} client idle for too long.\n"),
41
-
})
42
-
.async_write(&mut stream)
43
-
.await;
44
-
return Err(Error::Timeout);
45
-
},
46
-
};
73
+
let rpkt = async {
74
+
let hdr = rpc::read_packet_header(&mut stream).await?;
75
+
// we don't want to read a whole request just to find out the user was revoked...
76
+
if !session.is_valid().await {
77
+
return Err(Error::Timeout);
78
+
}
79
+
hdr.read(&mut stream).await
80
+
};
81
+
let req = match timeout(Duration::from_secs(3600), rpkt).await {
82
+
Ok(res) => match res {
83
+
Ok(v) => v,
84
+
Err(e) => return Err(e),
85
+
},
86
+
Err(_) => {
87
+
_ = RpcMessage::Fail(RpcFail {
88
+
result: 0,
89
+
error: &format!("{server_name} client idle for too long.\n"),
90
+
})
91
+
.async_write(&mut stream)
92
+
.await;
93
+
return Err(Error::Timeout);
94
+
},
95
+
};
47
96
trace!("got command!");
97
+
98
+
if !session.is_valid().await {
99
+
return Err(Error::Timeout);
100
+
}
101
+
48
102
let req = match RpcMessage::deserialize(&req) {
49
103
Ok(v) => v,
50
104
Err(err) => {
51
105
warn!("bad message: \n{}\n", make_pretty_hex(&req));
52
106
error!("failed to process rpc message: {}", err);
53
107
let resp = rpc::RpcFail {
54
-
code: 0,
55
-
message: &format!("{server_name}: error: invalid data.\n"),
108
+
result: 0,
109
+
error: &format!("{server_name}: error: invalid data.\n"),
56
110
};
57
111
let resp = RpcMessage::Fail(resp);
58
112
resp.async_write(&mut stream).await?;
···
63
117
match req {
64
118
RpcMessage::PullMetadata(md) => {
65
119
let start = Instant::now();
66
-
let funcs =
67
-
match timeout(state.config.limits.pull_md_timeout, db.get_funcs(&md.funcs)).await {
68
-
Ok(r) => match r {
69
-
Ok(v) => v,
70
-
Err(e) => {
71
-
error!("pull failed, db: {}", e);
72
-
rpc::RpcMessage::Fail(rpc::RpcFail {
73
-
code: 0,
74
-
message: &format!(
75
-
"{server_name}: db error; please try again later..\n"
76
-
),
77
-
})
78
-
.async_write(&mut stream)
79
-
.await?;
80
-
return Ok(());
81
-
},
82
-
},
83
-
Err(_) => {
84
-
RpcMessage::Fail(RpcFail {
85
-
code: 0,
86
-
message: &format!("{server_name}: query took too long to execute.\n"),
120
+
let funcs = match timeout(Duration::from_secs(4 * 60), db.get_funcs(&md.pattern_ids))
121
+
.await
122
+
{
123
+
Ok(r) => match r {
124
+
Ok(v) => v,
125
+
Err(e) => {
126
+
error!("pull failed, db: {}", e);
127
+
rpc::RpcMessage::Fail(rpc::RpcFail {
128
+
result: 0,
129
+
error: &format!("{server_name}: db error; please try again later..\n"),
87
130
})
88
131
.async_write(&mut stream)
89
132
.await?;
90
-
debug!("pull query timeout");
91
-
return Err(Error::Timeout);
133
+
return Ok(());
92
134
},
93
-
};
135
+
},
136
+
Err(_) => {
137
+
RpcMessage::Fail(RpcFail {
138
+
result: 0,
139
+
error: &format!("{server_name}: query took too long to execute.\n"),
140
+
})
141
+
.async_write(&mut stream)
142
+
.await?;
143
+
debug!("pull query timeout");
144
+
return Err(Error::Timeout);
145
+
},
146
+
};
94
147
let pulled_funcs = funcs.iter().filter(|v| v.is_some()).count();
95
148
state.metrics.pulls.inc_by(pulled_funcs as _);
96
-
state.metrics.queried_funcs.inc_by(md.funcs.len() as _);
149
+
state.metrics.queried_funcs.inc_by(md.pattern_ids.len() as _);
97
150
debug!(
98
151
"pull {pulled_funcs}/{} funcs ended after {:?}",
99
-
md.funcs.len(),
152
+
md.pattern_ids.len(),
100
153
start.elapsed()
101
154
);
102
155
···
113
166
.collect();
114
167
115
168
RpcMessage::PullMetadataResult(rpc::PullMetadataResult {
116
-
unk0: Cow::Owned(statuses),
169
+
codes: Cow::Owned(statuses),
117
170
funcs: Cow::Owned(found),
118
171
})
119
172
.async_write(&mut stream)
···
124
177
let start = Instant::now();
125
178
let scores: Vec<u32> = mds.funcs.iter().map(md::get_score).collect();
126
179
127
-
let status = match db.push_funcs(user, &mds, &scores).await {
128
-
Ok(v) => v.into_iter().map(u32::from).collect::<Vec<u32>>(),
129
-
Err(err) => {
130
-
log::error!("push failed, db: {}", err);
131
-
rpc::RpcMessage::Fail(rpc::RpcFail {
132
-
code: 0,
133
-
message: &format!("{server_name}: db error; please try again later.\n"),
134
-
})
135
-
.async_write(&mut stream)
136
-
.await?;
137
-
return Ok(());
138
-
},
139
-
};
180
+
let status =
181
+
match db.push_funcs(&session.hello_msg, session.creds_id, &mds, &scores).await {
182
+
Ok(v) => v.into_iter().map(u32::from).collect::<Vec<u32>>(),
183
+
Err(err) => {
184
+
log::error!("push failed, db: {}", err);
185
+
rpc::RpcMessage::Fail(rpc::RpcFail {
186
+
result: 0,
187
+
error: &format!("{server_name}: db error; please try again later.\n"),
188
+
})
189
+
.async_write(&mut stream)
190
+
.await?;
191
+
return Ok(());
192
+
},
193
+
};
140
194
state.metrics.pushes.inc_by(status.len() as _);
141
195
let new_funcs =
142
196
status.iter().fold(0u64, |counter, &v| if v > 0 { counter + 1 } else { counter });
···
155
209
let is_delete_allowed = state.config.lumina.allow_deletes.unwrap_or(false);
156
210
if !is_delete_allowed {
157
211
RpcMessage::Fail(rpc::RpcFail {
158
-
code: 2,
159
-
message: &format!("{server_name}: Delete command is disabled on this server."),
212
+
result: 2,
213
+
error: &format!("{server_name}: Delete command is disabled on this server."),
160
214
})
161
215
.async_write(&mut stream)
162
216
.await?;
···
164
218
if let Err(err) = db.delete_metadata(&req).await {
165
219
error!("delete failed. db: {err}");
166
220
RpcMessage::Fail(rpc::RpcFail {
167
-
code: 3,
168
-
message: &format!("{server_name}: db error, please try again later."),
221
+
result: 3,
222
+
error: &format!("{server_name}: db error, please try again later."),
169
223
})
170
224
.async_write(&mut stream)
171
225
.await?;
172
226
return Ok(());
173
227
}
174
228
RpcMessage::DelHistoryResult(rpc::DelHistoryResult {
175
-
deleted_mds: req.funcs.len() as u32,
229
+
ndeleted: req.calcrel_hashes.len() as u32,
176
230
})
177
231
.async_write(&mut stream)
178
232
.await?;
···
183
237
184
238
if limit == 0 {
185
239
RpcMessage::Fail(rpc::RpcFail {
186
-
code: 4,
187
-
message: &format!(
240
+
result: 4,
241
+
error: &format!(
188
242
"{server_name}: function histories are disabled on this server."
189
243
),
190
244
})
···
195
249
196
250
let mut statuses = vec![];
197
251
let mut res = vec![];
198
-
for chksum in req.funcs.iter().map(|v| v.mb_hash) {
252
+
for chksum in req.funcs.iter().map(|v| v.data) {
199
253
let history = match db.get_func_histories(chksum, limit).await {
200
254
Ok(v) => v,
201
255
Err(err) => {
202
256
error!("failed to get function histories: {err:?}");
203
257
RpcMessage::Fail(rpc::RpcFail {
204
-
code: 3,
205
-
message: &format!("{server_name}: db error, please try again later."),
258
+
result: 3,
259
+
error: &format!("{server_name}: db error, please try again later."),
206
260
})
207
261
.async_write(&mut stream)
208
262
.await?;
···
234
288
RpcMessage::GetFuncHistoriesResult(rpc::GetFuncHistoriesResult {
235
289
status: statuses.into(),
236
290
funcs: Cow::Owned(res),
237
-
users: vec![].into(),
238
-
dbs: vec![].into(),
291
+
authors: vec![].into(),
292
+
idb_paths: vec![].into(),
239
293
})
240
294
.async_write(&mut stream)
241
295
.await?;
242
296
},
243
297
_ => {
244
298
RpcMessage::Fail(rpc::RpcFail {
245
-
code: 0,
246
-
message: &format!("{server_name}: invalid data.\n"),
299
+
result: 0,
300
+
error: &format!("{server_name}: invalid data.\n"),
247
301
})
248
302
.async_write(&mut stream)
249
303
.await?;
···
252
306
Ok(())
253
307
}
254
308
309
+
async fn http_reply<W: AsyncRead + AsyncWrite + Unpin>(mut stream: W) {
310
+
use tokio::io::AsyncWriteExt;
311
+
312
+
const HTTP_REPLY: &str = concat!(
313
+
"HTTP/1.1 400 bad request\r\n",
314
+
"Refresh: 2; URL=https://github.com/naim94a/lumen\r\n",
315
+
"Server: lumen\r\n",
316
+
"Connection: close\r\n",
317
+
"Content-Type: text/html\r\n",
318
+
"",
319
+
"\r\n",
320
+
"<pre>This is not an HTTP server. <br />Redirecting to <a href=\"https://github.com/naim94a/lumen\">lumen</a> ...</pre>\n",
321
+
);
322
+
323
+
let _ = stream.write_all(HTTP_REPLY.as_bytes()).await;
324
+
}
325
+
255
326
async fn handle_client<S: AsyncRead + AsyncWrite + Unpin>(
256
327
state: &SharedState, mut stream: S,
257
328
) -> Result<(), rpc::Error> {
258
329
let server_name = &state.server_name;
259
-
let hello =
260
-
match timeout(state.config.limits.hello_timeout, rpc::read_packet(&mut stream)).await {
261
-
Ok(v) => v?,
262
-
Err(_) => {
263
-
debug!("didn't get hello in time.");
264
-
return Ok(());
265
-
},
266
-
};
330
+
let rpkt = async {
331
+
let hdr = rpc::read_packet_header(&mut stream).await?;
332
+
if hdr.is_http() {
333
+
// looks like someone is using a browser instead of IDA, what a fool.
334
+
debug!("ignoring http request...");
335
+
http_reply(&mut stream).await;
336
+
return Err(Error::Eof);
337
+
}
338
+
hdr.read(&mut stream).await
339
+
};
340
+
let hello = match timeout(Duration::from_secs(15), rpkt).await {
341
+
Ok(v) => v?,
342
+
Err(_) => {
343
+
debug!("didn't get hello in time.");
344
+
return Ok(());
345
+
},
346
+
};
267
347
268
348
let (hello, creds) = match RpcMessage::deserialize(&hello) {
269
349
Ok(RpcMessage::Hello(v, creds)) => {
270
-
debug!("hello protocol={}, login creds: {creds:?}", v.protocol_version);
350
+
debug!("hello protocol={}, login creds: {creds:?}", v.client_version);
271
351
(v, creds)
272
352
},
273
353
_ => {
274
354
// send error
275
355
error!("got bad hello message");
276
356
277
-
let resp = rpc::RpcFail { code: 0, message: &format!("{server_name}: bad sequence.") };
357
+
let resp = rpc::RpcFail { result: 0, error: &format!("{server_name}: bad sequence.") };
278
358
let resp = rpc::RpcMessage::Fail(resp);
279
359
resp.async_write(&mut stream).await?;
280
360
···
284
364
state
285
365
.metrics
286
366
.lumina_version
287
-
.get_or_create(&LuminaVersion { protocol_version: hello.protocol_version })
367
+
.get_or_create(&LuminaVersion { protocol_version: hello.client_version })
288
368
.inc();
289
369
290
-
if let Some(ref creds) = creds {
291
-
if creds.username != "guest" {
292
-
// Only allow "guest" to connect for now.
293
-
rpc::RpcMessage::Fail(rpc::RpcFail {
294
-
code: 1,
295
-
message: &format!("{server_name}: invalid username or password. Try logging in with `guest` instead."),
296
-
}).async_write(&mut stream).await?;
297
-
return Ok(());
370
+
let creds = creds.unwrap_or(Creds { username: "guest", password: "guest" });
371
+
372
+
let user = if creds.username != "guest" {
373
+
match state.db.get_user_by_username(creds.username).await {
374
+
Ok((user_id, db_creds)) if db_creds.verify_password(creds.password) => {
375
+
let _ = state.db.update_last_active(user_id).await;
376
+
info!("{} logged in successfully.", db_creds.username);
377
+
(user_id, db_creds)
378
+
},
379
+
Ok(_) => {
380
+
rpc::RpcMessage::Fail(rpc::RpcFail {
381
+
result: 1,
382
+
error: &format!("{server_name}: invalid username or password."),
383
+
})
384
+
.async_write(&mut stream)
385
+
.await?;
386
+
return Ok(());
387
+
},
388
+
Err(err) => {
389
+
error!("error while fetching user information: {err}");
390
+
rpc::RpcMessage::Fail(rpc::RpcFail {
391
+
result: 1,
392
+
error: &format!("{server_name}: internal error, please try again later."),
393
+
})
394
+
.async_write(&mut stream)
395
+
.await?;
396
+
return Ok(());
397
+
},
298
398
}
399
+
} else {
400
+
(
401
+
-1,
402
+
db::schema::Creds {
403
+
username: creds.username.into(),
404
+
is_enabled: state.config.users.allow_guests,
405
+
..Default::default()
406
+
},
407
+
)
408
+
};
409
+
410
+
if !user.1.is_enabled {
411
+
info!("attempt to login to disabled account [{}].", user.1.username);
412
+
rpc::RpcMessage::Fail(rpc::RpcFail {
413
+
result: 1,
414
+
error: &format!("{server_name}: account disabled."),
415
+
})
416
+
.async_write(&mut stream)
417
+
.await?;
418
+
return Ok(());
299
419
}
300
420
301
-
let resp = match hello.protocol_version {
421
+
let resp = match hello.client_version {
302
422
0..=4 => rpc::RpcMessage::Ok(()),
303
423
304
424
// starting IDA 8.3
305
425
5.. => {
306
426
let mut features = 0;
307
427
308
-
if state.config.lumina.allow_deletes.unwrap_or(false) {
428
+
if user.1.is_admin {
429
+
features |= 0x01;
430
+
}
431
+
432
+
if user.0 != -1 && state.config.lumina.allow_deletes.unwrap_or(false) {
309
433
features |= 0x02;
310
434
}
311
435
312
-
rpc::RpcMessage::HelloResult(HelloResult { features, ..Default::default() })
436
+
let last_active = user.1.last_active.map_or(0, |v| v.unix_timestamp() as u64);
437
+
438
+
rpc::RpcMessage::HelloResult(HelloResult {
439
+
username: Cow::Borrowed(&user.1.username),
440
+
last_active,
441
+
features,
442
+
..Default::default()
443
+
})
313
444
},
314
445
};
315
446
resp.async_write(&mut stream).await?;
316
447
448
+
let creds_id = if user.0 == -1 { None } else { Some(user.0) };
449
+
let mut session = Session {
450
+
state,
451
+
hello_msg: hello,
452
+
_creds: user.1,
453
+
creds_id,
454
+
last_cred_check: Instant::now(),
455
+
};
456
+
317
457
loop {
318
-
handle_transaction(state, &hello, &mut stream).await?;
458
+
handle_transaction(&mut session, &mut stream).await?;
319
459
}
320
460
}
321
461
···
392
532
debug!("Connection from {:?}{}: {} active connections", &addr, protocol, count);
393
533
match accpt {
394
534
Some(accpt) => {
395
-
match timeout(state.config.limits.tls_handshake_timeout, accpt.accept(client))
396
-
.await
397
-
{
535
+
match timeout(Duration::from_secs(10), accpt.accept(client)).await {
398
536
Ok(r) => match r {
399
537
Ok(s) => {
400
538
handle_connection(&state, s).await;
+43
lumen/src/users.rs
+43
lumen/src/users.rs
···
1
+
use std::process::exit;
2
+
3
+
use common::{config::Config, db::Database};
4
+
5
+
pub struct UserMgmt {
6
+
db: Database,
7
+
pbkd2_iters: u32,
8
+
}
9
+
10
+
impl UserMgmt {
11
+
pub async fn new(cfg: &Config) -> Self {
12
+
let db = match Database::open(&cfg.database).await {
13
+
Ok(v) => v,
14
+
Err(err) => {
15
+
eprintln!("failed to open database: {}", err);
16
+
exit(1);
17
+
},
18
+
};
19
+
20
+
Self { db, pbkd2_iters: cfg.users.pbkdf2_iterations.get() }
21
+
}
22
+
23
+
pub async fn list_users(&self) {
24
+
let users = self.db.get_users().await.expect("failed to retreive users from database");
25
+
println!("{users:?}");
26
+
}
27
+
28
+
pub async fn set_password(&self, username: &str, password: &str) {
29
+
self.db
30
+
.set_password(username, password.to_owned(), self.pbkd2_iters)
31
+
.await
32
+
.expect("failed to set user's password")
33
+
}
34
+
35
+
pub async fn add_user(&self, username: &str, email: &str, is_admin: bool) {
36
+
let id = self.db.add_user(username, email, is_admin).await.expect("failed to add user");
37
+
println!("{username}'s id is {id}.")
38
+
}
39
+
40
+
pub async fn delete_user(&self, username: &str) {
41
+
self.db.delete_user(username).await.expect("failed to delete user");
42
+
}
43
+
}