| 1910 | } |
| 1911 | |
| 1912 | jsi::Value CommCoreModule::decryptAndPersist( |
| 1913 | jsi::Runtime &rt, |
| 1914 | jsi::Object encryptedDataJSI, |
| 1915 | jsi::String deviceID, |
| 1916 | jsi::String userID, |
| 1917 | jsi::String messageID) { |
| 1918 | size_t messageType = |
| 1919 | std::lround(encryptedDataJSI.getProperty(rt, "messageType").asNumber()); |
| 1920 | std::string message = |
| 1921 | encryptedDataJSI.getProperty(rt, "message").asString(rt).utf8(rt); |
| 1922 | |
| 1923 | std::optional<int> sessionVersion; |
| 1924 | if (encryptedDataJSI.hasProperty(rt, "sessionVersion")) { |
| 1925 | sessionVersion = std::lround( |
| 1926 | encryptedDataJSI.getProperty(rt, "sessionVersion").asNumber()); |
| 1927 | } |
| 1928 | |
| 1929 | auto deviceIDCpp{deviceID.utf8(rt)}; |
| 1930 | auto messageIDCpp{messageID.utf8(rt)}; |
| 1931 | auto userIDCpp{userID.utf8(rt)}; |
| 1932 | return createPromiseAsJSIValue( |
| 1933 | rt, [=](jsi::Runtime &innerRt, std::shared_ptr<Promise> promise) { |
| 1934 | taskType job = [=, &innerRt]() { |
| 1935 | std::string error; |
| 1936 | std::string decryptedMessage; |
| 1937 | try { |
| 1938 | crypto::EncryptedData encryptedData{ |
| 1939 | message, messageType, sessionVersion}; |
| 1940 | decryptedMessage = |
| 1941 | this->contentCryptoModule->decrypt(deviceIDCpp, encryptedData); |
| 1942 | |
| 1943 | std::string storedSecretKey = |
| 1944 | getAccountDataKey(secureStoreAccountDataKey); |
| 1945 | crypto::Persist newContentPersist = |
| 1946 | this->contentCryptoModule->storeAsB64(storedSecretKey); |
| 1947 | |
| 1948 | std::promise<void> persistencePromise; |
| 1949 | std::future<void> persistenceFuture = |
| 1950 | persistencePromise.get_future(); |
| 1951 | GlobalDBSingleton::instance.scheduleOrRunCancellable( |
| 1952 | [=, &persistencePromise]() { |
| 1953 | try { |
| 1954 | InboundP2PMessage message{ |
| 1955 | messageIDCpp, |
| 1956 | deviceIDCpp, |
| 1957 | decryptedMessage, |
| 1958 | "decrypted", |
| 1959 | userIDCpp}; |
| 1960 | |
| 1961 | DatabaseManager::getQueryExecutor().beginTransaction(); |
| 1962 | DatabaseManager::getQueryExecutor().addInboundP2PMessage( |
| 1963 | message); |
| 1964 | DatabaseManager::getQueryExecutor().storeOlmPersistData( |
| 1965 | DatabaseManager::getQueryExecutor() |
| 1966 | .getContentAccountID(), |
| 1967 | newContentPersist); |
| 1968 | DatabaseManager::getQueryExecutor().commitTransaction(); |
| 1969 | persistencePromise.set_value(); |
nothing calls this directly
no test coverage detected