hsarback/lib/commons-net2-2.0.jar | patch | view | raw | blame | history | |
hsarback/lib/jpwgen-1.2.0.jar | patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/core/qserv/MailerProcessor.java | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/core/qserv/MailerShell.java | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/core/qserv/SmtpHelper.java | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/mods/pac/PacModuleImpl.java | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/mods/pac/PacProcessorFactory.java | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/mods/pac/email_new_pac_account.jtpl | ●●●●● patch | view | raw | blame | history |
hsarback/lib/commons-net2-2.0.jarBinary files differ
hsarback/lib/jpwgen-1.2.0.jarBinary files differ
hsarback/src/de/hsadmin/core/qserv/MailerProcessor.java
@@ -1,15 +1,11 @@ package de.hsadmin.core.qserv; import java.util.Properties; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import de.hsadmin.core.model.HSAdminException; import de.hsadmin.core.util.Config; public class MailerProcessor extends AbstractProcessor { private static final long serialVersionUID = -8900943664576420041L; private static final long serialVersionUID = 1L; private String aTo; private String aSubject; @@ -22,20 +18,14 @@ } public Object process() throws ProcessorException { Properties aProps = new Properties(); aProps.setProperty("mail.smtp.host", "localhost"); Session aSess = Session.getInstance(aProps); MimeMessage aMsg = new MimeMessage(aSess); try { aMsg.setFrom(new InternetAddress("robot@hostsharing.net")); aMsg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(aTo)); aMsg.setSubject(aSubject); aMsg.setText(aBody); MailerShell.send(aMsg); Config config = Config.getInstance(); String aFrom = config.getProperty("hsadmin.smtp.from", "unconfigured_from@example.com"); String aCC = config.getProperty("hsadmin.smtp.cc", "unconfigured_cc@example.com"); SmtpHelper.send(aFrom, aTo, aCC, aSubject, aBody); return null; } catch (MessagingException aExc) { throw new ProcessorException(aExc); } catch (HSAdminException e) { throw new ProcessorException(e); } } } hsarback/src/de/hsadmin/core/qserv/MailerShell.java
File was deleted hsarback/src/de/hsadmin/core/qserv/SmtpHelper.java
New file @@ -0,0 +1,76 @@ package de.hsadmin.core.qserv; import java.io.IOException; import java.io.PrintWriter; import java.io.Writer; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; import org.apache.commons.net.smtp.SMTPClient; import org.apache.commons.net.smtp.SMTPReply; import org.apache.commons.net.smtp.SimpleSMTPHeader; import de.hsadmin.core.model.HSAdminException; import de.hsadmin.core.util.Config; public class SmtpHelper { public static void send(String fromAddress, String toAddress, String subject, String text) throws HSAdminException { send(fromAddress, toAddress, null, subject, text); } public static void send(String fromAddress, String toAddress, String ccAddress, String subject, String text) throws HSAdminException { try { SMTPClient client = new SMTPClient(); String canonicalHostName = InetAddress.getLocalHost().getHostName(); String smtpHost = Config.getInstance().getProperty("smtp.host"); if ("unittest".equals(smtpHost)) { // Nur fuer Unit-Tests if (subject.toLowerCase().contains("error")) { throw new HSAdminException("Konnte Mail nicht senden"); } System.out.println("------------------------"); System.out.println("From: " + fromAddress); System.out.println("To: " + toAddress); System.out.println("Subject: " + subject); System.out.println("\n" + text); return; } client.connect(smtpHost, 25); int reply = client.getReplyCode(); if (!SMTPReply.isPositiveCompletion(reply)) { throw new HSAdminException("Konnte Mail Server nicht erreichen"); } client.login(canonicalHostName); client.setSender(fromAddress.trim()); client.addRecipient(toAddress.trim()); if (ccAddress != null && ccAddress.trim().length() > 3) { client.addRecipient(ccAddress.trim()); } Writer sendMessageData = client.sendMessageData(); if (sendMessageData == null) { throw new HSAdminException("Konnte Mail nicht senden (SMTP-Relay-Problem)"); } PrintWriter wr = new PrintWriter(sendMessageData); SimpleSMTPHeader header = new SimpleSMTPHeader(fromAddress, toAddress, subject); wr.write(header.toString()); wr.write(text); wr.close(); if (!client.completePendingCommand()) { throw new HSAdminException("Konnte Mail nicht senden"); } client.logout(); client.disconnect(); } catch (UnknownHostException e) { throw new HSAdminException(e); } catch (SocketException e) { throw new HSAdminException(e); } catch (IOException e) { throw new HSAdminException(e); } } } hsarback/src/de/hsadmin/mods/pac/PacModuleImpl.java
@@ -96,6 +96,7 @@ Long maxUid = (Long) em.createQuery("SELECT MAX(u.userId) FROM UnixUsers u").getSingleResult(); if (maxUid >= nUID) nUID = maxUid + 1; admin.setUserId(nUID); users.add(admin); return super.add(newEntity); } hsarback/src/de/hsadmin/mods/pac/PacProcessorFactory.java
New file @@ -0,0 +1,94 @@ package de.hsadmin.mods.pac; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Random; import java.util.Set; import javax.persistence.EntityManager; import net.sf.jtpl.Template; import de.hsadmin.core.model.AbstractEntity; import de.hsadmin.core.qserv.CompoundProcessor; import de.hsadmin.core.qserv.EntityProcessorFactory; import de.hsadmin.core.qserv.MailerProcessor; import de.hsadmin.core.qserv.Processor; import de.hsadmin.core.qserv.ProcessorException; import de.hsadmin.core.qserv.ShellProcessor; import de.hsadmin.core.qserv.TemplateProcessor; import de.hsadmin.core.qserv.WaitingTasksProcessor; import de.hsadmin.mods.user.UnixUser; import de.rrze.jpwgen.flags.PwGeneratorFlagBuilder; import de.rrze.jpwgen.impl.PwGenerator; public class PacProcessorFactory implements EntityProcessorFactory { private static PwGeneratorFlagBuilder flagBuilder = new PwGeneratorFlagBuilder(); private static Random random = new Random(); static { flagBuilder.setIncludeCapitals(); flagBuilder.setIncludeNumerals(); // flagBuilder.setIncludeReducedSymbols(); flagBuilder.setFilterAmbiguous(); } @Override public <T extends AbstractEntity> Processor createCreateProcessor( EntityManager em, T entity) throws ProcessorException { Pac pac = (Pac) entity; String inetAddr = pac.getCurINetAddr().getInetAddr(); String pacName = pac.getName(); String customerEMail = pac.getCustomer().getContractualContact().getEmail(); UnixUser unixUser = null; Set<UnixUser> unixUserSet = pac.getUnixUser(); if (unixUserSet.size() == 1) { unixUser = unixUserSet.iterator().next(); } Processor hostsAppender = new ShellProcessor("echo '" + inetAddr + " " + pacName +".hostsharing.net " + pacName + "\n' >>/etc/hosts"); Processor interfacesAppender = new ShellProcessor("echo 'auto eth0:" + pacName + "\n" + "iface eth0:" + pacName + " inet static\n" + "\taddress " + inetAddr + "\n" + "\tnetmask 255.255.255.0\n\n' >>/etc/network/interfaces"); Processor sudoersAppender = new ShellProcessor("echo '" + pacName + " ALL = (%" + pacName + ") NOPASSWD: ALL\n' >> /etc/sudoers"); String password = PwGenerator.generatePassword(7, flagBuilder.build(), 100, random); Processor newUsersProc = new ShellProcessor( "newusers", pacName + ":" + password + ":" + unixUser.getUserId() + ":" + unixUser.getPac().getName() + ":" + unixUser.getComment() + ":" + unixUser.getHomedir() + ":" + unixUser.getShell() + "\n"); try { InputStream stream = TemplateProcessor.class.getClassLoader().getResourceAsStream("/de/hsadmin/mods/pac/email_new_pac_account.jtpl"); Template template = new Template(new InputStreamReader(stream)); template.assign("PAC", pacName); template.assign("PASSWORD", password); template.assign("CUST_EMAIL", customerEMail); template.parse("main"); Processor emailPasswordProc = new WaitingTasksProcessor( new MailerProcessor( customerEMail, "Zugangsdaten des neue Hostsharing Pakets " + pacName, template.out()) ); return new CompoundProcessor(hostsAppender, interfacesAppender, sudoersAppender, newUsersProc, emailPasswordProc); } catch (IllegalArgumentException e) { throw new ProcessorException(e); } catch (IOException e) { throw new ProcessorException(e); } } @Override public <T extends AbstractEntity> Processor createUpdateProcessor( EntityManager em, T newEntity) throws ProcessorException { throw new ProcessorException("pac.update not implemented"); } @Override public <T extends AbstractEntity> Processor createDeleteProcessor( EntityManager em, T entity) throws ProcessorException { throw new ProcessorException("pac.delete not implemented"); } } hsarback/src/de/hsadmin/mods/pac/email_new_pac_account.jtpl
New file @@ -0,0 +1,73 @@ <!-- BEGIN: main -->Das neue Hostsharing Paket {PAC} ist eingerichtet. Zugangsdaten: Hostname (HTTP, FTP, SSH, POP3, IMAP): {PAC}.hostsharing.net Benutzernamen (Paket-Admin-Account): {PAC} Passwort: {PASSWORD} Wir bitten zu berücksichtigen, dass man mit diesem Passwort sehr viel Macht über das Paket hat, so ist damit z.B. die Bestellung von Domains möglich. Bitte daher die u.g. Sicherheitshinweise beachten und den Paketadmin-Account {PAC} nicht mit unsicheren (unverschlüsselten) Protokollen wie POP3 oder FTP ohne TLS verwenden! E-Mail-Benachrichtigungen für den Paket-Admin gehen direkt an den o.g. Account. Über den E-Mail-Alias {PAC} können diese E-Mails an externe E-Mail-Adressen weitergeleitet werden. Initial ist eine Weiterleitung an {CUST_EMAIL} eingetragen. Wir empfehlen, Domains nicht unter dem Paketadmin {PAC} sondern z.B. unter einem User "{PAC}-doms" anzulegen, um die Paket- und Domain- Verwaltung zu trennen. Dies gilt insbesondere, wenn die Domain-Inhalte per FTP gepflegt werden sollen. Weitere Accounts (neben dem Paketadmin-Account {PAC}) können nach einem Login per SSH mit dem Kommandozeilen-Programm hsadmin eingerichtet werden (in Kürze auch per Web-Client). Dokumentation finden Sie unter: <http://www.hostsharing.net/dokumentation.html> Der Webspace des Paketes ist theoretisch ab sofort unter <http://{PAC}.hostsharing.net/> erreichbar, allerdings kann es durch DNS-Caches Verzögerungen geben. Das DocumentRoot ist ~{PAC}/web, wobei ~{PAC}/cgi als /cgi-bin in den Webspace eingeblendet wird. In SW Paketen darf dieses CGI auch nur für administrative Zwecke verwendet werden. Die vorgenannte Paket-Subdomain ist jedoch eher zum Testen und Ausprobieren gedacht und hat mit dem folgenden Domain-Webspace nichts zu tun, der wird unter ~{PAC}/doms/ angelegt, sobald eine Domain aufgeschaltet wird. Dort gibt es dann für jede Domain ein separates Verzeichnis. Das Verfahren zum Bestellen von Domains ist auf unserer Website unter http://www.hostsharing.net/dokumentation/einstieg-bei-hostsharing/domain-bestellen.html beschrieben. Ein Web-Interface hierfür ist in Entwicklung. Bei evtl. auftretenden Problemen mit dem Server bitte zunächst auf unserer Status-Website <http://status.hostsharing.net/> nachsehen, insbesondere auch auf der dortigen Seite "Aktionen", ob die Hostmaster bereits aktiv sind. Falls nicht, können die Hostmaster bei dringenden Problemen über die Rufnummer +49 40 209331331 erreicht werden. Bitte ggf. lange klingeln lassen, aber nicht mehr anrufen, wenn die Hostmaster laut Status-Seite "Aktionen" bereits dabei sind, das Problem zu beheben, da dies die Arbeiten dann nur verzögern würde. Auch ist diese Rufnummer keine Support-Rufnummer, telefonische Support-Anfragen können grundsätzlich nicht beantwortet werden. Weitere Fragen beantworten wir gerne per E-Mail, am liebsten auf der passenden öffentlichen Mailingliste (in den meisten Fällen wohl support@). Einen Übeblick über unsere Mailinglisten bietet die Website: http://www.hostsharing.net/forum/mailinglisten.html Viel Erfolg mit dem neuen Paket bei Hostsharing! die Hostsharing Hostmaster P.S. Diese E-Mail wurde automatisch erstellt und ist daher allgemein formuliert. -- Hostsharing Service | http://www.hostsharing.net Telefon: +49 40 209331311 | Fax: +49 40 209331312 Hostsharing eG | Glockengießerwall 17 | D-20095 Hamburg Registergericht Hamburg, GnR 1007 | USt.-ID-Nr.: DE218602793 vertretungsberechtigter Vorstand: Michael Hierweck, Uwe Müller <!-- END: main -->