From 9c87dfe2309142bc274e84620846d29514d64ac3 Mon Sep 17 00:00:00 2001 From: John Knox Date: Tue, 19 Feb 2019 10:23:53 -0800 Subject: [PATCH] Only create CSR once per app invocation Summary: The CSR has no need to change, don't recreate it every time we need it. Useful for the physical iOS case especially, because it connects to the portforwarder and keeps attempting to send a CSR. Reviewed By: passy Differential Revision: D14131617 fbshipit-source-id: 82a69d5aff813d77fa05dd13fc2441b784766d99 --- xplat/Flipper/ConnectionContextStore.cpp | 7 +++++-- xplat/Flipper/ConnectionContextStore.h | 3 ++- xplat/Flipper/FlipperConnectionManagerImpl.cpp | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) 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 =