urbackup_backend/urbackupcommon/backup_url_parser.cpp
2021-06-15 16:49:09 +02:00

54 lines
1.8 KiB
C++

#include "backup_url_parser.h"
#include "../stringtools.h"
bool parse_backup_url(const std::string& url, const std::string& url_params,
const str_map& secret_params, IClouddriveFactory::CloudSettings& settings)
{
if (next(url, 0, "s3://") ||
next(url, 0, "ss3://"))
{
bool ssl = next(url, 0, "ss3://");
settings.endpoint = IClouddriveFactory::CloudEndpoint::S3;
std::string authorization = getbetween(ssl ? "ss3://" : "s3://", "@", url);
std::string server = getafter("@", url);
if (server.empty())
{
server = url.substr(5);
}
settings.s3_settings.access_key = getuntil(":", authorization);
settings.s3_settings.secret_access_key = getafter(":", authorization);
settings.s3_settings.endpoint = (ssl ? "https://" : "http://") + getuntil("/", server);
settings.s3_settings.bucket_name = getafter("/", server);
auto encryption_key_it = secret_params.find("encryption_key");
if (encryption_key_it != secret_params.end())
settings.encryption_key = encryption_key_it->second;
if (settings.s3_settings.access_key.empty())
{
auto access_key_it = secret_params.find("access_key");
if (access_key_it != secret_params.end())
settings.s3_settings.access_key = access_key_it->second;
}
if (settings.s3_settings.secret_access_key.empty())
{
auto secret_access_key_it = secret_params.find("secret_access_key");
if (secret_access_key_it != secret_params.end())
settings.s3_settings.secret_access_key = secret_access_key_it->second;
}
std::string nurl = (ssl ? "ss3://" : "s3://") + server;
std::string cacheid = Server->GenerateHexMD5(nurl);
settings.cache_img_path = "urbackup/" + cacheid + ".vhdx";
settings.s3_settings.cache_db_path = "urbackup/" + cacheid + ".db";
return true;
}
return false;
}