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    * @since v2.2
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  }