Add self verification after login
This commit is contained in:
parent
7a9c69cbd0
commit
5688b2647e
9 changed files with 285 additions and 72 deletions
|
|
@ -1540,6 +1540,7 @@ request_cross_signing_keys()
|
|||
});
|
||||
};
|
||||
|
||||
request(mtx::secret_storage::secrets::cross_signing_master);
|
||||
request(mtx::secret_storage::secrets::cross_signing_self_signing);
|
||||
request(mtx::secret_storage::secrets::cross_signing_user_signing);
|
||||
request(mtx::secret_storage::secrets::megolm_backup_v1);
|
||||
|
|
@ -1574,36 +1575,52 @@ download_cross_signing_keys()
|
|||
backup_key = secret;
|
||||
|
||||
http::client()->secret_storage_secret(
|
||||
secrets::cross_signing_self_signing,
|
||||
[backup_key](Secret secret, mtx::http::RequestErr err) {
|
||||
std::optional<Secret> self_signing_key;
|
||||
secrets::cross_signing_master, [backup_key](Secret secret, mtx::http::RequestErr err) {
|
||||
std::optional<Secret> master_key;
|
||||
if (!err)
|
||||
self_signing_key = secret;
|
||||
master_key = secret;
|
||||
|
||||
http::client()->secret_storage_secret(
|
||||
secrets::cross_signing_user_signing,
|
||||
[backup_key, self_signing_key](Secret secret, mtx::http::RequestErr err) {
|
||||
std::optional<Secret> user_signing_key;
|
||||
secrets::cross_signing_self_signing,
|
||||
[backup_key, master_key](Secret secret, mtx::http::RequestErr err) {
|
||||
std::optional<Secret> self_signing_key;
|
||||
if (!err)
|
||||
user_signing_key = secret;
|
||||
self_signing_key = secret;
|
||||
|
||||
std::map<std::string, std::map<std::string, AesHmacSha2EncryptedData>>
|
||||
secrets;
|
||||
http::client()->secret_storage_secret(
|
||||
secrets::cross_signing_user_signing,
|
||||
[backup_key, self_signing_key, master_key](Secret secret,
|
||||
mtx::http::RequestErr err) {
|
||||
std::optional<Secret> user_signing_key;
|
||||
if (!err)
|
||||
user_signing_key = secret;
|
||||
|
||||
if (backup_key && !backup_key->encrypted.empty())
|
||||
secrets[backup_key->encrypted.begin()->first][secrets::megolm_backup_v1] =
|
||||
backup_key->encrypted.begin()->second;
|
||||
if (self_signing_key && !self_signing_key->encrypted.empty())
|
||||
secrets[self_signing_key->encrypted.begin()->first]
|
||||
[secrets::cross_signing_self_signing] =
|
||||
self_signing_key->encrypted.begin()->second;
|
||||
if (user_signing_key && !user_signing_key->encrypted.empty())
|
||||
secrets[user_signing_key->encrypted.begin()->first]
|
||||
[secrets::cross_signing_user_signing] =
|
||||
user_signing_key->encrypted.begin()->second;
|
||||
std::map<std::string, std::map<std::string, AesHmacSha2EncryptedData>>
|
||||
secrets;
|
||||
|
||||
for (const auto &[key, secrets] : secrets)
|
||||
unlock_secrets(key, secrets);
|
||||
if (backup_key && !backup_key->encrypted.empty())
|
||||
secrets[backup_key->encrypted.begin()->first]
|
||||
[secrets::megolm_backup_v1] =
|
||||
backup_key->encrypted.begin()->second;
|
||||
|
||||
if (master_key && !master_key->encrypted.empty())
|
||||
secrets[master_key->encrypted.begin()->first]
|
||||
[secrets::cross_signing_master] =
|
||||
master_key->encrypted.begin()->second;
|
||||
|
||||
if (self_signing_key && !self_signing_key->encrypted.empty())
|
||||
secrets[self_signing_key->encrypted.begin()->first]
|
||||
[secrets::cross_signing_self_signing] =
|
||||
self_signing_key->encrypted.begin()->second;
|
||||
|
||||
if (user_signing_key && !user_signing_key->encrypted.empty())
|
||||
secrets[user_signing_key->encrypted.begin()->first]
|
||||
[secrets::cross_signing_user_signing] =
|
||||
user_signing_key->encrypted.begin()->second;
|
||||
|
||||
for (const auto &[key, secrets] : secrets)
|
||||
unlock_secrets(key, secrets);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue