@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
83 lines • 11.5 kB
JavaScript
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==