mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-19 03:13:39 +00:00
make the uuid generation more robust
This commit is contained in:
@@ -74,19 +74,21 @@ constexpr const char* SECRET_STORE_SERVICE = "OrcaSlicer/Auth";
|
|||||||
constexpr const char* SECRET_STORE_USER = "orca_refresh_token";
|
constexpr const char* SECRET_STORE_USER = "orca_refresh_token";
|
||||||
constexpr std::chrono::seconds TOKEN_REFRESH_SKEW{900}; // 15 minutes
|
constexpr std::chrono::seconds TOKEN_REFRESH_SKEW{900}; // 15 minutes
|
||||||
|
|
||||||
std::string generate_uuid_for_setting_id(const std::string& name = "")
|
std::string generate_uuid_for_setting_id(const std::string& name, const std::string& user_id = "")
|
||||||
{
|
{
|
||||||
if (name.empty()) {
|
if (name.empty()) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use a fixed namespace UUID for OrcaSlicer profiles
|
// Mix user_id into the hashed input so two different users generating a setting_id
|
||||||
// This ensures the same name always generates the same UUID
|
// for an identically-named preset get distinct UUIDs. Without this, the cloud's ID
|
||||||
|
// space collides across accounts and the second user's create gets HTTP 409 with
|
||||||
|
// server_profile=null on every sync (the foreign owner's record is not exposed).
|
||||||
static const boost::uuids::uuid orca_namespace =
|
static const boost::uuids::uuid orca_namespace =
|
||||||
boost::uuids::string_generator()("f47ac10b-58cc-4372-a567-0e02b2c3d479");
|
boost::uuids::string_generator()("f47ac10b-58cc-4372-a567-0e02b2c3d479");
|
||||||
|
|
||||||
boost::uuids::name_generator_sha1 gen(orca_namespace);
|
boost::uuids::name_generator_sha1 gen(orca_namespace);
|
||||||
boost::uuids::uuid id = gen(name);
|
boost::uuids::uuid id = user_id.empty() ? gen(name) : gen(user_id + "/" + name);
|
||||||
return boost::uuids::to_string(id);
|
return boost::uuids::to_string(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -904,7 +906,7 @@ int OrcaCloudServiceAgent::get_user_presets(std::map<std::string, std::map<std::
|
|||||||
|
|
||||||
std::string OrcaCloudServiceAgent::request_setting_id(std::string name, std::map<std::string, std::string>* values_map, unsigned int* http_code)
|
std::string OrcaCloudServiceAgent::request_setting_id(std::string name, std::map<std::string, std::string>* values_map, unsigned int* http_code)
|
||||||
{
|
{
|
||||||
std::string new_id = generate_uuid_for_setting_id(name);
|
std::string new_id = generate_uuid_for_setting_id(name, get_user_id());
|
||||||
if (new_id.empty()) {
|
if (new_id.empty()) {
|
||||||
BOOST_LOG_TRIVIAL(error) << "OrcaCloudServiceAgent: request_setting_id failed - name is empty";
|
BOOST_LOG_TRIVIAL(error) << "OrcaCloudServiceAgent: request_setting_id failed - name is empty";
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
Reference in New Issue
Block a user