setquota, traffic accounting
This commit is contained in:
parent
deea1a494b
commit
f5c673054e
25
hsarback/src/de/hsadmin/core/util/PasswordTool.java
Normal file
25
hsarback/src/de/hsadmin/core/util/PasswordTool.java
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -25,6 +25,9 @@ import de.hsadmin.mods.user.UnixUser;
|
|||||||
|
|
||||||
public class DomainProcessorFactory implements EntityProcessorFactory {
|
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 {
|
public <T extends AbstractEntity> Processor createCreateProcessor(EntityManager em, T entity) throws ProcessorException {
|
||||||
String hiveName = entity.getHiveName();
|
String hiveName = entity.getHiveName();
|
||||||
Domain dom = (Domain) entity;
|
Domain dom = (Domain) entity;
|
||||||
@ -187,11 +190,13 @@ public class DomainProcessorFactory implements EntityProcessorFactory {
|
|||||||
private CompoundProcessor createDomainDirectoriesProcessor(Domain dom, Map<String, String> templateVars) throws ProcessorException {
|
private CompoundProcessor createDomainDirectoriesProcessor(Domain dom, Map<String, String> templateVars) throws ProcessorException {
|
||||||
UnixUser domUser = dom.getUser();
|
UnixUser domUser = dom.getUser();
|
||||||
String domName = dom.getName();
|
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 domsDir = domUser.getHomedir() + "/doms";
|
||||||
String userName = domUser.getName();
|
String userName = domUser.getName();
|
||||||
String domainDir = domsDir + "/" + dom.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 =
|
Processor mkDomainDirProzessor =
|
||||||
new ShellProcessor(
|
new ShellProcessor(
|
||||||
"mkdir --mode=1550 --parents " + domsDir + " && " +
|
"mkdir --mode=1550 --parents " + domsDir + " && " +
|
||||||
@ -220,18 +225,20 @@ public class DomainProcessorFactory implements EntityProcessorFactory {
|
|||||||
domDirsProcessor.appendProcessor(
|
domDirsProcessor.appendProcessor(
|
||||||
new CreateFileProcessor("/de/hsadmin/mods/dom/index.html.jtpl", templateVars, domainDir + "/subs-ssl/www/index.html", userName, pacName, "644")
|
new CreateFileProcessor("/de/hsadmin/mods/dom/index.html.jtpl", templateVars, domainDir + "/subs-ssl/www/index.html", userName, pacName, "644")
|
||||||
);
|
);
|
||||||
domDirsProcessor.appendProcessor(
|
if (dynamicWeb) {
|
||||||
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/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(
|
domDirsProcessor.appendProcessor(
|
||||||
new ShellProcessor("ln -s " + domainDir + " /home/doms/ && " +
|
new ShellProcessor("ln -s " + domainDir + " /home/doms/ && " +
|
||||||
"chown --no-dereference " + userName + ":httpd /home/doms/" + domName
|
"chown --no-dereference " + userName + ":httpd /home/doms/" + domName
|
||||||
@ -269,7 +276,7 @@ public class DomainProcessorFactory implements EntityProcessorFactory {
|
|||||||
if (domName.equals(pac.getName() + ".hostsharing.net")) {
|
if (domName.equals(pac.getName() + ".hostsharing.net")) {
|
||||||
return "/de/hsadmin/mods/dom/httpd-vhost-dynamic.jtpl";
|
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-dynamic.jtpl";
|
||||||
}
|
}
|
||||||
return "/de/hsadmin/mods/dom/httpd-vhost-static.jtpl";
|
return "/de/hsadmin/mods/dom/httpd-vhost-static.jtpl";
|
||||||
|
@ -272,6 +272,10 @@ public class Pac extends AbstractEntity implements Serializable {
|
|||||||
|| super.isReadAllowedFor(loginUser);
|
|| super.isReadAllowedFor(loginUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDynamicWeb() {
|
||||||
|
return getBasepac().getName().startsWith("DW");
|
||||||
|
}
|
||||||
|
|
||||||
public static String restriction() {
|
public static String restriction() {
|
||||||
return
|
return
|
||||||
// all pacs of customer
|
// all pacs of customer
|
||||||
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import javax.persistence.EntityManager;
|
||||||
@ -18,22 +17,11 @@ import de.hsadmin.core.qserv.ProcessorException;
|
|||||||
import de.hsadmin.core.qserv.ShellProcessor;
|
import de.hsadmin.core.qserv.ShellProcessor;
|
||||||
import de.hsadmin.core.qserv.TemplateProcessor;
|
import de.hsadmin.core.qserv.TemplateProcessor;
|
||||||
import de.hsadmin.core.qserv.WaitingTasksProcessor;
|
import de.hsadmin.core.qserv.WaitingTasksProcessor;
|
||||||
|
import de.hsadmin.core.util.PasswordTool;
|
||||||
import de.hsadmin.mods.user.UnixUser;
|
import de.hsadmin.mods.user.UnixUser;
|
||||||
import de.rrze.jpwgen.flags.PwGeneratorFlagBuilder;
|
|
||||||
import de.rrze.jpwgen.impl.PwGenerator;
|
|
||||||
|
|
||||||
public class PacProcessorFactory implements EntityProcessorFactory {
|
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
|
@Override
|
||||||
public <T extends AbstractEntity> Processor createCreateProcessor(
|
public <T extends AbstractEntity> Processor createCreateProcessor(
|
||||||
EntityManager em, T entity) throws ProcessorException {
|
EntityManager em, T entity) throws ProcessorException {
|
||||||
@ -42,14 +30,16 @@ public class PacProcessorFactory implements EntityProcessorFactory {
|
|||||||
String customerEMail = pac.getCustomer().getContractualContact().getEmail();
|
String customerEMail = pac.getCustomer().getContractualContact().getEmail();
|
||||||
Hive hive = pac.getHive();
|
Hive hive = pac.getHive();
|
||||||
UnixUser unixUser = getPacAdminUser(pac);
|
UnixUser unixUser = getPacAdminUser(pac);
|
||||||
String password = PwGenerator.generatePassword(7, flagBuilder.build(), 100, random);
|
String password = PasswordTool.generatePassword();
|
||||||
Map<String, String> hiveValues = fillHiveValues(hive);
|
Map<String, String> hiveValues = fillHiveValues(hive);
|
||||||
List<Map<String, String>> pacValuesList = fillPacValuesList(hive, null);
|
List<Map<String, String>> pacValuesList = fillPacValuesList(hive, null);
|
||||||
Map<String, String> emailVars = fillEMailValues(pacName, customerEMail, password);
|
Map<String, String> emailVars = fillEMailValues(pacName, customerEMail, password);
|
||||||
Processor priProcessor = new CompoundProcessor(
|
Processor priProcessor = new CompoundProcessor(
|
||||||
createAddUserProc(pacName, unixUser, password),
|
createAddUserProc(pacName, unixUser, password),
|
||||||
|
createSetQuotaProc(pac),
|
||||||
createEtcHostsProc(hiveValues, pacValuesList),
|
createEtcHostsProc(hiveValues, pacValuesList),
|
||||||
createNetworkInterfacesProc(hiveValues, pacValuesList),
|
createNetworkInterfacesProc(hiveValues, pacValuesList),
|
||||||
|
createIPTablesProc(),
|
||||||
createSudouersProc(hiveValues, pacValuesList),
|
createSudouersProc(hiveValues, pacValuesList),
|
||||||
createProftpdConfProc(hiveValues, pacValuesList),
|
createProftpdConfProc(hiveValues, pacValuesList),
|
||||||
createMakePacDirectoryStructure(unixUser));
|
createMakePacDirectoryStructure(unixUser));
|
||||||
@ -65,8 +55,7 @@ public class PacProcessorFactory implements EntityProcessorFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T extends AbstractEntity> Processor createDeleteProcessor(
|
public <T extends AbstractEntity> Processor createDeleteProcessor(EntityManager em, T entity) throws ProcessorException {
|
||||||
EntityManager em, T entity) throws ProcessorException {
|
|
||||||
Pac pac = (Pac) entity;
|
Pac pac = (Pac) entity;
|
||||||
Hive hive = pac.getHive();
|
Hive hive = pac.getHive();
|
||||||
Map<String, String> hiveValues = fillHiveValues(hive);
|
Map<String, String> hiveValues = fillHiveValues(hive);
|
||||||
@ -80,32 +69,35 @@ public class PacProcessorFactory implements EntityProcessorFactory {
|
|||||||
return waitingProcessor;
|
return waitingProcessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
private TemplateProcessor createEtcHostsProc(
|
private Processor createEtcHostsProc(
|
||||||
Map<String, String> hiveValues,
|
Map<String, String> hiveValues,
|
||||||
List<Map<String, String>> pacValuesList) throws ProcessorException {
|
List<Map<String, String>> pacValuesList) throws ProcessorException {
|
||||||
return new TemplateProcessor("/de/hsadmin/mods/pac/hosts.jtpl", hiveValues, pacValuesList.iterator(), "/etc/hosts", true);
|
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,
|
Map<String, String> hiveValues,
|
||||||
List<Map<String, String>> pacValuesList) throws ProcessorException {
|
List<Map<String, String>> pacValuesList) throws ProcessorException {
|
||||||
return new TemplateProcessor("/de/hsadmin/mods/pac/interfaces.jtpl", hiveValues, pacValuesList.iterator(), "/etc/network/interfaces", true);
|
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,
|
Map<String, String> hiveValues,
|
||||||
List<Map<String, String>> pacValuesList) throws ProcessorException {
|
List<Map<String, String>> pacValuesList) throws ProcessorException {
|
||||||
return new TemplateProcessor("/de/hsadmin/mods/pac/sudoers.jtpl", hiveValues, pacValuesList.iterator(), "/etc/sudoers", true);
|
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,
|
Map<String, String> hiveValues,
|
||||||
List<Map<String, String>> pacValuesList) throws ProcessorException {
|
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);
|
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,
|
private Processor createAddUserProc(String pacName, UnixUser unixUser, String password) {
|
||||||
String password) {
|
|
||||||
return new ShellProcessor(
|
return new ShellProcessor(
|
||||||
"newusers", pacName + ":" + password + ":"
|
"newusers", pacName + ":" + password + ":"
|
||||||
+ unixUser.getUserId() + ":" + unixUser.getUserId()
|
+ unixUser.getUserId() + ":" + unixUser.getUserId()
|
||||||
@ -113,11 +105,31 @@ public class PacProcessorFactory implements EntityProcessorFactory {
|
|||||||
+ ":" + unixUser.getShell() + "\n");
|
+ ":" + 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");
|
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() + " && " +
|
return new ShellProcessor("chmod 711 " + unixUser.getHomedir() + " && " +
|
||||||
"su -l " + unixUser.getName() + " -s \"/bin/bash\" -c \"mkdir -p " +
|
"su -l " + unixUser.getName() + " -s \"/bin/bash\" -c \"mkdir -p " +
|
||||||
unixUser.getHomedir() + "/doms " +
|
unixUser.getHomedir() + "/doms " +
|
||||||
|
@ -55,7 +55,7 @@ public class InitDataTest {
|
|||||||
setParams.put("contact_city", "Musterstadt");
|
setParams.put("contact_city", "Musterstadt");
|
||||||
setParams.put("contact_country", "D");
|
setParams.put("contact_country", "D");
|
||||||
setParams.put("contact_phone_private", "+49 9999 123456");
|
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,
|
Object[] params = new Object[] { user,
|
||||||
cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()),
|
cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()),
|
||||||
setParams };
|
setParams };
|
||||||
|
@ -12,7 +12,6 @@ import org.apache.xmlrpc.XmlRpcException;
|
|||||||
import org.apache.xmlrpc.client.XmlRpcClient;
|
import org.apache.xmlrpc.client.XmlRpcClient;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class MysqlUserTest {
|
public class MysqlUserTest {
|
||||||
|
@ -12,7 +12,6 @@ import org.apache.xmlrpc.XmlRpcException;
|
|||||||
import org.apache.xmlrpc.client.XmlRpcClient;
|
import org.apache.xmlrpc.client.XmlRpcClient;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class PgsqlUserTest {
|
public class PgsqlUserTest {
|
||||||
|
@ -6,16 +6,16 @@ import org.junit.runners.Suite;
|
|||||||
@RunWith(Suite.class)
|
@RunWith(Suite.class)
|
||||||
@Suite.SuiteClasses({
|
@Suite.SuiteClasses({
|
||||||
InitDataTest.class,
|
InitDataTest.class,
|
||||||
PacTest.class,
|
// PacTest.class,
|
||||||
UnixUserTest.class,
|
// UnixUserTest.class,
|
||||||
MysqlUserTest.class,
|
// MysqlUserTest.class,
|
||||||
MysqlDbTest.class,
|
// MysqlDbTest.class,
|
||||||
PgsqlUserTest.class,
|
// PgsqlUserTest.class,
|
||||||
PgsqlDbTest.class,
|
// PgsqlDbTest.class,
|
||||||
// EMailAliasTest.class,
|
// EMailAliasTest.class,
|
||||||
// DomainTest.class,
|
// DomainTest.class,
|
||||||
// EMailAddressTest.class,
|
// EMailAddressTest.class,
|
||||||
CustomerTest.class
|
// CustomerTest.class
|
||||||
// HostmasterTest.class,
|
// HostmasterTest.class,
|
||||||
// QueueTaskTest.class
|
// QueueTaskTest.class
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user