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
This commit is contained in:
John Knox
2019-02-19 10:23:53 -08:00
committed by Facebook Github Bot
parent b594fb7c76
commit 9c87dfe230
3 changed files with 8 additions and 4 deletions

View File

@@ -42,7 +42,10 @@ bool ConnectionContextStore::hasRequiredFiles() {
return true; return true;
} }
std::string ConnectionContextStore::createCertificateSigningRequest() { std::string ConnectionContextStore::getCertificateSigningRequest() {
if (csr != "") {
return csr;
}
resetFlipperDir(); resetFlipperDir();
bool success = generateCertSigningRequest( bool success = generateCertSigningRequest(
deviceData_.appId.c_str(), deviceData_.appId.c_str(),
@@ -51,7 +54,7 @@ std::string ConnectionContextStore::createCertificateSigningRequest() {
if (!success) { if (!success) {
throw new std::runtime_error("Failed to generate CSR"); 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; return csr;
} }

View File

@@ -21,7 +21,7 @@ class ConnectionContextStore {
public: public:
ConnectionContextStore(DeviceData deviceData); ConnectionContextStore(DeviceData deviceData);
bool hasRequiredFiles(); bool hasRequiredFiles();
std::string createCertificateSigningRequest(); std::string getCertificateSigningRequest();
std::shared_ptr<SSLContext> getSSLContext(); std::shared_ptr<SSLContext> getSSLContext();
std::string getCertificateDirectoryPath(); std::string getCertificateDirectoryPath();
std::string getDeviceId(); std::string getDeviceId();
@@ -29,6 +29,7 @@ public:
private: private:
DeviceData deviceData_; DeviceData deviceData_;
std::string csr = "";
std::string absoluteFilePath(const char* filename); std::string absoluteFilePath(const char* filename);
bool resetFlipperDir(); bool resetFlipperDir();

View File

@@ -268,7 +268,7 @@ bool FlipperConnectionManagerImpl::isCertificateExchangeNeeded() {
void FlipperConnectionManagerImpl::requestSignedCertFromFlipper() { void FlipperConnectionManagerImpl::requestSignedCertFromFlipper() {
auto generatingCSR = flipperState_->start("Generate CSR"); auto generatingCSR = flipperState_->start("Generate CSR");
std::string csr = contextStore_->createCertificateSigningRequest(); std::string csr = contextStore_->getCertificateSigningRequest();
generatingCSR->complete(); generatingCSR->complete();
folly::dynamic message = folly::dynamic message =