diff --git a/services/tunnelbroker/src/cxx_bridge.rs b/services/tunnelbroker/src/cxx_bridge.rs --- a/services/tunnelbroker/src/cxx_bridge.rs +++ b/services/tunnelbroker/src/cxx_bridge.rs @@ -55,6 +55,7 @@ pub fn getConfigParameter(parameter: &str) -> Result; pub fn isSandbox() -> Result; pub fn sessionSignatureHandler(deviceID: &str) -> SessionSignatureResult; + pub fn getSavedNonceToSign(deviceID: &str) -> Result; pub fn newSessionHandler( deviceID: &str, publicKey: &str, diff --git a/services/tunnelbroker/src/libcpp/Tunnelbroker.h b/services/tunnelbroker/src/libcpp/Tunnelbroker.h --- a/services/tunnelbroker/src/libcpp/Tunnelbroker.h +++ b/services/tunnelbroker/src/libcpp/Tunnelbroker.h @@ -7,6 +7,7 @@ rust::String getConfigParameter(rust::Str parameter); bool isSandbox(); SessionSignatureResult sessionSignatureHandler(rust::Str deviceID); +rust::String getSavedNonceToSign(rust::Str deviceID); NewSessionResult newSessionHandler( rust::Str deviceID, rust::Str publicKey, diff --git a/services/tunnelbroker/src/libcpp/Tunnelbroker.cpp b/services/tunnelbroker/src/libcpp/Tunnelbroker.cpp --- a/services/tunnelbroker/src/libcpp/Tunnelbroker.cpp +++ b/services/tunnelbroker/src/libcpp/Tunnelbroker.cpp @@ -72,6 +72,17 @@ .toSign = toSign, .grpcStatus = {.statusCode = GRPCStatusCodes::Ok}}; } +rust::String getSavedNonceToSign(rust::Str deviceID) { + const auto sessionSignatureItem = + comm::network::database::DatabaseManager::getInstance() + .findSessionSignItem(std::string{deviceID}); + if (sessionSignatureItem == nullptr) { + throw std::invalid_argument( + "No requests found for 'deviceID': " + std::string{deviceID}); + }; + return rust::String{sessionSignatureItem->getSign()}; +} + NewSessionResult newSessionHandler( rust::Str deviceID, rust::Str publicKey,