]> WPIA git - gigi.git/commitdiff
add: granting and revoking groups by supporters
authorFelix Dörre <felix@dogcraft.de>
Wed, 27 Jan 2016 14:17:33 +0000 (15:17 +0100)
committerFelix Dörre <felix@dogcraft.de>
Wed, 27 Jan 2016 14:17:33 +0000 (15:17 +0100)
src/org/cacert/gigi/dbObjects/SupportedUser.java
src/org/cacert/gigi/output/DateSelector.java
src/org/cacert/gigi/output/GroupSelector.java [new file with mode: 0644]
src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java
src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.templ
src/org/cacert/gigi/pages/admin/support/SupportUserDetailsPage.java

index e957aa082faef1a5b1af048e8dea69cb0d73ad50..044f712b45f0a0ea8988a7f019d24097688824fb 100644 (file)
@@ -82,4 +82,12 @@ public class SupportedUser {
         target.rawUpdateUserData();
     }
 
+    public void grant(Group toMod) {
+        target.grantGroup(supporter, toMod);
+    }
+
+    public void revoke(Group toMod) {
+        target.revokeGroup(supporter, toMod);
+    }
+
 }
index 20939e499363f6f15006491f25209b05d9fc43f8..ad1bdf33e3b543da3b64a56fb28ad09627446571 100644 (file)
@@ -14,6 +14,7 @@ import javax.servlet.http.HttpServletRequest;
 import org.cacert.gigi.GigiApiException;
 import org.cacert.gigi.localisation.Language;
 import org.cacert.gigi.output.template.Outputable;
+import org.cacert.gigi.util.HTMLEncoder;
 
 public class DateSelector implements Outputable {
 
@@ -30,7 +31,7 @@ public class DateSelector implements Outputable {
 
     public DateSelector(String day, String month, String year) {
         this.names = new String[] {
-                day, month, year
+                HTMLEncoder.encodeHTML(day), HTMLEncoder.encodeHTML(month), HTMLEncoder.encodeHTML(year)
         };
     }
 
diff --git a/src/org/cacert/gigi/output/GroupSelector.java b/src/org/cacert/gigi/output/GroupSelector.java
new file mode 100644 (file)
index 0000000..a26be9b
--- /dev/null
@@ -0,0 +1,50 @@
+package org.cacert.gigi.output;
+
+import java.io.PrintWriter;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.cacert.gigi.GigiApiException;
+import org.cacert.gigi.dbObjects.Group;
+import org.cacert.gigi.localisation.Language;
+import org.cacert.gigi.output.template.Outputable;
+import org.cacert.gigi.util.HTMLEncoder;
+
+public class GroupSelector implements Outputable {
+
+    String name;
+
+    Group value = null;
+
+    public GroupSelector(String name) {
+        this.name = HTMLEncoder.encodeHTML(name);
+    }
+
+    public void update(HttpServletRequest r) throws GigiApiException {
+        String vS = r.getParameter(name);
+        value = null;
+        for (Group g : Group.values()) {
+            if (g.getDatabaseName().equals(vS)) {
+                value = g;
+            }
+        }
+    }
+
+    @Override
+    public void output(PrintWriter out, Language l, Map<String, Object> vars) {
+        out.println("<select name='" + name + "'>");
+        for (Group g : Group.values()) {
+            out.print("<option name='" + g.getDatabaseName());
+            if (g.equals(value)) {
+                out.print(" selected");
+            }
+            out.println("'>" + g.getDatabaseName() + "</option>");
+        }
+        out.println("</select>");
+    }
+
+    public Group getGroup() {
+        return value;
+    }
+}
index 685adf3d7ce2398141f00b35438c2dad06f1587f..e1c94c6b84577b92eaa9bad5edde0fb274a64a8c 100644 (file)
@@ -3,7 +3,9 @@ package org.cacert.gigi.pages.admin.support;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.URLEncoder;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -15,7 +17,9 @@ import org.cacert.gigi.dbObjects.User;
 import org.cacert.gigi.email.Sendmail;
 import org.cacert.gigi.localisation.Language;
 import org.cacert.gigi.output.DateSelector;
+import org.cacert.gigi.output.GroupSelector;
 import org.cacert.gigi.output.template.Form;
+import org.cacert.gigi.output.template.IterableDataset;
 import org.cacert.gigi.output.template.Template;
 import org.cacert.gigi.pages.Page;
 import org.cacert.gigi.pages.PasswordResetPage;
@@ -30,6 +34,8 @@ public class SupportUserDetailsForm extends Form {
 
     private DateSelector dobSelector;
 
+    private GroupSelector value = new GroupSelector("groupToModify");
+
     static {
         t = new Template(FindDomainForm.class.getResource("SupportUserDetailsForm.templ"));
     }
@@ -45,6 +51,19 @@ public class SupportUserDetailsForm extends Form {
         if (user.getTicket() == null) {
             return false;
         }
+        if ((req.getParameter("detailupdate") != null ? 1 : 0) + (req.getParameter("grant") != null ? 1 : 0) + (req.getParameter("deny") != null ? 1 : 0) + (req.getParameter("resetPass") != null ? 1 : 0) != 1) {
+            throw new GigiApiException("More than one action requested!");
+        }
+        if (req.getParameter("grant") != null || req.getParameter("deny") != null) {
+            value.update(req);
+            Group toMod = value.getGroup();
+            if (req.getParameter("grant") != null) {
+                user.grant(toMod);
+            } else {
+                user.revoke(toMod);
+            }
+            return true;
+        }
         if (req.getParameter("resetPass") != null) {
             String aword = req.getParameter("aword");
             if (aword == null || aword.equals("")) {
@@ -103,16 +122,25 @@ public class SupportUserDetailsForm extends Form {
         vars.put("suffix", name.getSuffix());
         vars.put("assurer", user.canAssure());
         vars.put("dob", dobSelector);
-        vars.put("blockedassurer", user.isInGroup(Group.BLOCKEDASSURER));
-        vars.put("codesign", user.isInGroup(Group.CODESIGNING));
-        vars.put("orgassurer", user.isInGroup(Group.ORGASSURER));
         vars.put("assurancepoints", user.getAssurancePoints());
-        vars.put("blockedassuree", user.isInGroup(Group.BLOCKEDASSUREE));
-        vars.put("ttpassurer", user.isInGroup(Group.TTP_ASSURER));
-        vars.put("ttpapplicant", user.isInGroup(Group.TTP_APPLICANT));
-        vars.put("blockedlogin", user.isInGroup(Group.BLOCKEDLOGIN));
-        vars.put("supporter", user.isInGroup(Group.SUPPORTER));
+        vars.put("exppoints", user.getExperiencePoints());
         vars.put("id", user.getId());
+        final Set<Group> gr = user.getGroups();
+        vars.put("groups", new IterableDataset() {
+
+            Iterator<Group> i = gr.iterator();
+
+            @Override
+            public boolean next(Language l, Map<String, Object> vars) {
+                if ( !i.hasNext()) {
+                    return false;
+                }
+                Group g = i.next();
+                vars.put("group_name", l.getTranslation("Group: " + g.getDatabaseName()));
+                return true;
+            }
+        });
+        vars.put("groupSelector", value);
         t.output(out, l, vars);
     }
 
index 689f2620908470eb57907565d3017fd3215a61d3..244bbdbcb3445f69d456bcb15b732e6f905ce006 100644 (file)
             <? } ?>
             </td>
         </tr>
-        <tr>
-            <td><?=_Blocked Assurer?>:</td>
-            <td>
-            <? if($blockedassurer) { ?>
-            <?=_Yes?>
-            <? } else { ?>
-            <?=_No?>
-            <? } ?>
-            </td>
+               <tr>
+            <td><?=_Assurance Points?>:</td>
+            <td><?=$assurancepoints?></td>
         </tr>
         <tr>
-            <td><?=_Account Locking?>:</td>
-            <td>
-            <? if($locked) { ?>
-            <?=_Yes?>
-            <? } else { ?>
-            <?=_No?>
-            <? } ?>
-            </td>
+            <td><?=_Experience Points?>:</td>
+            <td><?=$exppoints?></td>
         </tr>
+        
         <tr>
-            <td><?=_Code Signing?>:</td>
-            <td><? if($codesign) { ?>
-            <?=_Yes?>
-            <? } else { ?>
-            <?=_No?>
-            <? } ?>
+            <td><?=_Groups?>:</td>
+            <td><p><? foreach($groups) { ?><?=$group_name?>, <? } ?></p>
+            <p><?=$groupSelector?><input type='submit' value='<?=_Grant Group?>' name='grant'><input type='submit' value='<?=_Deny Group?>' name='deny'></p>
             </td>
         </tr>
         <tr>
-            <td><?=_Org Assurer?>:</td>
-            <td>
-       <? if($orgassurer) { ?>
-            <?=_Yes?>
-            <? } else { ?>
-            <?=_No?>
-            <? } ?>
-</td>
-        </tr>
-        <tr>
-            <td><?=_TTP Admin?>:</td>
-            <td>
-<? if($ttpadmin) { ?>
-            <?=_Yes?>
-            <? } else { ?>
-            <?=_No?>
-            <? } ?>
-</td>
-        </tr>
-        <tr>
-            <td><?=_Supporter?>:</td>
-            <td>
-<? if($supporter) { ?>
-            <?=_Yes?>
-            <? } else { ?>
-            <?=_No?>
-            <? } ?>
-</td>
-        </tr>
-           <tr>
             <td><?=_Reset Password?>:</td>
             <td><input type="text" name="aword"> <input type="submit" value="<?=_Reset Password?>" name="resetPass"></td>
         </tr>
         </tr>
             <tr>
             <td><?=_Show Lost Password Details?></td>
-        </tr>
-            <tr>
-            <td><?=_Assurance Points?>:</td>
-            <td><?=$assurancepoints?></td>
         </tr>
             <tr>
             <td colspan="2"><a href="./<?=$id?>/history"><?=_Show account history?></a></td>
index 3d83b2013342d86629298037ca4161f4f448e7a4..5cc35b53a9698c7c581d01c6292bbf973e31e86b 100644 (file)
@@ -68,7 +68,7 @@ public class SupportUserDetailsPage extends Page {
                 if ( !Form.getForm(req, SupportRevokeCertificatesForm.class).submit(resp.getWriter(), req)) {
                     throw new GigiApiException("No ticket number set.");
                 }
-            } else if (req.getParameter("detailupdate") != null || req.getParameter("resetPass") != null) {
+            } else if (req.getParameter("detailupdate") != null || req.getParameter("resetPass") != null || req.getParameter("deny") != null || req.getParameter("grant") != null) {
                 if ( !Form.getForm(req, SupportUserDetailsForm.class).submit(resp.getWriter(), req)) {
                     throw new GigiApiException("No ticket number set.");
                 }