styleUrls: ['./rgw-config-modal.component.scss']
})
export class RgwConfigModalComponent implements OnInit {
- readonly vaultAddress = /^((https?:\/\/)|(www.))(?:([a-zA-Z]+)|(\d+\.\d+.\d+.\d+)):\d{4}$/;
-
kmsProviders: string[];
configForm: CdFormGroup;
createForm() {
this.configForm = this.formBuilder.group({
- addr: [
- null,
- [
- Validators.required,
- CdValidators.custom('vaultPattern', (value: string) => {
- if (_.isEmpty(value)) {
- return false;
- }
- return !this.vaultAddress.test(value);
- })
- ]
- ],
+ addr: [null, [CdValidators.urlWithProtocolOption(false), Validators.required]],
kms_provider: ['vault', Validators.required],
encryptionType: ['kms', Validators.required],
auth: [
* Validator function to validate endpoints, allowing FQDN, IPv4, and IPv6 addresses with ports.
* Accepts multiple endpoints separated by commas.
*/
+
static url(control: AbstractControl): ValidationErrors | null {
+ return CdValidators.urlInternal(control, true);
+ }
+
+ static urlWithProtocolOption(require_protocol: boolean) {
+ return (control: AbstractControl): ValidationErrors | null =>
+ CdValidators.urlInternal(control, require_protocol);
+ }
+
+ private static urlInternal(
+ control: AbstractControl,
+ require_protocol: boolean
+ ): ValidationErrors | null {
const value = control.value;
if (_.isEmpty(value)) {
const invalidUrls = urls.filter(
(url: string) =>
!validator.isURL(url, {
- require_protocol: true,
+ require_protocol: require_protocol,
allow_underscores: true,
require_tld: false
}) && !validator.isIP(url)