Fix multi-account password saving
Fixes GH-6288, and hopefully makes the code more readable / easier to understand.
This commit is contained in:
parent
1e844357c1
commit
d30ca01656
1 changed files with 10 additions and 13 deletions
|
@ -37,6 +37,7 @@
|
|||
#endif
|
||||
|
||||
static lg::log_domain log_config("config");
|
||||
#define DBG_CFG LOG_STREAM(debug , log_config)
|
||||
#define ERR_CFG LOG_STREAM(err , log_config)
|
||||
|
||||
class secure_buffer : public std::vector<unsigned char>
|
||||
|
@ -154,6 +155,7 @@ namespace preferences
|
|||
|
||||
std::string password(const std::string& server, const std::string& login)
|
||||
{
|
||||
DBG_CFG << "Retrieving password for server: '" << server << "', login: '" << login << "'\n";
|
||||
auto login_clean = login;
|
||||
boost::trim(login_clean);
|
||||
|
||||
|
@ -177,6 +179,7 @@ namespace preferences
|
|||
|
||||
void set_password(const std::string& server, const std::string& login, const std::string& key)
|
||||
{
|
||||
DBG_CFG << "Setting password for server: '" << server << "', login: '" << login << "'\n";
|
||||
auto login_clean = login;
|
||||
boost::trim(login_clean);
|
||||
|
||||
|
@ -230,21 +233,15 @@ namespace preferences
|
|||
filesystem::delete_file(filesystem::get_credentials_file());
|
||||
return;
|
||||
}
|
||||
secure_buffer credentials_data(1, CREDENTIAL_SEPARATOR);
|
||||
std::size_t offset = 1;
|
||||
secure_buffer credentials_data;
|
||||
for(const auto& cred : credentials) {
|
||||
credentials_data.resize(credentials_data.size() + cred.size(), CREDENTIAL_SEPARATOR);
|
||||
std::copy(cred.username.begin(), cred.username.end(), credentials_data.begin() + offset);
|
||||
offset += cred.username.size();
|
||||
credentials_data[offset++] = '@';
|
||||
std::copy(cred.server.begin(), cred.server.end(), credentials_data.begin() + offset);
|
||||
offset += cred.server.size();
|
||||
credentials_data[offset++] = '=';
|
||||
credentials_data.push_back(CREDENTIAL_SEPARATOR);
|
||||
credentials_data.insert(credentials_data.end(), cred.username.begin(), cred.username.end());
|
||||
credentials_data.push_back('@');
|
||||
credentials_data.insert(credentials_data.end(), cred.server.begin(), cred.server.end());
|
||||
credentials_data.push_back('=');
|
||||
secure_buffer key_escaped = escape(cred.key);
|
||||
// Escaping may increase the length, so resize again if so
|
||||
credentials_data.resize(credentials_data.size() + key_escaped.size() - cred.key.size());
|
||||
std::copy(key_escaped.begin(), key_escaped.end(), credentials_data.begin() + offset);
|
||||
offset += key_escaped.size() + 1;
|
||||
credentials_data.insert(credentials_data.end(), key_escaped.begin(), key_escaped.end());
|
||||
}
|
||||
try {
|
||||
filesystem::scoped_ostream credentials_file = filesystem::ostream_file(filesystem::get_credentials_file());
|
||||
|
|
Loading…
Add table
Reference in a new issue