1 package com.atlassian.security.auth.trustedapps;
2
3 import java.util.Collections;
4 import java.util.HashSet;
5 import java.util.Set;
6
7
8
9
10
11 public final class RequestConditions
12 {
13 private final long certificateTimeout;
14 private final Set<String> urlPatterns;
15 private final Set<String> ipPatterns;
16
17 private RequestConditions(final long certificateTimeout, final Set<String> ipPatterns, final Set<String> urlPatterns)
18 {
19 this.certificateTimeout = certificateTimeout;
20 this.ipPatterns = Collections.unmodifiableSet(new HashSet<String>(ipPatterns));
21 this.urlPatterns = Collections.unmodifiableSet(new HashSet<String>(urlPatterns));
22 }
23
24 public static final class RulesBuilder
25 {
26 private long certificateTimeout = 0L;
27 private Set<String> urlPatterns = new HashSet<String>();
28 private Set<String> ipPatterns = new HashSet<String>();
29
30 private RulesBuilder() {}
31
32 public RulesBuilder addURLPattern(final String... pattern)
33 {
34 for (final String p : pattern)
35 {
36 urlPatterns.add(p);
37 }
38 return this;
39 }
40
41 public RulesBuilder addIPPattern(final String... pattern) throws IPAddressFormatException
42 {
43 for (final String p : pattern)
44 {
45 AtlassianIPMatcher.parsePatternString(p);
46 ipPatterns.add(p);
47 }
48 return this;
49 }
50
51 public RulesBuilder setCertificateTimeout(final long timeout)
52 {
53 if (timeout < 0L)
54 {
55 throw new IllegalArgumentException("timeout must be >= 0");
56 }
57 else
58 {
59 certificateTimeout = timeout;
60 return this;
61 }
62 }
63
64 public RequestConditions build()
65 {
66 return new RequestConditions(certificateTimeout, ipPatterns, urlPatterns);
67 }
68 }
69
70 public static RulesBuilder builder()
71 {
72 return new RulesBuilder();
73 }
74
75 public long getCertificateTimeout()
76 {
77 return certificateTimeout;
78 }
79
80 public URLMatcher getURLMatcher()
81 {
82 return new DefaultURLMatcher(urlPatterns);
83 }
84
85 public IPMatcher getIPMatcher()
86 {
87 return new AtlassianIPMatcher(ipPatterns);
88 }
89
90 public Iterable<String> getURLPatterns()
91 {
92 return urlPatterns;
93 }
94
95 public Iterable<String> getIPPatterns()
96 {
97 return ipPatterns;
98 }
99 }