From ab010e05600b67e3e25eae00c47c25e273325a2c Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Fri, 20 Mar 2020 12:02:54 +0100 Subject: [PATCH] hsadmin email address --- .../ldapadmin/hsadmin/EMailAddressDAO.java | 98 +++++++++++++++++++ .../hsadmin/EMailAddressNotFound.java | 7 ++ 2 files changed, 105 insertions(+) create mode 100644 src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressDAO.java create mode 100644 src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressNotFound.java diff --git a/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressDAO.java b/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressDAO.java new file mode 100644 index 0000000..6b55260 --- /dev/null +++ b/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressDAO.java @@ -0,0 +1,98 @@ +package de.jalin.ldapadmin.hsadmin; + +import java.io.IOException; +import java.io.Serializable; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.client.XmlRpcClient; +import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; + +public class EMailAddressDAO { + + private TicketProvider ticketBox; + private XmlRpcClient rpcClient; + + public EMailAddressDAO(final TicketProvider ticketBox) throws IOException { + this.ticketBox = ticketBox; + final XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); + config.setServerURL(new URL("https://config.hostsharing.net:443/hsar/xmlrpc/hsadmin")); + config.setEnabledForExtensions(true); + this.rpcClient = new XmlRpcClient(); + this.rpcClient.setConfig(config); + } + + public void assertEMailAddressExists(final String emailAddress, final String target) throws IOException, XmlRpcException, EMailAddressNotFound { + final String[] parts = emailAddress.split("@"); + if (parts.length == 2) { + final String localpart = parts[0]; + final String domain = parts[1]; + final String pac = ticketBox.getAdminLogin(); + try { + getEMailAddress(pac, localpart, domain); + updateEMailAddress(pac, localpart, domain, target); + } catch (EMailAddressNotFound e) { + createEMailAddress(pac, localpart, domain, target); + } + } + } + + private String createEMailAddress(String pac, String localpart, String domain, String target) throws EMailAddressNotFound, XmlRpcException, IOException { + final List xmlRpcParamsList = new ArrayList(); + xmlRpcParamsList.add(pac); + xmlRpcParamsList.add(ticketBox.getTicket()); + final HashMap setParamsMap = new HashMap(); + xmlRpcParamsList.add(setParamsMap); + setParamsMap.put("localpart", localpart); + setParamsMap.put("domain", domain); + setParamsMap.put("target", target); + final Object[] rpcResult = (Object[])rpcClient.execute("emailaddress.add", xmlRpcParamsList); + if (rpcResult.length == 1) { + @SuppressWarnings("unchecked") + final Map emailAddressMap = (Map) rpcResult[0]; + return (String) emailAddressMap.get("emailaddress"); + } + throw new EMailAddressNotFound(); + } + + private String updateEMailAddress(String pac, String localpart, String domain, String target) throws IOException, XmlRpcException, EMailAddressNotFound { + final List xmlRpcParamsList = new ArrayList(); + xmlRpcParamsList.add(pac); + xmlRpcParamsList.add(ticketBox.getTicket()); + final HashMap whereParamsMap = new HashMap(); + xmlRpcParamsList.add(whereParamsMap); + final HashMap setParamsMap = new HashMap(); + xmlRpcParamsList.add(setParamsMap); + whereParamsMap.put("localpart", localpart); + whereParamsMap.put("domain", domain); + setParamsMap.put("target", target); + final Object[] rpcResult = (Object[])rpcClient.execute("emailaddress.update", xmlRpcParamsList); + if (rpcResult.length == 1) { + @SuppressWarnings("unchecked") + final Map emailAddressMap = (Map) rpcResult[0]; + return (String) emailAddressMap.get("emailaddress"); + } + throw new EMailAddressNotFound(); + } + + private String getEMailAddress(String pac, String localpart, String domain) throws EMailAddressNotFound, IOException, XmlRpcException { + final List xmlRpcParamsList = new ArrayList(); + xmlRpcParamsList.add(pac); + xmlRpcParamsList.add(ticketBox.getTicket()); + final HashMap whereParamsMap = new HashMap(); + xmlRpcParamsList.add(whereParamsMap); + whereParamsMap.put("localpart", localpart); + whereParamsMap.put("domain", domain); + final Object[] rpcResult = (Object[])rpcClient.execute("emailaddress.search", xmlRpcParamsList); + if (rpcResult.length == 1) { + @SuppressWarnings("unchecked") + final Map emailAddressMap = (Map) rpcResult[0]; + return (String) emailAddressMap.get("emailaddress"); + } + throw new EMailAddressNotFound(); + } +} diff --git a/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressNotFound.java b/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressNotFound.java new file mode 100644 index 0000000..5728f93 --- /dev/null +++ b/src/main/java/de/jalin/ldapadmin/hsadmin/EMailAddressNotFound.java @@ -0,0 +1,7 @@ +package de.jalin.ldapadmin.hsadmin; + +public class EMailAddressNotFound extends Exception { + + private static final long serialVersionUID = 1L; + +}