feat(planning): grille hebdomadaire complète avec API et filtres
- Connexion API via proxy Angular (résolution CORS, base path /api) - Import CSS ng-zorro global pour les modales et composants - Filtres Camion/Show câblés sur l'affichage de la grille - Camions affichés via TrucksService (linkés au show du même créneau) - Panneau de détails : spectacles + camions du jour sélectionné - Modale de création de spectacle stylisée avec fond et centrage - Positionnement précis des events à la minute dans leur créneau - Auto-scroll vers l'heure courante au chargement - Ligne "maintenant" sur la colonne du jour actuel - Régénération des services OpenAPI (nouveaux noms de types) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+19
-38
@@ -23,15 +23,12 @@ const policy_1 = require("./policy");
|
||||
const timestamp_1 = require("./timestamp");
|
||||
const tlog_1 = require("./tlog");
|
||||
class Verifier {
|
||||
trustMaterial;
|
||||
options;
|
||||
constructor(trustMaterial, options = {}) {
|
||||
this.trustMaterial = trustMaterial;
|
||||
this.options = {
|
||||
ctlogThreshold: options.ctlogThreshold ?? 1,
|
||||
tlogThreshold: options.tlogThreshold ?? 1,
|
||||
timestampThreshold: options.timestampThreshold ?? options.tsaThreshold ?? 1,
|
||||
tsaThreshold: 0,
|
||||
tsaThreshold: options.tsaThreshold ?? 0,
|
||||
};
|
||||
}
|
||||
verify(entity, policy) {
|
||||
@@ -46,22 +43,18 @@ class Verifier {
|
||||
}
|
||||
// Checks that all of the timestamps in the entity are valid and returns them
|
||||
verifyTimestamps(entity) {
|
||||
const timestamps = [];
|
||||
for (const timestamp of entity.timestamps) {
|
||||
let tlogCount = 0;
|
||||
let tsaCount = 0;
|
||||
const timestamps = entity.timestamps.map((timestamp) => {
|
||||
switch (timestamp.$case) {
|
||||
case 'timestamp-authority':
|
||||
timestamps.push((0, timestamp_1.getTSATimestamp)(timestamp.timestamp, entity.signature.signature, this.trustMaterial.timestampAuthorities));
|
||||
break;
|
||||
case 'transparency-log': {
|
||||
const result = (0, timestamp_1.getTLogTimestamp)(timestamp.tlogEntry);
|
||||
/* istanbul ignore else */
|
||||
if (result) {
|
||||
timestamps.push(result);
|
||||
}
|
||||
break;
|
||||
}
|
||||
tsaCount++;
|
||||
return (0, timestamp_1.verifyTSATimestamp)(timestamp.timestamp, entity.signature.signature, this.trustMaterial.timestampAuthorities);
|
||||
case 'transparency-log':
|
||||
tlogCount++;
|
||||
return (0, timestamp_1.verifyTLogTimestamp)(timestamp.tlogEntry, this.trustMaterial.tlogs);
|
||||
}
|
||||
}
|
||||
});
|
||||
// Check for duplicate timestamps
|
||||
if (containsDupes(timestamps)) {
|
||||
throw new error_1.VerificationError({
|
||||
@@ -69,10 +62,16 @@ class Verifier {
|
||||
message: 'duplicate timestamp',
|
||||
});
|
||||
}
|
||||
if (timestamps.length < this.options.timestampThreshold) {
|
||||
if (tlogCount < this.options.tlogThreshold) {
|
||||
throw new error_1.VerificationError({
|
||||
code: 'TIMESTAMP_ERROR',
|
||||
message: `expected ${this.options.timestampThreshold} timestamps, got ${timestamps.length}`,
|
||||
message: `expected ${this.options.tlogThreshold} tlog timestamps, got ${tlogCount}`,
|
||||
});
|
||||
}
|
||||
if (tsaCount < this.options.tsaThreshold) {
|
||||
throw new error_1.VerificationError({
|
||||
code: 'TIMESTAMP_ERROR',
|
||||
message: `expected ${this.options.tsaThreshold} tsa timestamps, got ${tsaCount}`,
|
||||
});
|
||||
}
|
||||
return timestamps.map((t) => t.timestamp);
|
||||
@@ -105,18 +104,7 @@ class Verifier {
|
||||
}
|
||||
// Checks that the tlog entries are valid for the supplied content
|
||||
verifyTLogs({ signature: content, tlogEntries }) {
|
||||
let tlogCount = 0;
|
||||
tlogEntries.forEach((entry) => {
|
||||
tlogCount++;
|
||||
(0, tlog_1.verifyTLogInclusion)(entry, this.trustMaterial.tlogs);
|
||||
(0, tlog_1.verifyTLogBody)(entry, content);
|
||||
});
|
||||
if (tlogCount < this.options.tlogThreshold) {
|
||||
throw new error_1.VerificationError({
|
||||
code: 'TLOG_ERROR',
|
||||
message: `expected ${this.options.tlogThreshold} tlog entries, got ${tlogCount}`,
|
||||
});
|
||||
}
|
||||
tlogEntries.forEach((entry) => (0, tlog_1.verifyTLogBody)(entry, content));
|
||||
}
|
||||
// Checks that the signature is valid for the supplied content
|
||||
verifySignature(entity, signer) {
|
||||
@@ -129,20 +117,13 @@ class Verifier {
|
||||
}
|
||||
verifyPolicy(policy, identity) {
|
||||
// Check the subject alternative name of the signer matches the policy
|
||||
/* istanbul ignore else */
|
||||
if (policy.subjectAlternativeName) {
|
||||
(0, policy_1.verifySubjectAlternativeName)(policy.subjectAlternativeName, identity.subjectAlternativeName);
|
||||
}
|
||||
// Check that the extensions of the signer match the policy
|
||||
/* istanbul ignore else */
|
||||
if (policy.extensions) {
|
||||
(0, policy_1.verifyExtensions)(policy.extensions, identity.extensions);
|
||||
}
|
||||
// Check that the OIDs of the signer match the policy
|
||||
/* istanbul ignore if */
|
||||
if (policy.oids) {
|
||||
(0, policy_1.verifyOIDs)(policy.oids, identity.oids);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.Verifier = Verifier;
|
||||
|
||||
Reference in New Issue
Block a user