package org.expeditee.encryption; import java.util.Base64; import java.util.Collection; import org.expeditee.auth.AuthenticatorBrowser; import org.expeditee.gui.Frame; import org.expeditee.gui.FrameIO; import org.expeditee.items.Text; import org.expeditee.settings.UserSettings; public class Label { public static LabelResult resolveKey(String label) { String credentialsFrameName = UserSettings.ProfileName.get() + AuthenticatorBrowser.CREDENTIALS_FRAME; Frame credentialsFrame = FrameIO.LoadFrame(credentialsFrameName); Collection textItems = credentialsFrame.getTextItems(); textItems.removeIf(t -> !t.getText().equals("Secrets")); textItems.removeIf(t -> !t.hasLink()); if (textItems.isEmpty()) { return LabelResult.ErrorUnableToFindSecretsFrame; } Text linkToSecretsFrame = textItems.iterator().next(); if (!linkToSecretsFrame.hasLink()) { return LabelResult.ErrorUnableToFindSecretsFrame; } Frame secretsFrame = FrameIO.LoadFrame(linkToSecretsFrame.getParent().getFramesetName() + linkToSecretsFrame.getLink()); Collection labels = secretsFrame.getTextItems(); labels.removeIf(lbl -> !lbl.getText().equals(label)); labels.removeIf(lbl -> lbl.getData() == null || lbl.getData().size() == 0); if (labels.isEmpty()) { return LabelResult.ErrorUnableToFindLabel; } Text labelItem = labels.iterator().next(); String data = labelItem.getData().get(0); if (data.contains("{")) { data = data.substring(data.indexOf('}') + 1).trim(); LabelResult res = LabelResult.SuccessResolveLabelToPartialKey; res.key = Base64.getDecoder().decode(data); return res; } else { try { LabelResult res = LabelResult.SuccessResolveLabelToKey; res.key = Base64.getDecoder().decode(data); return res; } catch (IllegalArgumentException e) { return LabelResult.ErrorUnableToFindLabel; } } } public enum LabelResult { SuccessResolveLabelToKey, SuccessResolveLabelToPartialKey, ErrorUnableToFindSecretsFrame, ErrorUnableToFindLabel; public byte[] key; @Override public String toString() { switch (this) { case SuccessResolveLabelToKey: return "Resolved label to key: " + Base64.getEncoder().encodeToString(key); case SuccessResolveLabelToPartialKey: return "Resolved label to slice of a key: " + Base64.getEncoder().encodeToString(key); case ErrorUnableToFindSecretsFrame: return "Unable to find your Secrets Frame."; case ErrorUnableToFindLabel: return "Unable to resolve label to encrypt/decrypt frame. Label: "; } String message = "Was the list of possible enum results updated without nessasary changes to the toString() function?"; throw new IllegalArgumentException(message); } } }