diff --git a/electron/app/locales/en/webui.json b/electron/app/locales/en/webui.json index cc4343661..cef236705 100644 --- a/electron/app/locales/en/webui.json +++ b/electron/app/locales/en/webui.json @@ -1436,6 +1436,8 @@ "validation-helper-ingress-path-message-detail": "The path expression must start with / and not having any white space in it", "validation-helper-ingress-annotation-hint": "Enter a valid annotation name value pair", "validation-helper-ingress-annotation-message-detail": "The annotation ({{annotation}}) must be a name value pair separate by colon", + "validation-helper-proxy-url-hint": "Enter a valid URL with a protocol specified", + "validation-helper-proxy-url-message-detail": "The proxy URL entered does not have a protocol specified.", "validation-error-dialog-default-title": "Unknown action failed", diff --git a/webui/src/js/utils/validation-helper.js b/webui/src/js/utils/validation-helper.js index 7b87c0d7d..24f886e39 100644 --- a/webui/src/js/utils/validation-helper.js +++ b/webui/src/js/utils/validation-helper.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. + * Copyright (c) 2021, 2023, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -32,7 +32,9 @@ function(i18n, Validator, ojvalidationError, RegExpValidator, LengthValidator, N '(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:' + '(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])'; - const ingressPathRegexText = '^\\/\\S*$'; + const ingressPathRegexText = '\\/\\S*'; + + const proxyUrlRegexText = '[a-zA-Z0-9]+:\\/\\/.+'; this.createValidatableObject = (flowName) => { class ValidatableObject { @@ -140,6 +142,17 @@ function(i18n, Validator, ojvalidationError, RegExpValidator, LengthValidator, N ]; }; + this.getProxyUrlValidators = (options) => { + const regExpValidatorOptions = { + pattern: proxyUrlRegexText, + hint: getHintField(options, 'hint', i18n.t('validation-helper-proxy-url-hint')), + messageSummary: getMessageSummary(options), + messageDetail: getMessageDetail(options, 'messageDetail', + i18n.t('validation-helper-proxy-url-message-detail')) + }; + return [ new RegExpValidator(regExpValidatorOptions) ]; + }; + this.getImageTagValidators = (options) => { const regExpValidatorOptions = { pattern: imageReferenceRegexText, diff --git a/webui/src/js/viewModels/network-page.js b/webui/src/js/viewModels/network-page.js index 587566ea3..8b8b54e0e 100644 --- a/webui/src/js/viewModels/network-page.js +++ b/webui/src/js/viewModels/network-page.js @@ -1,11 +1,11 @@ /** * @license - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. + * Copyright (c) 2021, 2023, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ */ -define(['accUtils', 'knockout', 'utils/i18n', 'models/wkt-project', +define(['accUtils', 'knockout', 'utils/i18n', 'models/wkt-project', 'utils/validation-helper', 'ojs/ojinputtext', 'ojs/ojbutton', 'ojs/ojformlayout', 'ojs/ojinputnumber'], -function(accUtils, ko, i18n, project) { +function(accUtils, ko, i18n, project, validationHelper) { function NetworkPageViewModel() { this.connected = () => { @@ -34,6 +34,7 @@ function(accUtils, ko, i18n, project) { return i18n.t(`user-settings-dialog-${labelId}`); }; + this.getProxyUrlValidators = () => validationHelper.getProxyUrlValidators(); this.proxyUrl = ko.observable(); this.bypassProxyHosts = ko.observable(); this.requestTimeoutSeconds = ko.observable(5); diff --git a/webui/src/js/viewModels/user-settings-dialog.js b/webui/src/js/viewModels/user-settings-dialog.js index 734b34ea6..8a0edfa34 100644 --- a/webui/src/js/viewModels/user-settings-dialog.js +++ b/webui/src/js/viewModels/user-settings-dialog.js @@ -1,14 +1,15 @@ /** * @license - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. + * Copyright (c) 2021, 2023, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ */ 'use strict'; -define(['accUtils', 'knockout', 'utils/observable-properties', 'utils/i18n', 'ojs/ojarraydataprovider', 'models/wkt-project', - 'utils/wkt-logger', 'ojs/ojknockout', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', 'ojs/ojdialog', 'ojs/ojformlayout', - 'ojs/ojswitch', 'ojs/ojselectsingle', 'ojs/ojvalidationgroup', 'ojs/ojinputnumber'], -function(accUtils, ko, utils, i18n, ArrayDataProvider, project, wktLogger) { +define(['accUtils', 'knockout', 'utils/observable-properties', 'utils/i18n', 'ojs/ojarraydataprovider', + 'models/wkt-project', 'utils/validation-helper', 'utils/wkt-logger', 'ojs/ojknockout', 'ojs/ojinputtext', + 'ojs/ojlabel', 'ojs/ojbutton', 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojswitch', 'ojs/ojselectsingle', + 'ojs/ojvalidationgroup', 'ojs/ojinputnumber'], +function(accUtils, ko, utils, i18n, ArrayDataProvider, project, validationHelper, wktLogger) { function UserSettingsDialogModel(payload) { this.connected = () => { @@ -45,6 +46,7 @@ function(accUtils, ko, utils, i18n, ArrayDataProvider, project, wktLogger) { return payload.isDevMode; }; + this.getProxyUrlValidators = () => validationHelper.getProxyUrlValidators(); this.proxyUrl = ko.observable(); this.bypassProxyHosts = ko.observable(); this.consoleLogLevel = ko.observable(payload.defaults.level); diff --git a/webui/src/js/views/network-page.html b/webui/src/js/views/network-page.html index 14b49cf9c..f44575432 100644 --- a/webui/src/js/views/network-page.html +++ b/webui/src/js/views/network-page.html @@ -1,5 +1,5 @@
@@ -11,6 +11,7 @@