From 0d15cbf2940ea7dd3dce9dba1a0d144d3e8984fe Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Wed, 24 Jul 2019 13:57:39 +0200 Subject: [PATCH] extreact ldap cofig --- .../de/jalin/ldapadmin/ldap/LDAPConfig.java | 108 ++++++++++++++++++ .../ldapadmin/web/AbstractLDAPServlet.java | 15 ++- .../ldapadmin/web/NaiveTrustManager.java | 50 -------- .../ldapadmin/web/ResetPasswordServlet.java | 11 +- src/main/resources/config.properties | 1 + src/main/webapp/WEB-INF/web.xml | 4 - 6 files changed, 122 insertions(+), 67 deletions(-) create mode 100644 src/main/java/de/jalin/ldapadmin/ldap/LDAPConfig.java delete mode 100644 src/main/java/de/jalin/ldapadmin/web/NaiveTrustManager.java diff --git a/src/main/java/de/jalin/ldapadmin/ldap/LDAPConfig.java b/src/main/java/de/jalin/ldapadmin/ldap/LDAPConfig.java new file mode 100644 index 0000000..ae7923b --- /dev/null +++ b/src/main/java/de/jalin/ldapadmin/ldap/LDAPConfig.java @@ -0,0 +1,108 @@ +package de.jalin.ldapadmin.ldap; + +import de.jalin.ldapadmin.server.LDAPUriParser; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class LDAPConfig { + + private static LDAPConfig config = null; + + private String ldapProviderUrl; + private String ldapSecurityPrincipal; + private String ldapSecurityPassword; + private String ldapDistinguishedName; + private String ldapHost; + private String ldapPort; + private boolean ldapUseTLS; + private String smtpFromAddress; + private String smtpHost; + private String smtpPort; + + private LDAPConfig() { + ldapProviderUrl = "ldap://localhost:10389/dc=domain,dc=example,dc=com"; + ldapDistinguishedName = "dc=domain,dc=example,dc=com"; + ldapHost = "localhost"; + ldapPort = "10389"; + ldapUseTLS = false; + ldapSecurityPrincipal = "uid=admin,ou=system"; + ldapSecurityPassword = "secret"; + smtpHost = "localhost"; + smtpPort = "25"; + smtpFromAddress = "nobody@example.com"; + try { + final Properties props = loadConfig(); + ldapProviderUrl = props.getProperty("provider.url", ldapProviderUrl); + ldapSecurityPrincipal = props.getProperty("security.principal", ldapSecurityPrincipal); + ldapSecurityPassword = props.getProperty("security.password", ldapSecurityPassword); + smtpHost = props.getProperty("smtp.host", smtpHost); + smtpPort = props.getProperty("smtp.port", smtpPort); + smtpFromAddress = props.getProperty("smtp.from", smtpFromAddress); + final LDAPUriParser uriParser = new LDAPUriParser(ldapProviderUrl); + ldapDistinguishedName = uriParser.getDn(); + ldapHost = uriParser.getHost(); + ldapPort = uriParser.getPort(); + ldapUseTLS = uriParser.isUseTLS(); + } catch (IOException ex) { + Logger.getLogger(LDAPConfig.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public static LDAPConfig getConfig() { + if (config == null) { + config = new LDAPConfig(); + } + return config; + } + + public String getLdapProviderUrl() { + return ldapProviderUrl; + } + + public String getLdapSecurityPrincipal() { + return ldapSecurityPrincipal; + } + + public String getLdapSecurityPassword() { + return ldapSecurityPassword; + } + + public String getLdapDistinguishedName() { + return ldapDistinguishedName; + } + + public String getLdapHost() { + return ldapHost; + } + + public String getLdapPort() { + return ldapPort; + } + + public boolean isLdapUseTLS() { + return ldapUseTLS; + } + + public String getSmtpHost() { + return smtpHost; + } + + public String getSmtpPort() { + return smtpPort; + } + + public String getSmtpFromAddress() { + return smtpFromAddress; + } + + private Properties loadConfig() throws IOException { + final InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("config.properties"); + Properties config = new Properties(); + config.load(inputStream); + return config; + } + +} diff --git a/src/main/java/de/jalin/ldapadmin/web/AbstractLDAPServlet.java b/src/main/java/de/jalin/ldapadmin/web/AbstractLDAPServlet.java index f6323b1..fb52a84 100644 --- a/src/main/java/de/jalin/ldapadmin/web/AbstractLDAPServlet.java +++ b/src/main/java/de/jalin/ldapadmin/web/AbstractLDAPServlet.java @@ -13,8 +13,10 @@ import javax.servlet.http.HttpSession; import de.jalin.ldapadmin.beans.Group; import de.jalin.ldapadmin.beans.User; +import de.jalin.ldapadmin.ldap.LDAPConfig; import de.jalin.ldapadmin.ldap.LDAPSession; import de.jalin.ldapadmin.ldap.LDAPSessionException; +import java.util.logging.Level; import java.util.logging.Logger; public class AbstractLDAPServlet extends HttpServlet { @@ -27,7 +29,7 @@ public class AbstractLDAPServlet extends HttpServlet { private SortedMap groups; protected LDAPSession ldapSession; - protected Properties config; + protected LDAPConfig config; protected void loadData() { users = new TreeMap<>(); @@ -45,14 +47,11 @@ public class AbstractLDAPServlet extends HttpServlet { @Override public void init() throws ServletException { super.init(); - final InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("config.properties"); - config = new Properties(); try { - config.load(inputStream); - ldapSession = new LDAPSession(config.getProperty("provider.url"), config.getProperty("security.principal"), config.getProperty("security.password")); - } catch (IOException | LDAPSessionException e) { - LOG.severe(e.getMessage()); - throw new ServletException(e); + config = LDAPConfig.getConfig(); + ldapSession = new LDAPSession(config.getLdapProviderUrl(), config.getLdapSecurityPrincipal(), config.getLdapSecurityPassword()); + } catch (LDAPSessionException ex) { + Logger.getLogger(AbstractLDAPServlet.class.getName()).log(Level.SEVERE, null, ex); } } diff --git a/src/main/java/de/jalin/ldapadmin/web/NaiveTrustManager.java b/src/main/java/de/jalin/ldapadmin/web/NaiveTrustManager.java deleted file mode 100644 index c1dca9f..0000000 --- a/src/main/java/de/jalin/ldapadmin/web/NaiveTrustManager.java +++ /dev/null @@ -1,50 +0,0 @@ -package de.jalin.ldapadmin.web; - -import java.io.IOException; -import java.net.Socket; -import java.net.UnknownHostException; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - -public class NaiveTrustManager implements X509TrustManager { - - private static final SSLContext SSL_CONTEXT; - - static { - try { - SSL_CONTEXT = SSLContext.getInstance("TLSv1.2"); - SSL_CONTEXT.init(null, new TrustManager[]{new NaiveTrustManager()}, null); - SSLContext.setDefault(SSL_CONTEXT); - } catch (NoSuchAlgorithmException | KeyManagementException e) { - throw new RuntimeException("Unable to initialise SSL context", e); - } - } - - public Socket createSocket(String host, int port) throws IOException, UnknownHostException { - return SSL_CONTEXT.getSocketFactory().createSocket(host, port); - } - - @Override - public void checkClientTrusted(X509Certificate[] arg0, String arg1) - throws CertificateException { - - } - - @Override - public void checkServerTrusted(X509Certificate[] arg0, String arg1) - throws CertificateException { - - } - - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - -} diff --git a/src/main/java/de/jalin/ldapadmin/web/ResetPasswordServlet.java b/src/main/java/de/jalin/ldapadmin/web/ResetPasswordServlet.java index 98e635d..3e1020f 100644 --- a/src/main/java/de/jalin/ldapadmin/web/ResetPasswordServlet.java +++ b/src/main/java/de/jalin/ldapadmin/web/ResetPasswordServlet.java @@ -25,6 +25,7 @@ import de.jalin.ldapadmin.beans.User; import de.jalin.ldapadmin.ldap.LDAPSessionException; import de.jalin.ldapadmin.ldap.SimplePasswordException; import de.jalin.ldapadmin.ldap.UsersDAO; +import org.apache.commons.lang.CharEncoding; @WebServlet(name = "ResetPassword", urlPatterns = {"/passwordreset"}, loadOnStartup = 1) public class ResetPasswordServlet extends AbstractLDAPServlet { @@ -38,9 +39,9 @@ public class ResetPasswordServlet extends AbstractLDAPServlet { @Override public void init() throws ServletException { super.init(); - smtpHost = config.getProperty("smtp.host", "localhost"); - smtpPort = config.getProperty("smtp.port", "25"); - smtpFrom = config.getProperty("smtp.from", "nobody@localhost"); + smtpHost = config.getSmtpHost(); + smtpPort = config.getSmtpPort(); + smtpFrom = config.getSmtpFromAddress(); } @Override @@ -164,7 +165,7 @@ public class ResetPasswordServlet extends AbstractLDAPServlet { } private static void smtpSend(final String smtpHost, final String smtpPort, final Messages messages, final String fromAddress, final String toAddress, final String subject, final String text) throws IOException { - final SMTPClient client = new SMTPClient(); + final SMTPClient client = new SMTPClient(CharEncoding.ISO_8859_1); final String canonicalHostName = InetAddress.getLocalHost().getHostName(); client.connect(smtpHost, Integer.parseInt(smtpPort)); int reply = client.getReplyCode(); @@ -180,7 +181,7 @@ public class ResetPasswordServlet extends AbstractLDAPServlet { } try (PrintWriter wr = new PrintWriter(sendMessageData)) { final SimpleSMTPHeader header = new SimpleSMTPHeader(fromAddress, toAddress, subject); - header.addHeaderField("Content-Type", "text/plain; charset=ISO-8859-15"); + header.addHeaderField("Content-Type", "text/plain; charset=ISO-8859-1"); header.addHeaderField("Content-Transfer-Encoding", "8bit"); wr.write(header.toString()); wr.write(text); diff --git a/src/main/resources/config.properties b/src/main/resources/config.properties index e6b9dc4..8af9cc5 100644 --- a/src/main/resources/config.properties +++ b/src/main/resources/config.properties @@ -2,3 +2,4 @@ provider.url=ldap://localhost:10389/dc=domain,dc=example,dc=com security.principal=uid=admin,ou=system security.password=streng-geheim smtp.host=localhost +smtp.from=nobody@example.com diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 6752654..72d96f4 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -3,10 +3,6 @@ COOKIE - - uri - ldap://localhost:10389/dc=domain,dc=example,dc=com - default /css/*