Merge branch 'master' of ssh://hsh04-source@hsh04.hostsharing.net/home/doms/source.hostsharing.net/source/hsadmin.git

This commit is contained in:
Purodha Blissenbach 2012-09-21 15:18:30 +02:00
commit 6bda687298
6 changed files with 99 additions and 37 deletions

View File

@ -39,7 +39,7 @@
<target name="deploy" depends="war">
<delete dir="${hsar.deploy.dir}/hsar" />
<copy file="build/hsar.war" todir="${hsar.deploy.dir}" />
<sleep minutes="2"/>
<!-- <sleep minutes="2"/> -->
</target>
<target name="jar" depends="enhance">

View File

@ -27,8 +27,13 @@ import de.hsadmin.mods.user.UnixUser;
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" };
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();
@ -370,17 +375,32 @@ public class DomainProcessorFactory implements EntityProcessorFactory {
String domDir = pacDir + "/doms/" + pac.getName() + ".hostsharing.net";
String[] sourceDirs = new String[] { "web", "web-ssl", "cgi", "cgi-ssl", "fastcgi", "fastcgi-ssl" } ;
String[] targetDirs = new String[] { "htdocs", "htdocs-ssl", "cgi", "cgi-ssl", "fastcgi", "fastcgi-ssl" } ;
CompoundProcessor processor = new CompoundProcessor(
new ShellProcessor("rm -rf " + domDir + "/subs " + domDir + "/htdocs/.htaccess "
+ domDir + "/subs-ssl " + domDir + "/htdocs-ssl/.htaccess "));
CompoundProcessor processor = new CompoundProcessor();
for (int idx = 0; idx < targetDirs.length; idx++) {
processor.appendProcessor(
new ShellProcessor("rm -rf " + domDir + targetDirs[idx]));
}
for (int idx = 0; idx < sourceDirs.length; idx++) {
processor.appendProcessor(
new ShellProcessor("shopt -s dotglob && ls " + pacDir + "/" + sourceDirs[idx] + " >/dev/null 2>&1" +
" && mv " + pacDir + "/" + sourceDirs[idx] + "/* " + domDir + "/" + targetDirs[idx] + "/ " +
" && ( rmdir " + pacDir + "/" + sourceDirs[idx] + " || rm " + pacDir + "/" + sourceDirs[idx] + " ) " +
" && mv " + pacDir + "/" + sourceDirs[idx] + domDir + "/" + targetDirs[idx] +
" || echo 'directory " + pacDir + "/" + sourceDirs[idx] + " not found'"));
}
return processor;
}
processor.appendProcessor(
new ShellProcessor("test -L " + domDir + "/htdocs" +
" && `stat -c '%N' " + domDir + "/htdocs |sed -e's/^.*`//' -e\"s/'$//\"` = web-ssl " +
" && cd " + domDir +
" && rm " + domDir + "/htdocs" +
" && ln -sf htdocs-ssl htdocs" +
" && chown -h " + pac + ":" + pac + " " + domDir + "/htdocs"));
processor.appendProcessor(
new ShellProcessor("test -L " + domDir + "/htdocs-ssl" +
" && `stat -c '%N' " + domDir + "/htdocs-ssl |sed -e's/^.*`//' -e\"s/'$//\"` = web " +
" && cd " + domDir +
" && rm " + domDir + "/htdocs-ssl" +
" && ln -sf htdocs htdocs-ssl" +
" && chown -h " + pac + ":" + pac + " " + domDir + "/htdocs-ssl"));
return processor;
}
private String selectVHostTemplate(Domain dom) {

View File

@ -75,7 +75,7 @@ public class Pac extends AbstractEntity implements Serializable {
@ManyToOne(fetch = EAGER)
private INetAddress oldINetAddr;
@OneToMany(fetch = LAZY, cascade = ALL, mappedBy="pac")
@OneToMany(fetch = EAGER, cascade = ALL, mappedBy="pac")
private Set<PacComponent> pacComponents;
@OneToMany(fetch = LAZY, cascade = ALL, mappedBy="pac")

View File

@ -110,9 +110,16 @@ public class PacModuleImpl extends AbstractModuleImpl {
}
@Override
public AbstractEntity update(AbstractEntity existingEntity)
public AbstractEntity update(AbstractEntity entity)
throws HSAdminException {
throw new AuthorisationException(getTransaction().getLoginUser(), "update", existingEntity);
UnixUser loginUser = getTransaction().getLoginUser();
if (entity instanceof Pac) {
Pac pac = (Pac) entity;
} else {
throw new AuthorisationException(loginUser, "update", entity);
}
needsWriteAccessOn(entity, "update");
return super.update(entity);
}
@Override
@ -154,4 +161,19 @@ public class PacModuleImpl extends AbstractModuleImpl {
super.delete(existingEntity);
}
private void needsWriteAccessOn(AbstractEntity entity, String method) throws AuthorisationException {
UnixUser loginUser = getTransaction().getLoginUser();
if (entity instanceof Pac) {
Pac pac = (Pac) entity;
String aLoginUserName = loginUser.getName();
boolean isPacAdmin = loginUser.hasPacAdminRoleFor(pac);
boolean isCustomer = aLoginUserName.equals(pac.getCustomer().getName());
boolean isHostmaster = loginUser.hasHostmasterRole();
if (!isPacAdmin && !isCustomer && !isHostmaster) {
throw new AuthorisationException(loginUser, method, pac);
}
} else {
throw new AuthorisationException(loginUser, method, entity);
}
}
}

View File

@ -275,7 +275,7 @@ public class UnixUser extends AbstractEntity implements Serializable {
return getName().equals(cust.getName()) || hasHostmasterRole();
}
public boolean hasPacAdminRoleFor(de.hsadmin.mods.pac.Pac pac) {
public boolean hasPacAdminRoleFor(Pac pac) {
return pac != null &&
(pac.getName().equals(getName())
|| hasCustomerRoleFor(pac.getCustomer()) );

View File

@ -1,10 +1,9 @@
package de.hsadmin.remote;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.Set;
import de.hsadmin.core.model.AbstractEntity;
import de.hsadmin.core.util.TextUtil;
@ -27,27 +26,38 @@ public class PacRemote extends AbstractRemote {
resultMap.put("curinetaddr", pac.getCurINetAddr().getInetAddr());
resultMap.put("created", TextUtil.format(pac.getCreated()));
resultMap.put("basepac", pac.getBasepac().getName());
SortedSet<PacComponent> sortedComponents = new TreeSet<PacComponent>(new Comparator<PacComponent>() {
@Override
public int compare(PacComponent o1, PacComponent o2) {
return o2.getBaseComponent().getSorting() - o1.getBaseComponent().getSorting();
}
});
sortedComponents.addAll(pac.getPacComponents());
StringBuffer bf = new StringBuffer();
boolean empty = true;
for (PacComponent comp : sortedComponents) {
if (comp.getQuantity() > 0) {
if (!empty) {
bf.append("; ");
}
bf.append(comp.getBaseComponent().getFeature());
bf.append("=");
bf.append(comp.getQuantity());
empty = false;
Map<String, Object> components = new HashMap<String, Object>();
Set<PacComponent> pacComponents = pac.getPacComponents();
for (PacComponent comp : pacComponents) {
int quantity = comp.getQuantity();
if (quantity > 0) {
components.put(comp.getBaseComponent().getFeature(), Integer.toString(quantity));
}
}
resultMap.put("components", bf.toString());
resultMap.put("components", components);
// SortedSet<PacComponent> sortedComponents = new TreeSet<PacComponent>(new Comparator<PacComponent>() {
// @Override
// public int compare(PacComponent o1, PacComponent o2) {
// return o2.getBaseComponent().getSorting() - o1.getBaseComponent().getSorting();
// }
// });
// sortedComponents.addAll(pac.getPacComponents());
// StringBuffer bf = new StringBuffer();
// boolean empty = true;
// for (PacComponent comp : sortedComponents) {
// if (comp.getQuantity() > 0) {
// if (!empty) {
// bf.append("; ");
// }
// bf.append(comp.getBaseComponent().getFeature());
// bf.append("=");
// bf.append(comp.getQuantity());
// empty = false;
// }
// }
// resultMap.put("components", bf.toString());
}
@Override
@ -86,7 +96,17 @@ public class PacRemote extends AbstractRemote {
hive.setName(hiveName);
pac.setHive(hive);
}
pac.setName((String) setParams.get("name"));
Object componentsObj = setParams.get("components");
if (componentsObj != null && componentsObj instanceof Map) {
Map<?, ?> componentsMap = (Map<?, ?>) componentsObj;
for (Object key : componentsMap.keySet()) {
pac.getPacComponent(key.toString()).setQuantity(Integer.parseInt(componentsMap.get(key).toString()));
}
}
Object nameParamObj = setParams.get("name");
if (nameParamObj != null && nameParamObj instanceof String) {
pac.setName((String) nameParamObj);
}
}
@Override