validators.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. export function isValidCIDR(cidr: string): boolean {
  2. // Match CIDR pattern (e.g., "192.168.0.0/24")
  3. const cidrPattern =
  4. /^([0-9]{1,3}\.){3}[0-9]{1,3}\/([0-9]|[1-2][0-9]|3[0-2])$/;
  5. if (!cidrPattern.test(cidr)) {
  6. return false;
  7. }
  8. // Validate IP address part
  9. const ipPart = cidr.split("/")[0];
  10. const octets = ipPart.split(".");
  11. return octets.every((octet) => {
  12. const num = parseInt(octet, 10);
  13. return num >= 0 && num <= 255;
  14. });
  15. }
  16. export function isValidIP(ip: string): boolean {
  17. const ipPattern = /^([0-9]{1,3}\.){3}[0-9]{1,3}$/;
  18. if (!ipPattern.test(ip)) {
  19. return false;
  20. }
  21. const octets = ip.split(".");
  22. return octets.every((octet) => {
  23. const num = parseInt(octet, 10);
  24. return num >= 0 && num <= 255;
  25. });
  26. }
  27. export function isValidUrlGlobPattern(pattern: string): boolean {
  28. // Remove leading slash if present
  29. pattern = pattern.startsWith("/") ? pattern.slice(1) : pattern;
  30. // Empty string is not valid
  31. if (!pattern) {
  32. return false;
  33. }
  34. // Split path into segments
  35. const segments = pattern.split("/");
  36. // Check each segment
  37. for (let i = 0; i < segments.length; i++) {
  38. const segment = segments[i];
  39. // Empty segments are not allowed (double slashes)
  40. if (!segment && i !== segments.length - 1) {
  41. return false;
  42. }
  43. // If segment contains *, it must be exactly *
  44. if (segment.includes("*") && segment !== "*") {
  45. return false;
  46. }
  47. // Check for invalid characters
  48. if (!/^[a-zA-Z0-9_*-]*$/.test(segment)) {
  49. return false;
  50. }
  51. }
  52. return true;
  53. }