OpenPgpPubSubUtil: Allow custom nodes for secret key backup

This commit is contained in:
Paul Schaub 2020-09-28 13:33:15 +02:00
parent 1ea73e38cf
commit 079e324fe0
1 changed files with 22 additions and 3 deletions

View File

@ -344,11 +344,18 @@ public class OpenPgpPubSubUtil {
throws InterruptedException, PubSubException.NotALeafNodeException,
XMPPException.XMPPErrorException, SmackException.NotConnectedException, SmackException.NoResponseException,
SmackException.FeatureNotSupportedException {
depositSecretKey(connection, element, PEP_NODE_SECRET_KEY);
}
public static void depositSecretKey(XMPPConnection connection, SecretkeyElement element, String nodeName)
throws SmackException.FeatureNotSupportedException, XMPPException.XMPPErrorException,
SmackException.NotConnectedException, InterruptedException, SmackException.NoResponseException,
PubSubException.NotALeafNodeException {
if (!OpenPgpManager.serverSupportsSecretKeyBackups(connection)) {
throw new SmackException.FeatureNotSupportedException("http://jabber.org/protocol/pubsub#access-whitelist");
}
PubSubManager pm = PepManager.getInstanceFor(connection).getPepPubSubManager();
LeafNode secretKeyNode = pm.getOrCreateLeafNode(PEP_NODE_SECRET_KEY);
LeafNode secretKeyNode = pm.getOrCreateLeafNode(nodeName);
OpenPgpPubSubUtil.changeAccessModelIfNecessary(secretKeyNode, AccessModel.whitelist);
secretKeyNode.publish(new PayloadItem<>(element));
@ -372,8 +379,14 @@ public class OpenPgpPubSubUtil {
public static SecretkeyElement fetchSecretKey(PepManager pepManager)
throws InterruptedException, PubSubException.NotALeafNodeException, XMPPException.XMPPErrorException,
SmackException.NotConnectedException, SmackException.NoResponseException {
return fetchSecretKey(pepManager, PEP_NODE_SECRET_KEY);
}
public static SecretkeyElement fetchSecretKey(PepManager pepManager, String nodeName)
throws InterruptedException, PubSubException.NotALeafNodeException, XMPPException.XMPPErrorException,
SmackException.NotConnectedException, SmackException.NoResponseException {
PubSubManager pm = pepManager.getPepPubSubManager();
LeafNode secretKeyNode = pm.getOrCreateLeafNode(PEP_NODE_SECRET_KEY);
LeafNode secretKeyNode = pm.getOrCreateLeafNode(nodeName);
List<PayloadItem<SecretkeyElement>> list = secretKeyNode.getItems(1);
if (list.size() == 0) {
LOGGER.log(Level.INFO, "No secret key published!");
@ -397,8 +410,14 @@ public class OpenPgpPubSubUtil {
public static boolean deleteSecretKeyNode(PepManager pepManager)
throws XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException,
SmackException.NoResponseException {
return deleteSecretKeyNode(pepManager, PEP_NODE_SECRET_KEY);
}
public static boolean deleteSecretKeyNode(PepManager pepManager, String nodeName)
throws XMPPException.XMPPErrorException, SmackException.NotConnectedException,
InterruptedException, SmackException.NoResponseException {
PubSubManager pm = pepManager.getPepPubSubManager();
return pm.deleteNode(PEP_NODE_SECRET_KEY);
return pm.deleteNode(nodeName);
}
/**