diff --git a/xplat/Flipper/ConnectionContextStore.cpp b/xplat/Flipper/ConnectionContextStore.cpp index f6d32fffc..ecac3ac8d 100644 --- a/xplat/Flipper/ConnectionContextStore.cpp +++ b/xplat/Flipper/ConnectionContextStore.cpp @@ -42,7 +42,10 @@ bool ConnectionContextStore::hasRequiredFiles() { return true; } -std::string ConnectionContextStore::createCertificateSigningRequest() { +std::string ConnectionContextStore::getCertificateSigningRequest() { + if (csr != "") { + return csr; + } resetFlipperDir(); bool success = generateCertSigningRequest( deviceData_.appId.c_str(), @@ -51,7 +54,7 @@ std::string ConnectionContextStore::createCertificateSigningRequest() { if (!success) { throw new std::runtime_error("Failed to generate CSR"); } - std::string csr = loadStringFromFile(absoluteFilePath(CSR_FILE_NAME)); + csr = loadStringFromFile(absoluteFilePath(CSR_FILE_NAME)); return csr; } diff --git a/xplat/Flipper/ConnectionContextStore.h b/xplat/Flipper/ConnectionContextStore.h index 9e850272c..56f9f273f 100644 --- a/xplat/Flipper/ConnectionContextStore.h +++ b/xplat/Flipper/ConnectionContextStore.h @@ -21,7 +21,7 @@ class ConnectionContextStore { public: ConnectionContextStore(DeviceData deviceData); bool hasRequiredFiles(); - std::string createCertificateSigningRequest(); + std::string getCertificateSigningRequest(); std::shared_ptr getSSLContext(); std::string getCertificateDirectoryPath(); std::string getDeviceId(); @@ -29,6 +29,7 @@ public: private: DeviceData deviceData_; + std::string csr = ""; std::string absoluteFilePath(const char* filename); bool resetFlipperDir(); diff --git a/xplat/Flipper/FlipperConnectionManagerImpl.cpp b/xplat/Flipper/FlipperConnectionManagerImpl.cpp index e3475dbd2..44520d588 100644 --- a/xplat/Flipper/FlipperConnectionManagerImpl.cpp +++ b/xplat/Flipper/FlipperConnectionManagerImpl.cpp @@ -268,7 +268,7 @@ bool FlipperConnectionManagerImpl::isCertificateExchangeNeeded() { void FlipperConnectionManagerImpl::requestSignedCertFromFlipper() { auto generatingCSR = flipperState_->start("Generate CSR"); - std::string csr = contextStore_->createCertificateSigningRequest(); + std::string csr = contextStore_->getCertificateSigningRequest(); generatingCSR->complete(); folly::dynamic message =