You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.4 KiB
42 lines
1.4 KiB
#pragma once
|
|
|
|
#include "passphrase_callback.hh"
|
|
|
|
namespace pEp {
|
|
namespace JNIAdapter {
|
|
|
|
template<typename... A> PEP_STATUS passphraseWrap(PEP_STATUS f(PEP_SESSION, A...), PEP_SESSION session, A... a) {
|
|
pEpLog("cached passphrase mode");
|
|
bool retryAgain = false;
|
|
int maxRetries = 3;
|
|
int retryCount = 0;
|
|
PEP_STATUS status;
|
|
do {
|
|
// the actual target function
|
|
pEpLog("calling passphrase_cache.api from basic_api");
|
|
status = passphrase_cache.api(f, session, a...);
|
|
pEpLog("PEP_STATUS:" << status);
|
|
if (status == PEP_PASSPHRASE_REQUIRED ||
|
|
status == PEP_WRONG_PASSPHRASE ||
|
|
status == PEP_PASSPHRASE_FOR_NEW_KEYS_REQUIRED)
|
|
{
|
|
pEpLog("none of the cached passphrases worked");
|
|
if (retryCount < maxRetries) {
|
|
// call the app
|
|
char *_passphrase = passphraseRequiredCallback(status);
|
|
pEpLog("callback returned, config_passphrase() with new passphrase");
|
|
PEP_STATUS status = ::config_passphrase(session, passphrase_cache.add(_passphrase));
|
|
retryAgain = true;
|
|
retryCount++;
|
|
} else {
|
|
pEpLog("max retries reached:" << maxRetries);
|
|
retryAgain = false;
|
|
}
|
|
} else {
|
|
retryAgain = false;
|
|
}
|
|
} while (retryAgain);
|
|
return status;
|
|
}
|
|
}
|
|
}
|