X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FdbObjects%2FOrganisation.java;h=9beb0f57823e65e57d7c683c4aafaa2de69378ac;hb=6f951295dfd62c5fa1ddb0977febeb58728bec50;hp=25a11b7a2fc897f36f75ffa9c53ce67a7c16bbff;hpb=da72882d9ff14bd4077d9f71ae134a67581c49cb;p=gigi.git diff --git a/src/org/cacert/gigi/dbObjects/Organisation.java b/src/org/cacert/gigi/dbObjects/Organisation.java index 25a11b7a..9beb0f57 100644 --- a/src/org/cacert/gigi/dbObjects/Organisation.java +++ b/src/org/cacert/gigi/dbObjects/Organisation.java @@ -3,6 +3,7 @@ package org.cacert.gigi.dbObjects; import java.util.ArrayList; import java.util.List; +import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.DatabaseConnection; import org.cacert.gigi.database.GigiPreparedStatement; import org.cacert.gigi.database.GigiResultSet; @@ -49,19 +50,26 @@ public class Organisation extends CertificateOwner { private String city; - public Organisation(String name, String state, String province, String city, User creator) { + private String email; + + public Organisation(String name, String state, String province, String city, String email, User creator) throws GigiApiException { + if ( !creator.isInGroup(Group.ORGASSURER)) { + throw new GigiApiException("Only org-assurers may create organisations."); + } this.name = name; this.state = state; this.province = province; this.city = city; + this.email = email; int id = super.insert(); - GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO organisations SET id=?, name=?, state=?, province=?, city=?, creator=?"); + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO organisations SET id=?, name=?, state=?, province=?, city=?, contactEmail=?, creator=?"); ps.setInt(1, id); ps.setString(2, name); ps.setString(3, state); ps.setString(4, province); ps.setString(5, city); - ps.setInt(6, creator.getId()); + ps.setString(6, email); + ps.setInt(7, creator.getId()); synchronized (Organisation.class) { ps.execute(); } @@ -74,6 +82,7 @@ public class Organisation extends CertificateOwner { state = rs.getString("state"); province = rs.getString("province"); city = rs.getString("city"); + email = rs.getString("contactEmail"); } public String getName() { @@ -92,6 +101,10 @@ public class Organisation extends CertificateOwner { return city; } + public String getContactEmail() { + return email; + } + public static synchronized Organisation getById(int id) { CertificateOwner co = CertificateOwner.getById(id); if (co instanceof Organisation) { @@ -100,7 +113,13 @@ public class Organisation extends CertificateOwner { return null; } - public synchronized void addAdmin(User admin, User actor, boolean master) { + public synchronized void addAdmin(User admin, User actor, boolean master) throws GigiApiException { + if ( !admin.canAssure()) { + throw new GigiApiException("Cannot add non-assurer."); + } + if ( !actor.isInGroup(Group.ORGASSURER) && !isMaster(actor)) { + throw new GigiApiException("Only org assurer or master-admin may add admins to an organisation."); + } GigiPreparedStatement ps1 = DatabaseConnection.getInstance().prepare("SELECT 1 FROM org_admin WHERE orgid=? AND memid=? AND deleted is null"); ps1.setInt(1, getId()); ps1.setInt(2, admin.getId()); @@ -116,7 +135,10 @@ public class Organisation extends CertificateOwner { ps2.execute(); } - public void removeAdmin(User admin, User actor) { + public void removeAdmin(User admin, User actor) throws GigiApiException { + if ( !actor.isInGroup(Group.ORGASSURER) && !isMaster(actor)) { + throw new GigiApiException("Only org assurer or master-admin may delete admins from an organisation."); + } GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE org_admin SET deleter=?, deleted=NOW() WHERE orgid=? AND memid=?"); ps.setInt(1, actor.getId()); ps.setInt(2, getId()); @@ -152,21 +174,37 @@ public class Organisation extends CertificateOwner { return resu; } - public void update(String o, String c, String st, String l) { - for (Certificate cert : getCertificates()) { + public void update(String o, String c, String st, String l, String mail) { + for (Certificate cert : getCertificates(false)) { if (cert.getStatus() == CertificateStatus.ISSUED) { cert.revoke(); } } - GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE organisations SET name=?, state=?, province=?, city=?"); + GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE organisations SET name=?, state=?, province=?, city=?, contactEmail=?"); ps.setString(1, o); ps.setString(2, c); ps.setString(3, st); ps.setString(4, l); + ps.setString(5, mail); ps.execute(); + email = mail; name = o; state = c; province = st; city = l; } + + public boolean isMaster(User u) { + for (Affiliation i : getAllAdmins()) { + if (i.isMaster() && i.getTarget() == u) { + return true; + } + } + return false; + } + + @Override + public boolean isValidEmail(String email) { + return isValidDomain(email.split("@", 2)[1]); + } }