UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

83 lines 11.5 kB
import { Directive, forwardRef, Input } from '@angular/core'; import { FormValidatorBase } from './base-validator'; import { SME_VALIDATORS } from './sme-validator'; import * as i0 from "@angular/core"; /** * Provider for the FormFieldValidatorDirective directive */ export const INPUT_VALIDATOR = { provide: SME_VALIDATORS, useExisting: forwardRef(() => InputValidatorDirective), multi: true }; /** * A Directive that marks a field as invalid if it contains standard invalid characters. Primarily used to prevent * html tags for security reasons. */ export class InputValidatorDirective extends FormValidatorBase { /** * Instantiates a new instance of InputValidatorDirective */ constructor() { super(); /** * Regex to detect invalid characters. Does not allow: * - backslash (\) * - slash mark (/) * - asterisk (*) * - question mark (?) * - single quotation mark (') * - double quotation mark (") * - less than sign (<) * - greater than sign (>) * - vertical bar (|) */ this.defaultInvalidCharacters = new RegExp(/(\\|\/|\*|\?|'|"|<|>|\|)/, 'i'); this.invalidCharacters = this.defaultInvalidCharacters; } /** * Implementation of Validator interface. * Validates the value of the field attached to this control to be a valid input * @param c The FormControl attached to this element * @return null when valid, otherwise returns a validation object */ validate(c) { const alerts = super.validate(c) || {}; // Convert to string - if value is an array, will be auto-converted, but array characters ('[', ',', ']') are valid, so won't // impact the validation. const value = c.value; // dont check for required here. The field could be optional in some forms // if there is no value, then just skip checking if (!value) { return this.alertsOrNull(alerts); } const strings = MsftSme.self().Resources.strings; if (this.invalidCharacters.test(value)) { if (!this.errorMessage) { // change default error message depending on whether regex was provided to validate against this.errorMessage = this.defaultInvalidCharacters.source === this.invalidCharacters.source ? strings.MsftSmeShell.Angular.Common.Form.Validation.Input.DefaultRegex.invalidCharacters : strings.MsftSmeShell.Angular.Common.Form.Validation.Input.UnknownRegex.invalidCharacters; } alerts['smeInput.noInvalidCharacters'] = { message: this.errorMessage }; } return this.alertsOrNull(alerts); } } /** @nocollapse */ InputValidatorDirective.ɵfac = function InputValidatorDirective_Factory(t) { return new (t || InputValidatorDirective)(); }; /** @nocollapse */ InputValidatorDirective.ɵdir = /** @pureOrBreakMyCode */ i0.ɵɵdefineDirective({ type: InputValidatorDirective, selectors: [["sme-form-field", "smeInputValidation", "", "formControlName", ""], ["sme-form-field", "smeInputValidation", "", "formControl", ""], ["sme-form-field", "smeInputValidation", "", "ngModel", ""]], inputs: { invalidCharacters: "invalidCharacters", errorMessage: "errorMessage" }, features: [i0.ɵɵProvidersFeature([INPUT_VALIDATOR]), i0.ɵɵInheritDefinitionFeature] }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InputValidatorDirective, [{ type: Directive, args: [{ // eslint-disable-next-line max-len selector: 'sme-form-field[smeInputValidation][formControlName],sme-form-field[smeInputValidation][formControl],sme-form-field[smeInputValidation][ngModel]', providers: [INPUT_VALIDATOR] }] }], function () { return []; }, { invalidCharacters: [{ type: Input }], errorMessage: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdmFsaWRhdG9yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2Zvcm0vdmFsaWRhdG9ycy9pbnB1dC12YWxpZGF0b3IuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFJN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUVqRDs7R0FFRztBQUNGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBbUI7SUFDNUMsT0FBTyxFQUFFLGNBQWM7SUFDdkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztJQUN0RCxLQUFLLEVBQUUsSUFBSTtDQUNkLENBQUM7QUFFRjs7O0dBR0c7QUFNSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsaUJBQWlCO0lBcUIxRDs7T0FFRztJQUNIO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUF4Qlo7Ozs7Ozs7Ozs7O1dBV0c7UUFDYyw2QkFBd0IsR0FBVyxJQUFJLE1BQU0sQ0FBQywwQkFBMEIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUd6RixzQkFBaUIsR0FBVyxJQUFJLENBQUMsd0JBQXdCLENBQUM7SUFVakUsQ0FBQztJQUVGOzs7OztRQUtJO0lBQ0ksUUFBUSxDQUFDLENBQWM7UUFDMUIsTUFBTSxNQUFNLEdBQXFCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pELDZIQUE2SDtRQUM3SCx5QkFBeUI7UUFDekIsTUFBTSxLQUFLLEdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUU5QiwwRUFBMEU7UUFDMUUsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEM7UUFFRCxNQUFNLE9BQU8sR0FBWSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUUxRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3BCLDJGQUEyRjtnQkFDM0YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDeEYsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxpQkFBaUI7b0JBQ3hGLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO2FBQ2xHO1lBRUQsTUFBTSxDQUFDLDhCQUE4QixDQUFDLEdBQUc7Z0JBQ3JDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWTthQUM3QixDQUFDO1NBQ0w7UUFFRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQzs7aUhBOURRLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLHFVQUZyQixDQUFDLGVBQWUsQ0FBQzt1RkFFbkIsdUJBQXVCO2NBTGxDLFNBQVM7ZUFBQztnQkFDUixtQ0FBbUM7Z0JBQ25DLFFBQVEsRUFBRSxpSkFBaUo7Z0JBQzNKLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQzthQUMvQjtzQ0FpQlUsaUJBQWlCO2tCQUR2QixLQUFLO1lBSUMsWUFBWTtrQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgZm9yd2FyZFJlZiwgSW5wdXQsIFN0YXRpY1Byb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnRzIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgRm9ybVZhbGlkYXRvckJhc2UgfSBmcm9tICcuL2Jhc2UtdmFsaWRhdG9yJztcclxuaW1wb3J0IHsgU01FX1ZBTElEQVRPUlMgfSBmcm9tICcuL3NtZS12YWxpZGF0b3InO1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVyIGZvciB0aGUgRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlIGRpcmVjdGl2ZVxyXG4gKi9cclxuIGV4cG9ydCBjb25zdCBJTlBVVF9WQUxJREFUT1I6IFN0YXRpY1Byb3ZpZGVyID0ge1xyXG4gICAgcHJvdmlkZTogU01FX1ZBTElEQVRPUlMsXHJcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dFZhbGlkYXRvckRpcmVjdGl2ZSksXHJcbiAgICBtdWx0aTogdHJ1ZVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEEgRGlyZWN0aXZlIHRoYXQgbWFya3MgYSBmaWVsZCBhcyBpbnZhbGlkIGlmIGl0IGNvbnRhaW5zIHN0YW5kYXJkIGludmFsaWQgY2hhcmFjdGVycy4gUHJpbWFyaWx5IHVzZWQgdG8gcHJldmVudFxyXG4gKiBodG1sIHRhZ3MgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXHJcbiAqL1xyXG4gQERpcmVjdGl2ZSh7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZFtzbWVJbnB1dFZhbGlkYXRpb25dW2Zvcm1Db250cm9sTmFtZV0sc21lLWZvcm0tZmllbGRbc21lSW5wdXRWYWxpZGF0aW9uXVtmb3JtQ29udHJvbF0sc21lLWZvcm0tZmllbGRbc21lSW5wdXRWYWxpZGF0aW9uXVtuZ01vZGVsXScsXHJcbiAgICBwcm92aWRlcnM6IFtJTlBVVF9WQUxJREFUT1JdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dFZhbGlkYXRvckRpcmVjdGl2ZSBleHRlbmRzIEZvcm1WYWxpZGF0b3JCYXNlIHtcclxuICAgIC8qKlxyXG4gICAgICogUmVnZXggdG8gZGV0ZWN0IGludmFsaWQgY2hhcmFjdGVycy4gRG9lcyBub3QgYWxsb3c6XHJcbiAgICAgKiAgLSBiYWNrc2xhc2ggKFxcKVxyXG4gICAgICogIC0gc2xhc2ggbWFyayAoLylcclxuICAgICAqICAtIGFzdGVyaXNrICgqKVxyXG4gICAgICogIC0gcXVlc3Rpb24gbWFyayAoPylcclxuICAgICAqICAtIHNpbmdsZSBxdW90YXRpb24gbWFyayAoJylcclxuICAgICAqICAtIGRvdWJsZSBxdW90YXRpb24gbWFyayAoXCIpXHJcbiAgICAgKiAgLSBsZXNzIHRoYW4gc2lnbiAoPClcclxuICAgICAqICAtIGdyZWF0ZXIgdGhhbiBzaWduICg+KVxyXG4gICAgICogIC0gdmVydGljYWwgYmFyICh8KVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRJbnZhbGlkQ2hhcmFjdGVyczogUmVnRXhwID0gbmV3IFJlZ0V4cCgvKFxcXFx8XFwvfFxcKnxcXD98J3xcInw8fD58XFx8KS8sICdpJyk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpbnZhbGlkQ2hhcmFjdGVyczogUmVnRXhwID0gdGhpcy5kZWZhdWx0SW52YWxpZENoYXJhY3RlcnM7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluc3RhbnRpYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBJbnB1dFZhbGlkYXRvckRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBWYWxpZGF0b3IgaW50ZXJmYWNlLlxyXG4gICAgICogVmFsaWRhdGVzIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgYXR0YWNoZWQgdG8gdGhpcyBjb250cm9sIHRvIGJlIGEgdmFsaWQgaW5wdXRcclxuICAgICAqIEBwYXJhbSBjIFRoZSBGb3JtQ29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGVsZW1lbnRcclxuICAgICAqIEByZXR1cm4gbnVsbCB3aGVuIHZhbGlkLCBvdGhlcndpc2UgcmV0dXJucyBhIHZhbGlkYXRpb24gb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBhbGVydHM6IFZhbGlkYXRpb25BbGVydHMgPSBzdXBlci52YWxpZGF0ZShjKSB8fCB7fTtcclxuICAgICAgICAvLyBDb252ZXJ0IHRvIHN0cmluZyAtIGlmIHZhbHVlIGlzIGFuIGFycmF5LCB3aWxsIGJlIGF1dG8tY29udmVydGVkLCBidXQgYXJyYXkgY2hhcmFjdGVycyAoJ1snLCAnLCcsICddJykgYXJlIHZhbGlkLCBzbyB3b24ndFxyXG4gICAgICAgIC8vIGltcGFjdCB0aGUgdmFsaWRhdGlvbi5cclxuICAgICAgICBjb25zdCB2YWx1ZTogc3RyaW5nID0gYy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gZG9udCBjaGVjayBmb3IgcmVxdWlyZWQgaGVyZS4gVGhlIGZpZWxkIGNvdWxkIGJlIG9wdGlvbmFsIGluIHNvbWUgZm9ybXNcclxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyB2YWx1ZSwgdGhlbiBqdXN0IHNraXAgY2hlY2tpbmdcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsZXJ0c09yTnVsbChhbGVydHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkQ2hhcmFjdGVycy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgZGVmYXVsdCBlcnJvciBtZXNzYWdlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHJlZ2V4IHdhcyBwcm92aWRlZCB0byB2YWxpZGF0ZSBhZ2FpbnN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZGVmYXVsdEludmFsaWRDaGFyYWN0ZXJzLnNvdXJjZSA9PT0gdGhpcy5pbnZhbGlkQ2hhcmFjdGVycy5zb3VyY2UgP1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLkZvcm0uVmFsaWRhdGlvbi5JbnB1dC5EZWZhdWx0UmVnZXguaW52YWxpZENoYXJhY3RlcnNcclxuICAgICAgICAgICAgICAgICAgICA6IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLkZvcm0uVmFsaWRhdGlvbi5JbnB1dC5Vbmtub3duUmVnZXguaW52YWxpZENoYXJhY3RlcnM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFsZXJ0c1snc21lSW5wdXQubm9JbnZhbGlkQ2hhcmFjdGVycyddID0ge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5lcnJvck1lc3NhZ2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0c09yTnVsbChhbGVydHMpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==