+ if (certs[i].getStatus() == CertificateStatus.ISSUED) {
+ certs[i].revoke();
+ }
+ }
+ // send notification to support
+ Outputable message = SprintfCommand.createSimple("All certificates in the account {0} <{1}> have been revoked.", target.getPreferredName().toString(), target.getEmail());
+ sendSupportNotification("Revoke certificates", message);
+ // send notification to user
+ sendSupportUserNotification("Revoke certificate", new TranslateCommand("All certificates in your account have been revoked."));
+ }
+
+ public void revokeCertificate(Certificate cert) throws GigiApiException {
+
+ // TODO Check for open jobs!
+ if (cert.getStatus() == CertificateStatus.ISSUED) {
+ writeSELog("SE Revoke certificate");
+ cert.revoke().waitFor(60000);
+ // send notification to support
+ String subject = "Revoke certificate";
+ Outputable message = SprintfCommand.createSimple("Certificate with serial number {0} for {1} <{2}> has been revoked.", cert.getSerial(), target.getPreferredName().toString(), target.getEmail());
+ sendSupportNotification(subject, message);
+ // send notification to user
+ subject = "Revoke certificate";
+ message = SprintfCommand.createSimple("Certificate with serial number {0} with subject distinguished name {1} has been revoked.", cert.getSerial(), cert.getDistinguishedName());
+ sendSupportUserNotification(subject, message);
+ }
+ }
+
+ private void writeSELog(String type) throws GigiApiException {
+ if (ticket == null) {
+ throw new GigiApiException("No ticket set!");
+ }
+ try (GigiPreparedStatement prep = new GigiPreparedStatement("INSERT INTO `adminLog` SET uid=?, admin=?, type=?, information=?")) {
+ prep.setInt(1, target.getId());
+ prep.setInt(2, supporter.getId());
+ prep.setString(3, type);
+ prep.setString(4, ticket);
+ prep.executeUpdate();
+ }
+ }
+
+ public int getId() {
+ return target.getId();
+ }
+
+ public Certificate[] getCertificates(boolean includeRevoked) {
+ return target.getCertificates(includeRevoked);
+ }
+
+ public String getTicket() {
+ return ticket;
+ }
+
+ public User getTargetUser() {
+ return target;
+ }
+
+ public void grant(Group toMod) throws GigiApiException {
+ target.grantGroup(supporter, toMod);
+ String subject = "Change Group Permissions";
+ // send notification to support
+ Outputable message = SprintfCommand.createSimple("The group permission '{0}' was granted.", toMod.getName());
+ sendSupportNotification(subject, message);
+ // send notification to user
+ message = SprintfCommand.createSimple("The group permission '{0}' was granted to your account.", toMod.getName());
+ sendSupportUserNotification(subject, message);
+ if (toMod == Group.SUPPORTER) {
+ subject = "Support role granted";
+ message = SprintfCommand.createSimple("The group permission '{0}' was granted for '{1}'.", toMod.getName(), target.getPreferredName().toString());
+ sendBoardNotification(subject, message);
+ }
+ }
+
+ public void revoke(Group toMod) throws GigiApiException {
+ target.revokeGroup(supporter, toMod);
+ String subject = "Change Group Permissions";
+ // send notification to support
+ Outputable message = SprintfCommand.createSimple("The group permission '{0}' was revoked.", toMod.getName());
+ sendSupportNotification(subject, message);
+ // send notification to user
+ message = SprintfCommand.createSimple("The group permission '{0}' was revoked from your account.", toMod.getName());
+ sendSupportUserNotification(subject, message);
+ if (toMod == Group.SUPPORTER) {
+ subject = "Support role revoked";
+ message = SprintfCommand.createSimple("The group permission '{0}' was revoked for '{1}'.", toMod.getName(), target.getPreferredName().toString());
+ sendBoardNotification(subject, message);
+ }
+ }
+
+ private static final MailTemplate supportNotification = new MailTemplate(SupportedUser.class.getResource("SupportNotificationMail.templ"));
+
+ private void sendSupportNotification(String subject, Outputable message) {
+ try {
+ HashMap<String, Object> vars = new HashMap<>();
+ vars.put("supporter", supporter.getPreferredName().toString());
+ vars.put("action", message);
+ vars.put("ticket", this.getTicket());
+ vars.put("subject", subject);
+
+ String supportemailaddress = ServerConstants.getSupportMailAddress();
+ supportNotification.sendMail(Language.getInstance(Locale.ENGLISH), vars, supportemailaddress);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private static final MailTemplate supportUserNotification = new MailTemplate(SupportedUser.class.getResource("SupportUserNotificationMail.templ"));
+
+ private void sendSupportUserNotification(String subject, Outputable message) {
+ try {
+ HashMap<String, Object> vars = new HashMap<>();
+ vars.put("action", message);
+ vars.put("ticket", this.getTicket());
+ vars.put("subject", subject);
+
+ supportUserNotification.sendMail(Language.getInstance(Locale.ENGLISH), vars, target.getEmail());
+ } catch (IOException e) {
+ e.printStackTrace();