1 package org.apache.maven.reporting;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.commons.validator.routines.RegexValidator;
23 import org.apache.commons.validator.routines.UrlValidator;
24
25
26
27
28
29
30
31
32
33 final class UrlValidationUtil
34 {
35
36 private static final String LETTERS_DIGITS = "[a-zA-Z0-9]";
37
38 private static final String LETTERS_DIGITS_HYPHEN = "[a-zA-Z0-9\\-]";
39
40 private static final String LABEL = LETTERS_DIGITS + "(" + LETTERS_DIGITS_HYPHEN + "{0,61}" + LETTERS_DIGITS + ")?";
41
42 private static final String OPTIONAL_PORT = "(:(([1-5]\\d{1,4})|([1-9]\\d{1,3})))?";
43
44 private static final String AUTHORITY_REGEX = LABEL + "(\\." + LABEL + ")*\\.local\\.?" + OPTIONAL_PORT;
45
46 private static final String[] SCHEMES = { "http", "https" };
47
48 private UrlValidationUtil()
49 {
50 throw new RuntimeException( "Instantiation of " + UrlValidationUtil.class.getName() + " is not allowed." );
51 }
52
53 static boolean isValidUrl( final String url )
54 {
55 return isValidPublicUrl( url ) || isValidLocalUrl( url );
56 }
57
58 private static boolean isValidPublicUrl( final String url )
59 {
60 UrlValidator validator = configurePublicUrlValidator();
61 return validator.isValid( url );
62 }
63
64 private static UrlValidator configurePublicUrlValidator()
65 {
66 return new UrlValidator( SCHEMES );
67 }
68
69 private static boolean isValidLocalUrl( final String url )
70 {
71 UrlValidator validator = configureLocalUrlValidator();
72 return validator.isValid( url );
73 }
74
75 private static UrlValidator configureLocalUrlValidator()
76 {
77 RegexValidator authorityValidator = configureLocalAuthorityValidator();
78 return new UrlValidator( SCHEMES, authorityValidator, UrlValidator.ALLOW_LOCAL_URLS );
79 }
80
81
82 static RegexValidator configureLocalAuthorityValidator()
83 {
84 return new RegexValidator( AUTHORITY_REGEX, false );
85 }
86
87 }