setquota, traffic accounting
1 files added
7 files modified
New file |
| | |
| | | package de.hsadmin.core.util; |
| | | |
| | | import java.util.Random; |
| | | |
| | | import de.rrze.jpwgen.flags.PwGeneratorFlagBuilder; |
| | | import de.rrze.jpwgen.impl.PwGenerator; |
| | | |
| | | public class PasswordTool { |
| | | |
| | | public static PwGeneratorFlagBuilder flagBuilder = new PwGeneratorFlagBuilder(); |
| | | public static Random random = new Random(); |
| | | |
| | | static { |
| | | flagBuilder.setIncludeCapitals(); |
| | | flagBuilder.setIncludeNumerals(); |
| | | // flagBuilder.setIncludeReducedSymbols(); |
| | | flagBuilder.setFilterAmbiguous(); |
| | | } |
| | | |
| | | public static String generatePassword() { |
| | | String password = PwGenerator.generatePassword(7, flagBuilder.build(), 100, random); |
| | | return password; |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | public class DomainProcessorFactory implements EntityProcessorFactory { |
| | | |
| | | private static final String[] DW_STRUCTURE = new String[] { "htdocs", "htdocs-ssl", "subs", "subs/www", "subs-ssl", "subs-ssl/www", "cgi", "fastcgi", "cgi-ssl", "fastcgi-ssl", "etc", "var" }; |
| | | private static final String[] SW_STRUCTURE = new String[] { "htdocs", "htdocs-ssl", "subs", "subs/www", "subs-ssl", "subs-ssl/www", "etc", "var" }; |
| | | |
| | | public <T extends AbstractEntity> Processor createCreateProcessor(EntityManager em, T entity) throws ProcessorException { |
| | | String hiveName = entity.getHiveName(); |
| | | Domain dom = (Domain) entity; |
| | |
| | | private CompoundProcessor createDomainDirectoriesProcessor(Domain dom, Map<String, String> templateVars) throws ProcessorException { |
| | | UnixUser domUser = dom.getUser(); |
| | | String domName = dom.getName(); |
| | | String pacName = domUser.getPac().getName(); |
| | | Pac pac = domUser.getPac(); |
| | | boolean dynamicWeb = pac.isDynamicWeb(); |
| | | String pacName = pac.getName(); |
| | | String domsDir = domUser.getHomedir() + "/doms"; |
| | | String userName = domUser.getName(); |
| | | String domainDir = domsDir + "/" + dom.getName(); |
| | | String[] subDirs = new String[] { "htdocs", "htdocs-ssl", "subs", "subs/www", "subs-ssl", "subs-ssl/www", "cgi", "fastcgi", "cgi-ssl", "fastcgi-ssl", "etc", "var" }; |
| | | String[] subDirs = dynamicWeb ? DW_STRUCTURE : SW_STRUCTURE; |
| | | Processor mkDomainDirProzessor = |
| | | new ShellProcessor( |
| | | "mkdir --mode=1550 --parents " + domsDir + " && " + |
| | |
| | | domDirsProcessor.appendProcessor( |
| | | new CreateFileProcessor("/de/hsadmin/mods/dom/index.html.jtpl", templateVars, domainDir + "/subs-ssl/www/index.html", userName, pacName, "644") |
| | | ); |
| | | domDirsProcessor.appendProcessor( |
| | | new CreateFileProcessor("/de/hsadmin/mods/dom/test.cgi.jtpl", templateVars, domainDir + "/cgi/test.cgi", userName, pacName, "755") |
| | | if (dynamicWeb) { |
| | | domDirsProcessor.appendProcessor( |
| | | new CreateFileProcessor("/de/hsadmin/mods/dom/test.cgi.jtpl", templateVars, domainDir + "/cgi/test.cgi", userName, pacName, "755") |
| | | ); |
| | | domDirsProcessor.appendProcessor( |
| | | new CreateFileProcessor("/de/hsadmin/mods/dom/test.cgi.jtpl", templateVars, domainDir + "/cgi-ssl/test.cgi", userName, pacName, "755") |
| | | ); |
| | | domDirsProcessor.appendProcessor( |
| | | new CopyFileProcessor("/usr/local/src/phpstub/phpstub", domainDir + "/fastcgi/phpstub", userName, pacName, "755") |
| | | ); |
| | | domDirsProcessor.appendProcessor( |
| | | new CopyFileProcessor("/usr/local/src/phpstub/phpstub", domainDir + "/fastcgi-ssl/phpstub", userName, pacName, "755") |
| | | ); |
| | | domDirsProcessor.appendProcessor( |
| | | new CreateFileProcessor("/de/hsadmin/mods/dom/test.cgi.jtpl", templateVars, domainDir + "/cgi-ssl/test.cgi", userName, pacName, "755") |
| | | ); |
| | | domDirsProcessor.appendProcessor( |
| | | new CopyFileProcessor("/usr/local/src/phpstub/phpstub", domainDir + "/fastcgi/phpstub", userName, pacName, "755") |
| | | ); |
| | | domDirsProcessor.appendProcessor( |
| | | new CopyFileProcessor("/usr/local/src/phpstub/phpstub", domainDir + "/fastcgi-ssl/phpstub", userName, pacName, "755") |
| | | ); |
| | | } |
| | | domDirsProcessor.appendProcessor( |
| | | new ShellProcessor("ln -s " + domainDir + " /home/doms/ && " + |
| | | "chown --no-dereference " + userName + ":httpd /home/doms/" + domName |
| | |
| | | if (domName.equals(pac.getName() + ".hostsharing.net")) { |
| | | return "/de/hsadmin/mods/dom/httpd-vhost-dynamic.jtpl"; |
| | | } |
| | | if (pac.getBasepac().getName().startsWith("DW")) { |
| | | if (pac.isDynamicWeb()) { |
| | | return "/de/hsadmin/mods/dom/httpd-vhost-dynamic.jtpl"; |
| | | } |
| | | return "/de/hsadmin/mods/dom/httpd-vhost-static.jtpl"; |
| | |
| | | || super.isReadAllowedFor(loginUser); |
| | | } |
| | | |
| | | public boolean isDynamicWeb() { |
| | | return getBasepac().getName().startsWith("DW"); |
| | | } |
| | | |
| | | public static String restriction() { |
| | | return |
| | | // all pacs of customer |
| | |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Random; |
| | | import java.util.Set; |
| | | |
| | | import javax.persistence.EntityManager; |
| | |
| | | import de.hsadmin.core.qserv.ShellProcessor; |
| | | import de.hsadmin.core.qserv.TemplateProcessor; |
| | | import de.hsadmin.core.qserv.WaitingTasksProcessor; |
| | | import de.hsadmin.core.util.PasswordTool; |
| | | 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 { |
| | |
| | | String customerEMail = pac.getCustomer().getContractualContact().getEmail(); |
| | | Hive hive = pac.getHive(); |
| | | UnixUser unixUser = getPacAdminUser(pac); |
| | | String password = PwGenerator.generatePassword(7, flagBuilder.build(), 100, random); |
| | | String password = PasswordTool.generatePassword(); |
| | | Map<String, String> hiveValues = fillHiveValues(hive); |
| | | List<Map<String, String>> pacValuesList = fillPacValuesList(hive, null); |
| | | Map<String, String> emailVars = fillEMailValues(pacName, customerEMail, password); |
| | | Processor priProcessor = new CompoundProcessor( |
| | | createAddUserProc(pacName, unixUser, password), |
| | | createSetQuotaProc(pac), |
| | | createEtcHostsProc(hiveValues, pacValuesList), |
| | | createNetworkInterfacesProc(hiveValues, pacValuesList), |
| | | createNetworkInterfacesProc(hiveValues, pacValuesList), |
| | | createIPTablesProc(), |
| | | createSudouersProc(hiveValues, pacValuesList), |
| | | createProftpdConfProc(hiveValues, pacValuesList), |
| | | createMakePacDirectoryStructure(unixUser)); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public <T extends AbstractEntity> Processor createDeleteProcessor( |
| | | EntityManager em, T entity) throws ProcessorException { |
| | | public <T extends AbstractEntity> Processor createDeleteProcessor(EntityManager em, T entity) throws ProcessorException { |
| | | Pac pac = (Pac) entity; |
| | | Hive hive = pac.getHive(); |
| | | Map<String, String> hiveValues = fillHiveValues(hive); |
| | |
| | | return waitingProcessor; |
| | | } |
| | | |
| | | private TemplateProcessor createEtcHostsProc( |
| | | private Processor createEtcHostsProc( |
| | | Map<String, String> hiveValues, |
| | | List<Map<String, String>> pacValuesList) throws ProcessorException { |
| | | return new TemplateProcessor("/de/hsadmin/mods/pac/hosts.jtpl", hiveValues, pacValuesList.iterator(), "/etc/hosts", true); |
| | | } |
| | | |
| | | private TemplateProcessor createNetworkInterfacesProc( |
| | | private Processor createNetworkInterfacesProc( |
| | | Map<String, String> hiveValues, |
| | | List<Map<String, String>> pacValuesList) throws ProcessorException { |
| | | return new TemplateProcessor("/de/hsadmin/mods/pac/interfaces.jtpl", hiveValues, pacValuesList.iterator(), "/etc/network/interfaces", true); |
| | | } |
| | | |
| | | private TemplateProcessor createSudouersProc( |
| | | private Processor createIPTablesProc() { |
| | | return new ShellProcessor("mk-iptables-rules Accounting"); |
| | | } |
| | | |
| | | private Processor createSudouersProc( |
| | | Map<String, String> hiveValues, |
| | | List<Map<String, String>> pacValuesList) throws ProcessorException { |
| | | return new TemplateProcessor("/de/hsadmin/mods/pac/sudoers.jtpl", hiveValues, pacValuesList.iterator(), "/etc/sudoers", true); |
| | | } |
| | | |
| | | private TemplateProcessor createProftpdConfProc( |
| | | private Processor createProftpdConfProc( |
| | | Map<String, String> hiveValues, |
| | | List<Map<String, String>> pacValuesList) throws ProcessorException { |
| | | return new TemplateProcessor("/de/hsadmin/mods/pac/proftpd-conf.jtpl", hiveValues, pacValuesList.iterator(), "/etc/proftpd/proftpd.conf", true); |
| | | } |
| | | |
| | | private ShellProcessor createAddUserProc(String pacName, UnixUser unixUser, |
| | | String password) { |
| | | private Processor createAddUserProc(String pacName, UnixUser unixUser, String password) { |
| | | return new ShellProcessor( |
| | | "newusers", pacName + ":" + password + ":" |
| | | + unixUser.getUserId() + ":" + unixUser.getUserId() |
| | |
| | | + ":" + unixUser.getShell() + "\n"); |
| | | } |
| | | |
| | | private ShellProcessor createDelUserProc(String pacName) { |
| | | private Processor createSetQuotaProc(Pac pac) { |
| | | int quota = 128; |
| | | Set<PacComponent> pacComponents = pac.getPacComponents(); |
| | | for (PacComponent pacComponent : pacComponents) { |
| | | BaseComponent baseComponent = pacComponent.getBaseComponent(); |
| | | String feature = baseComponent.getFeature(); |
| | | if ("QUOTA".equals(feature)) { |
| | | quota = pacComponent.getQuantity(); |
| | | } |
| | | } |
| | | int blocksSoft = quota * 1024; |
| | | int blocksHard = quota * 1024 * 2; |
| | | int inodesSoft = blocksSoft / 4; |
| | | int inodesHard = blocksHard / 4; |
| | | return new ShellProcessor("setquota -g " + pac.getName() + " " |
| | | + blocksSoft + " " + blocksHard + " " |
| | | + inodesSoft + " " + inodesHard + " " |
| | | + "`df /home/pacs/ | tail -n1 | cut -d' ' -f1`"); |
| | | } |
| | | |
| | | private Processor createDelUserProc(String pacName) { |
| | | return new ShellProcessor("rm -rf /home/pacs/" + pacName + "/* && deluser --remove-all-files " + pacName + ">/dev/null 2>&1"); |
| | | } |
| | | |
| | | private ShellProcessor createMakePacDirectoryStructure(UnixUser unixUser) { |
| | | private Processor createMakePacDirectoryStructure(UnixUser unixUser) { |
| | | return new ShellProcessor("chmod 711 " + unixUser.getHomedir() + " && " + |
| | | "su -l " + unixUser.getName() + " -s \"/bin/bash\" -c \"mkdir -p " + |
| | | unixUser.getHomedir() + "/doms " + |
| | |
| | | setParams.put("contact_city", "Musterstadt"); |
| | | setParams.put("contact_country", "D"); |
| | | setParams.put("contact_phone_private", "+49 9999 123456"); |
| | | setParams.put("contact_email", "rainer.mustermann@example.org"); |
| | | setParams.put("contact_email", "test@ostwall195.de"); |
| | | Object[] params = new Object[] { user, |
| | | cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), |
| | | setParams }; |
| | |
| | | import org.apache.xmlrpc.client.XmlRpcClient; |
| | | import org.junit.After; |
| | | import org.junit.Before; |
| | | import org.junit.Ignore; |
| | | import org.junit.Test; |
| | | |
| | | public class MysqlUserTest { |
| | |
| | | import org.apache.xmlrpc.client.XmlRpcClient; |
| | | import org.junit.After; |
| | | import org.junit.Before; |
| | | import org.junit.Ignore; |
| | | import org.junit.Test; |
| | | |
| | | public class PgsqlUserTest { |
| | |
| | | @RunWith(Suite.class) |
| | | @Suite.SuiteClasses({ |
| | | InitDataTest.class, |
| | | PacTest.class, |
| | | UnixUserTest.class, |
| | | MysqlUserTest.class, |
| | | MysqlDbTest.class, |
| | | PgsqlUserTest.class, |
| | | PgsqlDbTest.class, |
| | | // PacTest.class, |
| | | // UnixUserTest.class, |
| | | // MysqlUserTest.class, |
| | | // MysqlDbTest.class, |
| | | // PgsqlUserTest.class, |
| | | // PgsqlDbTest.class, |
| | | // EMailAliasTest.class, |
| | | // DomainTest.class, |
| | | // EMailAddressTest.class, |
| | | CustomerTest.class |
| | | // CustomerTest.class |
| | | // HostmasterTest.class, |
| | | // QueueTaskTest.class |
| | | }) |