OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
OrcaCloudServiceAgent.cpp File Reference
#include "OrcaCloudServiceAgent.hpp"
#include "CloudProvider.hpp"
#include "Http.hpp"
#include "bambu_networking.hpp"
#include "ICloudServiceAgent.hpp"
#include "libslic3r/Utils.hpp"
#include "slic3r/GUI/GUI_App.hpp"
#include "slic3r/GUI/I18N.hpp"
#include "libslic3r/AppConfig.hpp"
#include <atomic>
#include <boost/asio.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/io_context.hpp>
#include <boost/beast/core/detail/base64.hpp>
#include <boost/filesystem.hpp>
#include <boost/filesystem/operations.hpp>
#include <boost/log/trivial.hpp>
#include <boost/uuid/name_generator_sha1.hpp>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <chrono>
#include <cstdio>
#include <exception>
#include <functional>
#include <iostream>
#include <iterator>
#include <libslic3r/Platform.hpp>
#include <map>
#include "libslic3r/Preset.hpp"
#include "libslic3r/ProjectTask.hpp"
#include <memory>
#include <mutex>
#include <nlohmann/json.hpp>
#include <openssl/evp.h>
#include <openssl/hmac.h>
#include <openssl/rand.h>
#include <openssl/sha.h>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <optional>
#include <random>
#include <sstream>
#include <string>
#include <system_error>
#include <thread>
#include <unordered_map>
#include <utility>
#include <vector>
#include <wx/filename.h>
#include <wx/filefn.h>
#include <wx/secretstore.h>
#include <wx/stdpaths.h>
#include <wx/app.h>
#include <wx/utils.h>
#include "slic3r/plugin/PluginDescriptor.hpp"
#include "libslic3r/PresetBundle.hpp"
#include <unistd.h>
#include <fcntl.h>
#include <sys/file.h>
#include <cerrno>

Go to the source code of this file.

Classes

class  Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::InterProcessRefreshTokenLock

Namespaces

namespace  Slic3r
 |/ Copyright (c) Prusa Research 2020 - 2023 Enrico Turri @enricoturri1966 |/ |/ PrusaSlicer is released under the terms of the AGPLv3 or higher |/
namespace  Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}

Functions

std::string Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::get_json_string_field (const json &j, const std::string &key)
long long Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::get_json_int64_field (const json &j, const std::string &key)
std::string Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::resolve_display_name (const std::string &display_name, const std::string &nickname, const std::string &full_name, const std::string &name, const std::string &username)
std::string Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::base64url_encode (const std::vector< unsigned char > &data)
bool Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::base64url_decode (const std::string &input, std::vector< unsigned char > &out)
std::vector< unsigned char > Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::random_bytes (size_t len)
std::string Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::generate_code_verifier ()
std::string Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::generate_state_token ()
std::string Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::sha256_base64url (const std::string &input)
std::string Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::os_machine_id ()
std::string Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::get_encryption_key ()
std::vector< unsigned char > Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::sha256_bytes (const std::string &input)
std::string Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::hmac_sha256_hex (const std::string &data, const std::vector< unsigned char > &key)
bool Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::is_port_available (int port)
int Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::choose_loopback_port ()
bool Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::aes256gcm_encrypt (const std::string &plaintext, const std::vector< unsigned char > &key, std::string &out_b64)
bool Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::aes256gcm_decrypt (const std::string &b64_payload, const std::vector< unsigned char > &key, std::string &plaintext)
static bool Slic3r::parse_stored_secret (const std::string &secret, std::string &out_refresh_token, OrcaCloudServiceAgent::SessionInfo &out_session)
 Decode a saved user session or a refresh token.
static RefreshResult Slic3r::classify_refresh_result (unsigned http_code, bool session_established)
static std::string Slic3r::extract_error_code (const std::string &body)
static long long Slic3r::now_epoch_seconds ()
static std::string Slic3r::percent_encode_unreserved (const std::string &s)
static std::string Slic3r::handoff_error_code (const std::string &body)
static std::vector< std::string > Slic3r::parse_cloud_display_types (const nlohmann::json &item)
static bool Slic3r::cloud_media_is_image (const nlohmann::json &main_image)
static std::string Slic3r::parse_cloud_author (const nlohmann::json &item)

Variables

constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_DEFAULT_API_URL = "https://api.orcaslicer.com"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_DEFAULT_AUTH_URL = "https://auth.orcaslicer.com"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_DEFAULT_CLOUD_URL = "https://cloud.orcaslicer.com"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_DEFAULT_PUB_KEY = "sb_publishable_lvVe_whOi80SU9BPSxM1kA_tbt9AbR_"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_HEALTH_PATH = "/api/v1/health"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_SYNC_PULL_PATH = "/api/v1/sync/pull"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_SYNC_PUSH_PATH = "/api/v1/sync/push"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_SYNC_FORCE_PUSH_PATH = "/api/v1/sync/force-push"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_SYNC_DELETE_PATH = "/api/v1/sync/delete"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_PROFILES_PATH = "/api/v1/sync/profiles"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_SUBSCRIPTIONS_PATH = "/api/v1/subscriptions"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_SYNC_STATE_FILE = "sync_state"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_SYNC_PROFILE_TABLE = "profiles"
constexpr size_t Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_SYNC_MAX_PAYLOAD_SIZE = 1048576
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_SUBSCRIBED_PLUGINS = "/api/v1/plugins/subscriptions"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_UNSUBSCRIBE_PLUGINS = "/api/v1/plugins/subscriptions"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_PLUGINS_MINE = "/api/v1/plugins/mine"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_PLUGINS_BASE = "/api/v1/plugins"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_PLUGIN_DOWNLOAD_URL = "/api/v1/plugins/download"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_CLOUD_PRINTER = "/api/v1/printers"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_CLOUD_LOGIN_PATH = "/orcaslicer-login"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::ORCA_WEB_SESSION_HANDOFF_PATH = "/api/v1/account/web-session-handoff"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::CONFIG_ORCA_API_URL = "orca_api_url"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::CONFIG_ORCA_AUTH_URL = "orca_auth_url"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::CONFIG_ORCA_CLOUD_URL = "orca_cloud_url"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::CONFIG_ORCA_PUB_KEY = "orca_pub_key"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::SECRET_STORE_SERVICE = "OrcaSlicer/Auth"
constexpr const char * Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::SECRET_STORE_USER = "orca_refresh_token"
constexpr std::chrono::seconds Slic3r::anonymous_namespace{OrcaCloudServiceAgent.cpp}::TOKEN_REFRESH_SKEW {900}