fix(ui): elastic config host validation
This commit is contained in:
parent
1fbff97660
commit
133cbc049d
3 changed files with 43 additions and 4 deletions
|
|
@ -1,8 +1,8 @@
|
||||||
import Record from 'Types/Record';
|
import Record from 'Types/Record';
|
||||||
import { validateURL } from 'App/validate'
|
import { validateURL } from 'App/validate'
|
||||||
|
|
||||||
export const API_KEY_ID_LENGTH = 20;
|
export const API_KEY_ID_LENGTH = 5;
|
||||||
export const API_KEY_LENGTH = 22;
|
export const API_KEY_LENGTH = 5;
|
||||||
|
|
||||||
export default Record({
|
export default Record({
|
||||||
projectId: undefined,
|
projectId: undefined,
|
||||||
|
|
@ -20,7 +20,7 @@ export default Record({
|
||||||
}),
|
}),
|
||||||
methods: {
|
methods: {
|
||||||
validateKeys() {
|
validateKeys() {
|
||||||
return this.apiKeyId.length >= API_KEY_ID_LENGTH && this.apiKey.length >= API_KEY_LENGTH && validateURL(this.host);
|
return this.apiKeyId.length > API_KEY_ID_LENGTH && this.apiKey.length > API_KEY_LENGTH && validateURL(this.host);
|
||||||
},
|
},
|
||||||
validate() {
|
validate() {
|
||||||
return this.host !== '' && this.apiKeyId !== '' && this.apiKey !== '' && this.indexes !== '' && !!this.port &&
|
return this.host !== '' && this.apiKeyId !== '' && this.apiKey !== '' && this.indexes !== '' && !!this.port &&
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,9 @@ export function validateIP(value) {
|
||||||
|
|
||||||
export function validateURL(value) {
|
export function validateURL(value) {
|
||||||
if (typeof value !== 'string') return false;
|
if (typeof value !== 'string') return false;
|
||||||
return /^(http|https):\/\/(?:www\.)?[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}(\/\S*)?$/i.test(value);
|
const urlRegex = /^(http|https):\/\/(?:www\.)?[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}(\/\S*)?$/i;
|
||||||
|
const ipRegex = /^(http|https):\/\/(?:localhost|(\d{1,3}\.){3}\d{1,3})(:\d+)?(\/\S*)?$/i;
|
||||||
|
return urlRegex.test(value) || ipRegex.test(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
function escapeRegexp(s) {
|
function escapeRegexp(s) {
|
||||||
|
|
|
||||||
37
frontend/app/validate.test.js
Normal file
37
frontend/app/validate.test.js
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
import { validateURL } from './validate';
|
||||||
|
|
||||||
|
describe('validateURL', () => {
|
||||||
|
test('validates standard URLs', () => {
|
||||||
|
expect(validateURL('http://www.example.com')).toBeTruthy();
|
||||||
|
expect(validateURL('https://example.com')).toBeTruthy();
|
||||||
|
expect(validateURL('https://sub.example.com/path')).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('validates localhost URLs', () => {
|
||||||
|
expect(validateURL('http://localhost')).toBeTruthy();
|
||||||
|
expect(validateURL('https://localhost:8080')).toBeTruthy();
|
||||||
|
expect(validateURL('http://localhost/path')).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('validates IP address URLs', () => {
|
||||||
|
expect(validateURL('http://127.0.0.1')).toBeTruthy();
|
||||||
|
expect(validateURL('https://192.168.1.1')).toBeTruthy();
|
||||||
|
expect(validateURL('http://192.168.1.1:3000/path')).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('rejects invalid URLs', () => {
|
||||||
|
expect(validateURL('justastring')).toBeFalsy();
|
||||||
|
expect(validateURL('http://')).toBeFalsy();
|
||||||
|
expect(validateURL('https://.com')).toBeFalsy();
|
||||||
|
expect(validateURL('256.256.256.256')).toBeFalsy(); // Invalid IP
|
||||||
|
expect(validateURL('http://example')).toBeFalsy(); // Missing TLD
|
||||||
|
});
|
||||||
|
|
||||||
|
test('rejects non-string inputs', () => {
|
||||||
|
expect(validateURL(12345)).toBeFalsy();
|
||||||
|
expect(validateURL({ url: 'http://example.com' })).toBeFalsy();
|
||||||
|
expect(validateURL(['http://example.com'])).toBeFalsy();
|
||||||
|
expect(validateURL(null)).toBeFalsy();
|
||||||
|
expect(validateURL(undefined)).toBeFalsy();
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
Add table
Reference in a new issue