start hsadmin api
This commit is contained in:
parent
0901802b61
commit
9357384b65
95
src/main/java/de/jalin/ldapadmin/hsadmin/MailboxDAO.java
Normal file
95
src/main/java/de/jalin/ldapadmin/hsadmin/MailboxDAO.java
Normal file
@ -0,0 +1,95 @@
|
||||
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 MailboxDAO {
|
||||
|
||||
private final TicketProvider ticketBox;
|
||||
private final XmlRpcClient rpcClient;
|
||||
|
||||
public MailboxDAO(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 assertMailboxExists(final String emailAddress, final String comment) throws IOException, XmlRpcException {
|
||||
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 {
|
||||
getMailbox(pac, localpart);
|
||||
} catch (MailboxNotFound e) {
|
||||
try {
|
||||
createMailbox(pac, localpart, comment);
|
||||
} catch (MailboxNotFound e1) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getMailbox(String pac, String localpart) throws IOException, XmlRpcException, MailboxNotFound {
|
||||
final List<Serializable> xmlRpcParamsList = new ArrayList<Serializable>();
|
||||
xmlRpcParamsList.add(pac);
|
||||
xmlRpcParamsList.add(ticketBox.getTicket());
|
||||
final HashMap<String, Serializable> whereParamsMap = new HashMap<String, Serializable>();
|
||||
xmlRpcParamsList.add(whereParamsMap);
|
||||
whereParamsMap.put("name", pac + "-" + localpart);
|
||||
final Object[] rpcResult = (Object[])rpcClient.execute("user.search", xmlRpcParamsList);
|
||||
if (rpcResult.length == 1) {
|
||||
Map<String, Object> userAsMap = (Map<String, Object>) rpcResult[0];
|
||||
return (String) userAsMap.get("name");
|
||||
}
|
||||
throw new MailboxNotFound();
|
||||
}
|
||||
|
||||
private void createMailbox(String pac, String localpart, String comment) throws IOException, XmlRpcException, MailboxNotFound {
|
||||
final List<Serializable> xmlRpcParamsList = new ArrayList<Serializable>();
|
||||
xmlRpcParamsList.add(pac);
|
||||
xmlRpcParamsList.add(ticketBox.getTicket());
|
||||
final HashMap<String, Serializable> setParamsMap = new HashMap<String, Serializable>();
|
||||
xmlRpcParamsList.add(setParamsMap);
|
||||
setParamsMap.put("name", pac + "-" + localpart);
|
||||
setParamsMap.put("password", pwGen());
|
||||
setParamsMap.put("comment", comment);
|
||||
final Object rpcResult = rpcClient.execute("user.add", xmlRpcParamsList);
|
||||
}
|
||||
|
||||
private String pwGen() {
|
||||
final String pwCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.,_:;?!#+&%$=";
|
||||
final StringBuffer buffer = new StringBuffer();
|
||||
for (int loop=0; loop<64; loop++) {
|
||||
final int length = pwCharacters.length() - 1;
|
||||
double rand = Math.random() * length;
|
||||
int idx = (new Double(rand)).intValue();
|
||||
buffer.append(pwCharacters.charAt(idx));
|
||||
}
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws XmlRpcException {
|
||||
try {
|
||||
MailboxDAO mailboxDAO = new MailboxDAO(new TicketProvider("peh00", "SMid13A+liT"));
|
||||
mailboxDAO.assertMailboxExists("peter.hormanns@ostwall195.de", "Peter Hormanns");
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package de.jalin.ldapadmin.hsadmin;
|
||||
|
||||
public class MailboxNotFound extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
93
src/main/java/de/jalin/ldapadmin/hsadmin/TicketProvider.java
Normal file
93
src/main/java/de/jalin/ldapadmin/hsadmin/TicketProvider.java
Normal file
@ -0,0 +1,93 @@
|
||||
package de.jalin.ldapadmin.hsadmin;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
|
||||
public class TicketProvider {
|
||||
|
||||
private final String adminLogin;
|
||||
private final String adminPassword;
|
||||
|
||||
private String grantingTicket = null;
|
||||
|
||||
public TicketProvider(final String login, final String password) {
|
||||
this.adminLogin = login;
|
||||
this.adminPassword = password;
|
||||
}
|
||||
|
||||
public String getAdminLogin() {
|
||||
return adminLogin;
|
||||
}
|
||||
|
||||
public String getTicket() throws IOException {
|
||||
if (grantingTicket == null) {
|
||||
grantingTicket = getGrantingTicket();
|
||||
}
|
||||
String ticket = null;
|
||||
while (ticket == null) {
|
||||
final String serviceParam = "service=" + URLEncoder.encode("https://config.hostsharing.net:443/hsar/backend", "UTF-8");
|
||||
final URL url = new URL(grantingTicket);
|
||||
final HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("POST");
|
||||
connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
|
||||
connection.setDoInput(true);
|
||||
connection.setDoOutput(true);
|
||||
connection.setUseCaches(false);
|
||||
connection.setAllowUserInteraction(false);
|
||||
final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
|
||||
writer.write(serviceParam);
|
||||
writer.close();
|
||||
connection.connect();
|
||||
int httpResponseCode = connection.getResponseCode();
|
||||
if (200 == httpResponseCode) {
|
||||
final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
ticket = reader.readLine();
|
||||
String readLine = reader.readLine();
|
||||
do {
|
||||
readLine = reader.readLine();
|
||||
} while (readLine != null);
|
||||
}
|
||||
if (httpResponseCode >= 400) {
|
||||
grantingTicket = getGrantingTicket();
|
||||
}
|
||||
}
|
||||
return ticket;
|
||||
}
|
||||
|
||||
private String getGrantingTicket() throws IOException {
|
||||
final String userParam = "username=" + URLEncoder.encode(adminLogin, "UTF-8");
|
||||
final String passwordParam = "password=" + URLEncoder.encode(adminPassword, "UTF-8");
|
||||
final String encodedData = userParam + "&" + passwordParam;
|
||||
final URL url = new URL("https://login.hostsharing.net/cas/v1/tickets");
|
||||
final HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("POST");
|
||||
connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
|
||||
connection.setDoInput(true);
|
||||
connection.setDoOutput(true);
|
||||
connection.setUseCaches(false);
|
||||
connection.setAllowUserInteraction(false);
|
||||
final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
|
||||
writer.write(encodedData);
|
||||
writer.close();
|
||||
connection.connect();
|
||||
return connection.getHeaderField("Location");
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
final TicketProvider provider = new TicketProvider("peh00", "SMid13A+liT");
|
||||
String ticket = provider.getTicket();
|
||||
System.out.println(ticket);
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user