package org.cacert.gigi.dbObjects;
-import java.awt.Desktop;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
-import java.io.PrintWriter;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
-import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
import java.util.Properties;
-import java.util.TreeSet;
import org.cacert.gigi.database.DatabaseConnection;
import org.cacert.gigi.database.GigiPreparedStatement;
private static HashMap<Integer, CertificateProfile> byId = new HashMap<>();
- private final PropertyTemplate[] pt;
+ private final Map<String, PropertyTemplate> pt;
- private final String[] req;
+ private final List<String> req;
private CertificateProfile(int id, String keyName, String visibleName, String requires, String include) {
this.id = id;
pt = parsePropertyTemplates(include);
}
- private static class PropertyTemplate implements Comparable<PropertyTemplate> {
+ public static class PropertyTemplate implements Comparable<PropertyTemplate> {
- boolean required = true;
+ private boolean required = true;
- boolean multiple = false;
+ private boolean multiple = false;
- private String inc;
+ private String base;
public PropertyTemplate(String inc) {
if (inc.endsWith("?") || inc.endsWith("*") || inc.endsWith("+")) {
}
inc = inc.substring(0, inc.length() - 1);
}
- this.inc = inc;
+ this.base = inc;
+ }
+
+ public String getBase() {
+ return base;
+ }
+
+ public boolean isMultiple() {
+ return multiple;
+ }
+
+ public boolean isRequired() {
+ return required;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + ((inc == null) ? 0 : inc.hashCode());
+ result = prime * result + ((base == null) ? 0 : base.hashCode());
result = prime * result + (multiple ? 1231 : 1237);
result = prime * result + (required ? 1231 : 1237);
return result;
return false;
}
PropertyTemplate other = (PropertyTemplate) obj;
- if (inc == null) {
- if (other.inc != null) {
+ if (base == null) {
+ if (other.base != null) {
return false;
}
- } else if ( !inc.equals(other.inc)) {
+ } else if ( !base.equals(other.base)) {
return false;
}
if (multiple != other.multiple) {
@Override
public String toString() {
- return inc + (multiple ? (required ? "+" : "*") : (required ? "" : "?"));
+ return base + (multiple ? (required ? "+" : "*") : (required ? "" : "?"));
}
@Override
req = parseConditions(p.getProperty("requires", ""));
}
- private String[] parseConditions(String property) {
+ private List<String> parseConditions(String property) {
String[] split2 = property.split(",");
if (split2.length == 1 && split2[0].equals("")) {
split2 = new String[0];
}
- return split2;
+ return Collections.unmodifiableList(Arrays.asList(split2));
}
- private PropertyTemplate[] parsePropertyTemplates(String property) {
+ private Map<String, PropertyTemplate> parsePropertyTemplates(String property) {
String[] split = property.split(",");
- PropertyTemplate[] pt = new PropertyTemplate[split.length];
+ HashMap<String, PropertyTemplate> map = new HashMap<>(split.length);
for (int i = 0; i < split.length; i++) {
- pt[i] = new PropertyTemplate(split[i]);
+
+ PropertyTemplate value = new PropertyTemplate(split[i]);
+
+ map.put(value.getBase(), value);
}
- return pt;
+ return Collections.unmodifiableMap(map);
}
public int getId() {
return visibleName;
}
+ public Map<String, PropertyTemplate> getTemplates() {
+ return pt;
+ }
+
+ public List<String> getReqireds() {
+ return req;
+ }
+
static {
for (File f : new File("config/profiles").listFiles()) {
Properties p = new Properties();
return byId.values().toArray(new CertificateProfile[byId.size()]);
}
- public static void main(String[] args) throws IOException {
- TreeSet<String> pt = new TreeSet<>();
- TreeSet<String> req = new TreeSet<>();
- LinkedList<CertificateProfile> cps = new LinkedList<>();
- for (CertificateProfile cp : byId.values()) {
- cps.add(cp);
- for (PropertyTemplate p : cp.pt) {
- pt.add(p.inc);
- }
- req.addAll(Arrays.asList(cp.req));
- }
- PrintWriter pw = new PrintWriter("profiles.html");
- pw.println("<!DOCTYPE html><html><head><title>Profiles</title>");
- pw.println("<style>.split{background-color:#000;margin:0;cell-spacing:0}td{text-align:center}</style>");
- pw.println("</head>");
- pw.println("<body><table border='1'>");
- pw.println("<tr><td>id</td><td> </td>");
- for (String p : pt) {
- pw.println("<th>" + p + "</th>");
- }
- pw.println("<th class='split'></th>");
- for (String p : req) {
- pw.println("<th class='req'>" + p + "</th>");
- }
- pw.println("</tr>");
- for (CertificateProfile certificateProfile : cps) {
- pw.println("<tr>");
- pw.println("<td>" + certificateProfile.id + "</td>");
- pw.println("<td>" + certificateProfile.keyName + "</td>");
- outer:
- for (String p : pt) {
- for (PropertyTemplate t : certificateProfile.pt) {
- if (t.inc.equals(p)) {
- pw.println("<td>" + (t.required ? (t.multiple ? "+" : "y") : (t.multiple ? "*" : "?")) + "</td>");
- continue outer;
- }
- }
- pw.println("<td></td>");
- }
- pw.println("<td class='split'></td>");
- outer:
- for (String p : req) {
- for (String t : certificateProfile.req) {
- if (t.equals(p)) {
- pw.println("<td class='req'>y</td>");
- continue outer;
- }
- }
- pw.println("<td></td>");
- }
- pw.println("</tr>");
- }
- pw.println("</table></body></html>");
- Desktop.getDesktop().browse(new File("profiles.html").toURI());
- pw.close();
- }
-
public boolean canBeIssuedBy(User u) {
for (String s : req) {
if (s.equals("points>=50")) {
--- /dev/null
+package org.cacert.gigi;
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.util.LinkedList;
+import java.util.Properties;
+import java.util.TreeSet;
+
+import org.cacert.gigi.database.DatabaseConnection;
+import org.cacert.gigi.dbObjects.CertificateProfile;
+import org.cacert.gigi.dbObjects.CertificateProfile.PropertyTemplate;
+
+public class GenerateProfileOverview {
+
+ public static void main(String[] args) throws IOException {
+ Properties pr = new Properties();
+ try (Reader reader = new InputStreamReader(new FileInputStream("config/gigi.properties"), "UTF-8")) {
+ pr.load(reader);
+ }
+ DatabaseConnection.init(pr);
+
+ TreeSet<String> pt = new TreeSet<>();
+ TreeSet<String> req = new TreeSet<>();
+ LinkedList<CertificateProfile> cps = new LinkedList<>();
+ for (CertificateProfile cp : CertificateProfile.getAll()) {
+ cps.add(cp);
+ for (PropertyTemplate p : cp.getTemplates().values()) {
+ pt.add(p.getBase());
+ }
+ req.addAll(cp.getReqireds());
+ }
+ PrintWriter pw = new PrintWriter("profiles.html");
+ pw.println("<!DOCTYPE html><html><head><title>Profiles</title>");
+ pw.println("<style>.split{background-color:#000;margin:0;cell-spacing:0}td{text-align:center}</style>");
+ pw.println("</head>");
+ pw.println("<body><table border='1'>");
+ pw.println("<tr><td>id</td><td> </td>");
+ for (String p : pt) {
+ pw.println("<th>" + p + "</th>");
+ }
+ pw.println("<th class='split'></th>");
+ for (String p : req) {
+ pw.println("<th class='req'>" + p + "</th>");
+ }
+ pw.println("</tr>");
+ for (CertificateProfile certificateProfile : cps) {
+ pw.println("<tr>");
+ pw.println("<td>" + certificateProfile.getId() + "</td>");
+ pw.println("<td>" + certificateProfile.getKeyName() + "</td>");
+ outer:
+ for (String p : pt) {
+ for (PropertyTemplate t : certificateProfile.getTemplates().values()) {
+ if (t.getBase().equals(p)) {
+ pw.println("<td>" + (t.isRequired() ? (t.isMultiple() ? "+" : "y") : (t.isMultiple() ? "*" : "?")) + "</td>");
+ continue outer;
+ }
+ }
+ pw.println("<td></td>");
+ }
+ pw.println("<td class='split'></td>");
+ outer:
+ for (String p : req) {
+ for (String t : certificateProfile.getReqireds()) {
+ if (t.equals(p)) {
+ pw.println("<td class='req'>y</td>");
+ continue outer;
+ }
+ }
+ pw.println("<td></td>");
+ }
+ pw.println("</tr>");
+ }
+ pw.println("</table></body></html>");
+ Desktop.getDesktop().browse(new File("profiles.html").toURI());
+ pw.close();
+ }
+
+}