Changed how colors validation happens: now they will make validation throw if they have an incorrect value

This commit is contained in:
Alexander Cerutti
2021-10-13 00:43:18 +02:00
parent d4062325ac
commit 3f4589141b
2 changed files with 7 additions and 29 deletions

View File

@@ -5,7 +5,7 @@ import * as Signature from "./Signature";
import * as Strings from "./StringsUtils";
import { getModelFolderContents } from "./parser";
import { Stream } from "stream";
import { isValidRGB, processDate } from "./utils";
import { processDate } from "./utils";
/** Exporting for tests specs */
export const propsSymbol = Symbol("props");
@@ -516,30 +516,6 @@ export default class PKPass extends Bundle {
) {
const fileNames = Object.keys(this[filesSymbol]);
/**
* Filtering colors props that have an
* invalid RGB value
*/
const passColors = [
"backgroundColor",
"foregroundColor",
"labelColor",
] as Array<keyof Schemas.PassColors>;
for (let i = 0; i < passColors.length; i++) {
const colorProperty = passColors[i];
const colorInProps = this[propsSymbol][colorProperty];
if (colorInProps && !isValidRGB(colorInProps)) {
console.warn(
`'${colorProperty}' property has been removed from pass.json as it has not a valid RGB-string value.`,
);
delete this[propsSymbol][colorProperty];
}
}
const passJson = Buffer.from(JSON.stringify(this[propsSymbol]));
super.addBuffer("pass.json", passJson);

View File

@@ -14,11 +14,13 @@ import { Barcode } from "./Barcodes";
import { Location } from "./Location";
import { Beacon } from "./Beacons";
import { NFC } from "./NFC";
import { Field } from "./PassFieldContent";
import { PassFields, TransitType } from "./PassFields";
import { Semantics } from "./SemanticTags";
import { CertificatesSchema } from "./Certificates";
const RGB_COLOR_REGEX =
/rgb\(\s*(?:[01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\s*,\s*(?:[01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\s*,\s*(?:[01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\s*\)/;
export interface FileBuffers {
[key: string]: Buffer;
}
@@ -128,10 +130,10 @@ export const OverridablePassProps = Joi.object<OverridablePassProps>({
groupingIdentifier: Joi.string(),
suppressStripShine: Joi.boolean(),
maxDistance: Joi.number().positive(),
labelColor: Joi.string().min(10).max(16),
authenticationToken: Joi.string().min(16),
backgroundColor: Joi.string().min(10).max(16),
foregroundColor: Joi.string().min(10).max(16),
labelColor: Joi.string().regex(RGB_COLOR_REGEX),
backgroundColor: Joi.string().regex(RGB_COLOR_REGEX),
foregroundColor: Joi.string().regex(RGB_COLOR_REGEX),
associatedStoreIdentifiers: Joi.array().items(Joi.number()),
userInfo: Joi.alternatives(Joi.object().unknown(), Joi.array()),
// parsing url as set of words and nums followed by dots, optional port and any possible path after