1   package com.atlassian.user.impl.ldap.properties;
2   
3   public class DefaultLdapConnectionProperties implements LdapConnectionProperties
4   {
5       public static final int DEFAULT_LDAP_PORT = 389;
6       public static final int DEFAULT_BATCH_SIZE = 1000;
7       public static final int DEFAULT_CONNECT_TIMEOUT_MILLIS = 30000;
8       public static final int DEFAULT_READ_TIMEOUT_MILLIS = 60000;
9       public static final String DEFAULT_AUTHENTICATION = "simple";
10  
11      private static final String LDAPS_PROTOCOL = "ldaps";
12      private static final String LDAP_PROTOCOL = "ldap";
13  
14      private String securityPrincipal;
15      private String securityCredential;
16      private String host;
17      private int port = DEFAULT_LDAP_PORT;
18      private String jndiInitialContextFactoryIdentifier;
19      private int searchBatchSize = DEFAULT_BATCH_SIZE;
20      private String securityAuthentication = DEFAULT_AUTHENTICATION;
21      private String securityProtocol;
22      private boolean isPoolingOn = true;
23      private int connectTimeoutMillis = DEFAULT_CONNECT_TIMEOUT_MILLIS;
24      private int readTimeoutMillis = DEFAULT_READ_TIMEOUT_MILLIS;
25  
26      /**
27       * Overrides host and port, if present.
28       * @see #getProviderURL()
29       */
30      private String providerURL;
31  
32      public String getSecurityPrincipal()
33      {
34          return securityPrincipal;
35      }
36  
37      public String getSecurityCredential()
38      {
39          return securityCredential;
40      }
41  
42      /**
43       * If the provider URL has been set explicitly by {@link #setProviderURL(String)} returns that value,
44       * otherwise returns a concatenation of protocol, host and port in the form 'ldaps://localhost:389'.
45       * 
46       * @return the configured provider URL
47       */
48      public String getProviderURL()
49      {
50          if (providerURL != null)
51              return providerURL;
52          return getConnectionProtocol() + "://" + host + ":" + port;
53      }
54  
55      private String getConnectionProtocol()
56      {
57          return isSslEnabled() ? LDAPS_PROTOCOL : LDAP_PROTOCOL;
58      }
59  
60      private boolean isSslEnabled()
61      {
62          return securityProtocol != null && securityProtocol.toLowerCase().indexOf("ssl") != -1;
63      }
64  
65      public String getJNDIInitialContextFactoryIdentifier()
66      {
67          return jndiInitialContextFactoryIdentifier;
68      }
69  
70      public int getSearchBatchSize()
71      {
72          return searchBatchSize;
73      }
74  
75      public String getSecurityAuthentication()
76      {
77          return securityAuthentication;
78      }
79  
80      public String getSecurityProtocol()
81      {
82          return securityProtocol;
83      }
84  
85      public boolean isPoolingOn()
86      {
87          return isPoolingOn;
88      }
89  
90      public int getConnectTimeoutMillis()
91      {
92          return connectTimeoutMillis;
93      }
94  
95      public int getReadTimeoutMillis()
96      {
97          return readTimeoutMillis;
98      }
99  
100     public void setSecurityPrincipal(String securityPrincipal)
101     {
102         this.securityPrincipal = securityPrincipal;
103     }
104 
105     public void setSecurityCredential(String securityCredential)
106     {
107         this.securityCredential = securityCredential;
108     }
109 
110     public void setHost(String host)
111     {
112         this.host = host;
113     }
114 
115     public void setPort(int port)
116     {
117         this.port = port;
118     }
119 
120     public void setJndiInitialContextFactoryIdentifier(String jndiInitialContextFactoryIdentifier)
121     {
122         this.jndiInitialContextFactoryIdentifier = jndiInitialContextFactoryIdentifier;
123     }
124 
125     public void setSearchBatchSize(int searchBatchSize)
126     {
127         this.searchBatchSize = searchBatchSize;
128     }
129 
130     public void setSecurityAuthentication(String securityAuthentication)
131     {
132         this.securityAuthentication = securityAuthentication;
133     }
134 
135     public void setSecurityProtocol(String securityProtocol)
136     {
137         this.securityProtocol = securityProtocol;
138     }
139 
140     public void setPoolingOn(boolean poolingOn)
141     {
142         isPoolingOn = poolingOn;
143     }
144 
145     public void setProviderURL(String providerURL)
146     {
147         this.providerURL = providerURL;
148     }
149 
150     public void setConnectTimeoutMillis(int connectTimeoutMillis)
151     {
152         this.connectTimeoutMillis = connectTimeoutMillis;
153     }
154 
155     public void setReadTimeoutMillis(int readTimeoutMillis)
156     {
157         this.readTimeoutMillis = readTimeoutMillis;
158     }
159 
160     public String toString()
161     {
162         return "{ url: " + getProviderURL() + ", " +
163             "authentication: '" + getSecurityAuthentication() + "', " +
164             "protocol: '" + getSecurityProtocol() + "', " +
165             "poolingOn: '" + isPoolingOn() + "' }";
166     }
167 }