@7365admin1/core 3.48.1-staging.179 → 3.48.1-staging.181
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.changeset/hid-configuration-write-allowlist.md +22 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/test/hid-hardening.test.mjs +92 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
"@7365admin1/core": patch
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Constrain what a HID configuration write may contain, and stop storing password salts
|
|
6
|
+
|
|
7
|
+
`PUT /readers/:readerId/configuration` is a passthrough to the reader's
|
|
8
|
+
`set_configuration.fcgi`, and its body schema was `Joi.object().unknown(true)`.
|
|
9
|
+
That reaches `monitor.hostname`, `monitor.port` and `monitor.path` — the block
|
|
10
|
+
that decides which server receives every identification at that door — so one
|
|
11
|
+
request could redirect a reader's entire event stream. Writes are now limited to
|
|
12
|
+
the two modules the product actually writes, `pjsip` and `identifier`, which are
|
|
13
|
+
the only two `setReaderConfiguration` call sites in `layer-common`. Module
|
|
14
|
+
contents stay unvalidated (the vendor owns those keys), reading configuration is
|
|
15
|
+
unchanged, and the monitor block is still managed by the server through
|
|
16
|
+
`setReaderMonitor` and `configureReaderIntegration`, which do not use this
|
|
17
|
+
schema.
|
|
18
|
+
|
|
19
|
+
`sanitizeHidPayload` — the central redaction every `addEvent` already passes
|
|
20
|
+
through — did not include `salt`, so a password salt was still being persisted
|
|
21
|
+
beside the hash it belongs to. `salt`, `salt_value` and `saltvalue` are now
|
|
22
|
+
redacted like the rest. This does not touch records already stored.
|
package/dist/index.d.ts
CHANGED
|
@@ -10659,6 +10659,21 @@ declare const schemaUpdateHidSitePermissions: Joi.ObjectSchema<any>;
|
|
|
10659
10659
|
declare const schemaHidAmicoExecuteActions: Joi.ObjectSchema<any>;
|
|
10660
10660
|
declare const schemaHidAmicoIntercomCall: Joi.ObjectSchema<any>;
|
|
10661
10661
|
declare const schemaHidAmicoConfiguration: Joi.ObjectSchema<any>;
|
|
10662
|
+
/**
|
|
10663
|
+
* A configuration WRITE is a passthrough to `set_configuration.fcgi`, so an
|
|
10664
|
+
* unrestricted body reaches `monitor.hostname`, `monitor.port` and
|
|
10665
|
+
* `monitor.path` - the block that decides which server receives every
|
|
10666
|
+
* identification at that door. A single request could redirect a reader's
|
|
10667
|
+
* entire event stream.
|
|
10668
|
+
*
|
|
10669
|
+
* Writes are limited to the two modules the product actually writes, which are
|
|
10670
|
+
* the only two `setReaderConfiguration` call sites in `layer-common`:
|
|
10671
|
+
* `pjsip` (HidIntercomManagement.vue) and `identifier`
|
|
10672
|
+
* (HidQrCodeConfiguration.vue). Module CONTENTS stay unvalidated - the vendor
|
|
10673
|
+
* owns those keys - and READING configuration is unchanged. The monitor block
|
|
10674
|
+
* is still managed by the server through `setReaderMonitor` and
|
|
10675
|
+
* `configureReaderIntegration`, which do not go through this schema.
|
|
10676
|
+
*/
|
|
10662
10677
|
declare const schemaHidAmicoSetConfiguration: Joi.ObjectSchema<any>;
|
|
10663
10678
|
declare const schemaHidAmicoMonitor: Joi.ObjectSchema<any>;
|
|
10664
10679
|
declare const schemaHidAmicoObjectOperation: Joi.ObjectSchema<any>;
|
package/dist/index.js
CHANGED
|
@@ -14428,7 +14428,7 @@ var NOTIFICATION_CATEGORIES = [
|
|
|
14428
14428
|
description: "When a facility booking is made or its status changes.",
|
|
14429
14429
|
channels: { inApp: true, push: true, email: false },
|
|
14430
14430
|
channelNote: {
|
|
14431
|
-
email: "Booking confirmations
|
|
14431
|
+
email: "Booking confirmations go to the email address entered on the booking form itself. To change where a confirmation lands, change that address when the booking is made."
|
|
14432
14432
|
},
|
|
14433
14433
|
permissionResources: ["facility-booking-mgmt", "facility-mgmt"],
|
|
14434
14434
|
residentDefault: true,
|
|
@@ -14440,7 +14440,7 @@ var NOTIFICATION_CATEGORIES = [
|
|
|
14440
14440
|
description: "When a visitor you invited checks in or checks out.",
|
|
14441
14441
|
channels: { inApp: true, push: true, email: false },
|
|
14442
14442
|
channelNote: {
|
|
14443
|
-
email: "Visitor invitations
|
|
14443
|
+
email: "Visitor invitations go to the email address entered for the visitor when they are invited. To change where one lands, change that address on the invitation."
|
|
14444
14444
|
},
|
|
14445
14445
|
permissionResources: ["visitorManagement", "visitor-mgmt"],
|
|
14446
14446
|
residentDefault: true,
|
|
@@ -43463,7 +43463,10 @@ var schemaHidAmicoIntercomCall = import_joi64.default.object({
|
|
|
43463
43463
|
target: import_joi64.default.string().trim().min(1).max(255).pattern(/^(?:sip:)?[A-Za-z0-9_.+-]+(?:@[A-Za-z0-9.-]+(?::\d{1,5})?)?$/).required()
|
|
43464
43464
|
}).unknown(true);
|
|
43465
43465
|
var schemaHidAmicoConfiguration = import_joi64.default.object().pattern(import_joi64.default.string(), import_joi64.default.array().items(import_joi64.default.string())).min(1).unknown(true);
|
|
43466
|
-
var schemaHidAmicoSetConfiguration = import_joi64.default.object(
|
|
43466
|
+
var schemaHidAmicoSetConfiguration = import_joi64.default.object({
|
|
43467
|
+
pjsip: import_joi64.default.object().unknown(true),
|
|
43468
|
+
identifier: import_joi64.default.object().unknown(true)
|
|
43469
|
+
}).min(1).unknown(false);
|
|
43467
43470
|
var schemaHidAmicoMonitor = import_joi64.default.object({
|
|
43468
43471
|
enabled: import_joi64.default.boolean().required()
|
|
43469
43472
|
});
|
|
@@ -43672,6 +43675,9 @@ var SENSITIVE_KEYS = /* @__PURE__ */ new Set([
|
|
|
43672
43675
|
"pin",
|
|
43673
43676
|
"pin_value",
|
|
43674
43677
|
"pinvalue",
|
|
43678
|
+
"salt",
|
|
43679
|
+
"salt_value",
|
|
43680
|
+
"saltvalue",
|
|
43675
43681
|
"card_value",
|
|
43676
43682
|
"cardvalue",
|
|
43677
43683
|
"cardno",
|