Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
be606b0e1f
@ -39,7 +39,7 @@
|
|||||||
<target name="deploy" depends="war">
|
<target name="deploy" depends="war">
|
||||||
<delete dir="${hsar.deploy.dir}/hsar" />
|
<delete dir="${hsar.deploy.dir}/hsar" />
|
||||||
<copy file="build/hsar.war" todir="${hsar.deploy.dir}" />
|
<copy file="build/hsar.war" todir="${hsar.deploy.dir}" />
|
||||||
<sleep minutes="2"/>
|
<!-- <sleep minutes="2"/> -->
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="jar" depends="enhance">
|
<target name="jar" depends="enhance">
|
||||||
|
@ -0,0 +1,80 @@
|
|||||||
|
-- Migrate database from version 2.1 to version 2.2
|
||||||
|
--
|
||||||
|
-- domain options
|
||||||
|
--
|
||||||
|
CREATE SEQUENCE domain_option_id_seq
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MAXVALUE
|
||||||
|
NO MINVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
CREATE TABLE domain_option (
|
||||||
|
domain_option_id integer DEFAULT nextval(('"domain_option_id_seq"'::text)::regclass) NOT NULL,
|
||||||
|
domain_option_name character varying(50) NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE ONLY domain_option
|
||||||
|
ADD CONSTRAINT pk_domain_option PRIMARY KEY (domain_option_id);
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX domain_option_name_idx ON domain_option USING btree ( domain_option_name );
|
||||||
|
|
||||||
|
CREATE TABLE domain__domain_option (
|
||||||
|
domain_option_id integer NOT NULL,
|
||||||
|
domain_id integer NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE ONLY domain__domain_option
|
||||||
|
ADD CONSTRAINT pk_domain__domain_option PRIMARY KEY (domain_option_id, domain_id);
|
||||||
|
|
||||||
|
ALTER TABLE ONLY domain__domain_option
|
||||||
|
ADD CONSTRAINT domain_option_id_fkey FOREIGN KEY (domain_option_id)
|
||||||
|
REFERENCES domain_option(domain_option_id) DEFERRABLE;
|
||||||
|
|
||||||
|
ALTER TABLE ONLY domain__domain_option
|
||||||
|
ADD CONSTRAINT domain_id_fkey FOREIGN KEY (domain_id)
|
||||||
|
REFERENCES domain(domain_id) DEFERRABLE;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- table: domain_option
|
||||||
|
--
|
||||||
|
INSERT INTO domain_option (domain_option_name)
|
||||||
|
VALUES ('backupmxforexternalmx');
|
||||||
|
INSERT INTO domain_option (domain_option_name)
|
||||||
|
VALUES ('greylisting');
|
||||||
|
INSERT INTO domain_option (domain_option_name)
|
||||||
|
VALUES ('htdocsfallback');
|
||||||
|
INSERT INTO domain_option (domain_option_name)
|
||||||
|
VALUES ('includes');
|
||||||
|
INSERT INTO domain_option (domain_option_name)
|
||||||
|
VALUES ('indexes');
|
||||||
|
INSERT INTO domain_option (domain_option_name)
|
||||||
|
VALUES ('multiviews');
|
||||||
|
--
|
||||||
|
-- new domain options settings
|
||||||
|
--
|
||||||
|
-- existing default = ON
|
||||||
|
--
|
||||||
|
INSERT INTO domain__domain_option SELECT domain_option_id, domain_id
|
||||||
|
FROM domain, domain_option
|
||||||
|
WHERE domain_option.domain_option_name = 'greylisting' ;
|
||||||
|
INSERT INTO domain__domain_option SELECT domain_option_id, domain_id
|
||||||
|
FROM domain, domain_option
|
||||||
|
WHERE domain_option.domain_option_name = 'htdocsfalback' ;
|
||||||
|
INSERT INTO domain__domain_option SELECT domain_option_id, domain_id
|
||||||
|
FROM domain, domain_option
|
||||||
|
WHERE domain_option.domain_option_name = 'includes' ;
|
||||||
|
INSERT INTO domain__domain_option SELECT domain_option_id, domain_id
|
||||||
|
FROM domain, domain_option
|
||||||
|
WHERE domain_option.domain_option_name = 'indexes' ;
|
||||||
|
INSERT INTO domain__domain_option SELECT domain_option_id, domain_id
|
||||||
|
FROM domain, domain_option
|
||||||
|
WHERE domain_option.domain_option_name = 'multiviews' ;
|
||||||
|
--
|
||||||
|
-- existing default = OFF
|
||||||
|
--
|
||||||
|
DELETE FROM domain__domain_option USING domain_option
|
||||||
|
WHERE domain__domain_option.domain_option_id = domain_option.domain_option_id
|
||||||
|
AND domain_option.domain_option_name = 'backupmxforexternalmx' ;
|
||||||
|
--
|
||||||
|
-- End of migratino to version 2.2
|
||||||
|
--
|
@ -900,6 +900,10 @@ ALTER TABLE ONLY component
|
|||||||
ALTER TABLE ONLY queue_task
|
ALTER TABLE ONLY queue_task
|
||||||
ADD CONSTRAINT queue_task_user_id_fkey FOREIGN KEY (user_id) REFERENCES unixuser(unixuser_id) ON DELETE SET NULL;
|
ADD CONSTRAINT queue_task_user_id_fkey FOREIGN KEY (user_id) REFERENCES unixuser(unixuser_id) ON DELETE SET NULL;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- domain options
|
||||||
|
--
|
||||||
|
|
||||||
CREATE SEQUENCE domain_option_id_seq
|
CREATE SEQUENCE domain_option_id_seq
|
||||||
INCREMENT BY 1
|
INCREMENT BY 1
|
||||||
NO MAXVALUE
|
NO MAXVALUE
|
||||||
|
@ -27,8 +27,13 @@ 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[] DW_STRUCTURE = new String[] {
|
||||||
private static final String[] SW_STRUCTURE = new String[] { "htdocs", "htdocs-ssl", "subs", "subs/www", "subs-ssl", "subs-ssl/www", "etc", "var" };
|
"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();
|
||||||
|
@ -75,7 +75,7 @@ public class Pac extends AbstractEntity implements Serializable {
|
|||||||
@ManyToOne(fetch = EAGER)
|
@ManyToOne(fetch = EAGER)
|
||||||
private INetAddress oldINetAddr;
|
private INetAddress oldINetAddr;
|
||||||
|
|
||||||
@OneToMany(fetch = LAZY, cascade = ALL, mappedBy="pac")
|
@OneToMany(fetch = EAGER, cascade = ALL, mappedBy="pac")
|
||||||
private Set<PacComponent> pacComponents;
|
private Set<PacComponent> pacComponents;
|
||||||
|
|
||||||
@OneToMany(fetch = LAZY, cascade = ALL, mappedBy="pac")
|
@OneToMany(fetch = LAZY, cascade = ALL, mappedBy="pac")
|
||||||
|
@ -110,9 +110,16 @@ public class PacModuleImpl extends AbstractModuleImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AbstractEntity update(AbstractEntity existingEntity)
|
public AbstractEntity update(AbstractEntity entity)
|
||||||
throws HSAdminException {
|
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
|
@Override
|
||||||
@ -154,4 +161,19 @@ public class PacModuleImpl extends AbstractModuleImpl {
|
|||||||
super.delete(existingEntity);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -275,7 +275,7 @@ public class UnixUser extends AbstractEntity implements Serializable {
|
|||||||
return getName().equals(cust.getName()) || hasHostmasterRole();
|
return getName().equals(cust.getName()) || hasHostmasterRole();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasPacAdminRoleFor(de.hsadmin.mods.pac.Pac pac) {
|
public boolean hasPacAdminRoleFor(Pac pac) {
|
||||||
return pac != null &&
|
return pac != null &&
|
||||||
(pac.getName().equals(getName())
|
(pac.getName().equals(getName())
|
||||||
|| hasCustomerRoleFor(pac.getCustomer()) );
|
|| hasCustomerRoleFor(pac.getCustomer()) );
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
package de.hsadmin.remote;
|
package de.hsadmin.remote;
|
||||||
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.SortedSet;
|
import java.util.Set;
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
import de.hsadmin.core.model.AbstractEntity;
|
import de.hsadmin.core.model.AbstractEntity;
|
||||||
import de.hsadmin.core.util.TextUtil;
|
import de.hsadmin.core.util.TextUtil;
|
||||||
@ -27,27 +26,38 @@ public class PacRemote extends AbstractRemote {
|
|||||||
resultMap.put("curinetaddr", pac.getCurINetAddr().getInetAddr());
|
resultMap.put("curinetaddr", pac.getCurINetAddr().getInetAddr());
|
||||||
resultMap.put("created", TextUtil.format(pac.getCreated()));
|
resultMap.put("created", TextUtil.format(pac.getCreated()));
|
||||||
resultMap.put("basepac", pac.getBasepac().getName());
|
resultMap.put("basepac", pac.getBasepac().getName());
|
||||||
SortedSet<PacComponent> sortedComponents = new TreeSet<PacComponent>(new Comparator<PacComponent>() {
|
|
||||||
@Override
|
Map<String, Object> components = new HashMap<String, Object>();
|
||||||
public int compare(PacComponent o1, PacComponent o2) {
|
Set<PacComponent> pacComponents = pac.getPacComponents();
|
||||||
return o2.getBaseComponent().getSorting() - o1.getBaseComponent().getSorting();
|
for (PacComponent comp : pacComponents) {
|
||||||
}
|
int quantity = comp.getQuantity();
|
||||||
});
|
if (quantity > 0) {
|
||||||
sortedComponents.addAll(pac.getPacComponents());
|
components.put(comp.getBaseComponent().getFeature(), Integer.toString(quantity));
|
||||||
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());
|
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
|
@Override
|
||||||
@ -86,7 +96,17 @@ public class PacRemote extends AbstractRemote {
|
|||||||
hive.setName(hiveName);
|
hive.setName(hiveName);
|
||||||
pac.setHive(hive);
|
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
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user