`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`deleter` int(11) NULL DEFAULT NULL,
`deleted` timestamp NULL DEFAULT NULL,
- PRIMARY KEY (`orgid`, `memid`)
+ KEY (`orgid`, `memid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ps.setInt(1, id);
GigiResultSet rs = ps.executeQuery();
if ( !rs.next()) {
- System.out.println("no " + id);
+ return null;
}
if (rs.getString("uid") != null) {
myCache.put(u = new User(rs));
return null;
}
- public void addAdmin(User admin, User actor, boolean master) {
- GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO org_admin SET orgid=?, memid=?, creator=?, master=?");
- ps.setInt(1, getId());
- ps.setInt(2, admin.getId());
- ps.setInt(3, actor.getId());
- ps.setString(4, master ? "y" : "n");
- ps.execute();
+ public synchronized void addAdmin(User admin, User actor, boolean master) {
+ 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());
+ GigiResultSet result = ps1.executeQuery();
+ if (result.next()) {
+ return;
+ }
+ GigiPreparedStatement ps2 = DatabaseConnection.getInstance().prepare("INSERT INTO org_admin SET orgid=?, memid=?, creator=?, master=?");
+ ps2.setInt(1, getId());
+ ps2.setInt(2, admin.getId());
+ ps2.setInt(3, actor.getId());
+ ps2.setString(4, master ? "y" : "n");
+ ps2.execute();
}
public void removeAdmin(User admin, User actor) {
return null;
}
+ public static User getByEmail(String mail) {
+ GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT users.id FROM users inner join certOwners on certOwners.id=users.id WHERE email=? AND deleted is null");
+ ps.setString(1, mail);
+ GigiResultSet rs = ps.executeQuery();
+ if ( !rs.next()) {
+ return null;
+ }
+ return User.getById(rs.getInt(1));
+ }
+
public boolean canIssue(CertificateProfile p) {
switch (p.getCAId()) {
case 0:
--- /dev/null
+package org.cacert.gigi.pages.orga;
+
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.cacert.gigi.GigiApiException;
+import org.cacert.gigi.dbObjects.Organisation;
+import org.cacert.gigi.dbObjects.Organisation.Affiliation;
+import org.cacert.gigi.dbObjects.User;
+import org.cacert.gigi.localisation.Language;
+import org.cacert.gigi.output.Form;
+import org.cacert.gigi.output.template.IterableDataset;
+import org.cacert.gigi.output.template.Template;
+import org.cacert.gigi.pages.LoginPage;
+
+public class AffiliationForm extends Form {
+
+ Organisation o;
+
+ private static final Template t = new Template(AffiliationForm.class.getResource("AffiliationForm.templ"));
+
+ public AffiliationForm(HttpServletRequest hsr, Organisation o) {
+ super(hsr);
+ this.o = o;
+ }
+
+ @Override
+ public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException {
+ o.addAdmin(User.getByEmail(req.getParameter("email")), LoginPage.getUser(req), req.getParameter("master") != null);
+ return true;
+ }
+
+ @Override
+ protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
+ final List<Affiliation> admins = o.getAllAdmins();
+ vars.put("admins", new IterableDataset() {
+
+ Iterator<Affiliation> iter = admins.iterator();
+
+ @Override
+ public boolean next(Language l, Map<String, Object> vars) {
+ if ( !iter.hasNext())
+ return false;
+ Affiliation aff = iter.next();
+ vars.put("name", aff.getTarget().getName());
+ vars.put("master", aff.isMaster() ? l.getTranslation("master") : "");
+ return true;
+ }
+ });
+ t.output(out, l, vars);
+ }
+
+ public Organisation getOrganisation() {
+ return o;
+ }
+}
--- /dev/null
+<table align="center" valign="middle" border="0" cellspacing="0" cellpadding="0" class="wrapper dataTable">
+ <tr>
+ <th><?=_Name?></th>
+ <th><?=_Master?></th>
+ </tr>
+<? foreach($admins) { ?>
+ <tr>
+ <td><?=$name?></td>
+ <td><?=$master?></td>
+ </tr>
+<? } ?>
+</table>
+<?=_Add new admin?>:
+<input type="text" name="email">
+<?=_Master?>?
+<input type="checkbox" name="master" value="y">
+<input type="submit" name="affiliate" value="<?=_Add?>">
--- /dev/null
+<?=$editForm?>
+<?=_WARNING: updating the data will revoke all issued certificates.?>
+<?=$affForm?>
private final Template orgas = new Template(ViewOrgPage.class.getResource("ViewOrgs.templ"));
+ private final Template mainTempl = new Template(ViewOrgPage.class.getResource("EditOrg.templ"));
+
public static final String DEFAULT_PATH = "/orga";
public ViewOrgPage() {
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
try {
- Form.getForm(req, CreateOrgForm.class).submit(resp.getWriter(), req);
+ if (req.getParameter("affiliate") != null) {
+ AffiliationForm form = Form.getForm(req, AffiliationForm.class);
+ form.submit(resp.getWriter(), req);
+ resp.sendRedirect(DEFAULT_PATH + "/" + form.getOrganisation().getId());
+ } else {
+ Form.getForm(req, CreateOrgForm.class).submit(resp.getWriter(), req);
+ }
} catch (GigiApiException e) {
e.format(resp.getWriter(), getLanguage(req));
}
if (count >= orgas.length)
return false;
Organisation org = orgas[count++];
- System.out.println(org.getId());
vars.put("id", Integer.toString(org.getId()));
vars.put("name", org.getName());
vars.put("country", org.getState());
resp.sendError(404);
return;
}
- new CreateOrgForm(req, o).output(out, lang, new HashMap<String, Object>());
- out.println(lang.getTranslation("WARNING: updating the data will revoke all issued certificates."));
+ HashMap<String, Object> vars = new HashMap<>();
+ vars.put("editForm", new CreateOrgForm(req, o));
+ vars.put("affForm", new AffiliationForm(req, o));
+ mainTempl.output(out, lang, vars);
}
}
assertEquals(0, o1.getAllAdmins().size());
o1.addAdmin(u2, u1, false);
assertEquals(1, o1.getAllAdmins().size());
+ o1.addAdmin(u2, u1, false); // Insert double should be ignored
+ assertEquals(1, o1.getAllAdmins().size());
o1.addAdmin(u3, u1, false);
assertEquals(2, o1.getAllAdmins().size());
o1.addAdmin(u4, u1, false);
assertEquals(3, o1.getAllAdmins().size());
o1.removeAdmin(u3, u1);
assertEquals(2, o1.getAllAdmins().size());
+ o1.addAdmin(u3, u1, false); // add again
+ assertEquals(3, o1.getAllAdmins().size());
+ o1.removeAdmin(u3, u1);
+ assertEquals(2, o1.getAllAdmins().size());
o1.removeAdmin(u4, u1);
o1.removeAdmin(u2, u1);
assertEquals(0, o1.getAllAdmins().size());
}
+
}
assertSame(ra, ra2);
}
+ @Test
+ public void testGetByMail() {
+ String email = createUniqueName() + "a@email.org";
+ int id = createVerifiedUser("aä", "b", email, TEST_PASSWORD);
+ User emailUser = User.getByEmail(email);
+ User u = User.getById(id);
+ assertSame(u, emailUser);
+ }
+
}