Merge remote-tracking branch 'origin/master'
| | |
| | | <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"> |
| | |
| | | -- 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 |
| | | -- |
| | |
| | | ALTER TABLE ONLY queue_task |
| | | 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 |
| | | INCREMENT BY 1 |
| | | NO MAXVALUE |
| | |
| | | |
| | | 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(); |
| | |
| | | @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") |
| | |
| | | } |
| | | |
| | | @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 |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | 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()) ); |
| | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | 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 |