mirror of
https://github.com/uroni/urbackup_backend.git
synced 2025-10-26 11:36:50 +00:00
54 lines
1.8 KiB
C++
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;
|
|
}
|