1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.opensaml.util;
18
19 import java.util.HashMap;
20 import java.util.Map;
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public final class SimpleURLCanonicalizer {
37
38
39 private static Map<String, Integer> schemePortMap = new HashMap<String, Integer>();
40
41
42 private SimpleURLCanonicalizer() {}
43
44
45
46
47
48
49
50 public static void registerSchemePortMapping(String scheme, Integer port) {
51 if (scheme == null || port == null) {
52 throw new IllegalArgumentException("Scheme and port may not be null");
53 }
54 schemePortMap.put(scheme.toLowerCase(), port);
55 }
56
57
58
59
60
61
62 public static void deregisterSchemePortMapping(String scheme) {
63 if (scheme == null) {
64 throw new IllegalArgumentException("Scheme may not be null");
65 }
66 schemePortMap.remove(scheme.toLowerCase());
67 }
68
69
70
71
72
73
74
75 public static Integer getRegisteredPort(String scheme) {
76 return schemePortMap.get(scheme.toLowerCase());
77 }
78
79
80
81
82
83
84
85 public static String canonicalize(String url) {
86 URLBuilder urlBuilder = new URLBuilder(url);
87 canonicalize(urlBuilder);
88 return urlBuilder.buildURL();
89 }
90
91
92
93
94
95
96 private static void canonicalize(URLBuilder url) {
97 if (url.getScheme() != null) {
98 url.setScheme(url.getScheme().toLowerCase());
99
100 String scheme = url.getScheme();
101 Integer port = getRegisteredPort(scheme);
102 if (port != null && port == url.getPort()) {
103 url.setPort(0);
104 }
105 }
106
107 if (url.getHost() != null) {
108 url.setHost(url.getHost().toLowerCase());
109 }
110 }
111
112 static {
113 registerSchemePortMapping("ftp", 23);
114 registerSchemePortMapping("http", 80);
115 registerSchemePortMapping("https", 443);
116 }
117
118 }