File SpaceTrackClient.hpp¶
File List > astrea > snapshot > snapshot > http-queries > spacetrack > SpaceTrackClient.hpp
Go to the documentation of this file
#pragma once
#include <filesystem>
#include <variant>
#include <cpr/cpr.h>
#include <nlohmann/json.hpp>
#include <astro/time/Date.hpp>
#include <snapshot/types/typedefs.hpp>
namespace astrea {
namespace snapshot {
class SpaceTrackClient {
public:
enum class Controller : EnumType {
BASIC_SPACE_DATA,
// EXPANDED_SPACE_DATA, //!< USSPACECOM SSA Sharing Agreements
// FILE_SHARE, //!< Permission Controlled
// COMBINED_OPS_DATA, //!< Permission Controlled
PUBLIC_FILES
};
enum class Action : EnumType {
QUERY,
MODEL_DEF,
};
enum class SpaceDataClass : EnumType {
ANNOUNCEMENT,
BOX_SCORE,
CDM_PUBLIC,
DECAY,
GP,
GP_HISTORY,
LAUNCH_SITE,
SATCAT,
SATCAT_CHANGE,
SATCAT_DEBUT,
TIP
};
enum class PublicFilesClass : EnumType {
DIRS,
DOWNLOAD,
FILES,
LOAD_PUBLIC_DATA
};
using RequestClass = std::variant<SpaceDataClass, PublicFilesClass>;
SpaceTrackClient() = default;
~SpaceTrackClient() = default;
void login(const std::string& username, const std::string& password);
nlohmann::json query(
const std::string& username,
const std::string& password,
const Controller& controller = Controller::BASIC_SPACE_DATA,
const Action& action = Action::QUERY,
const RequestClass& requestClass = SpaceDataClass::GP,
const std::vector<std::pair<std::string, std::string>> predicates = {}
);
nlohmann::json retrieve_all(const std::string& username, const std::string& password);
private:
const cpr::Url _base = "https://www.space-track.org";
// Login
const cpr::Url _loginUrl = _base + "/ajaxauth/login";
cpr::Cookies _loginCookies;
bool valid_cookies() const;
void check_query_history(const std::string& username) const;
std::string controller_to_string(const Controller& controller) const;
std::string action_to_string(const Action& action) const;
std::string class_to_string(const RequestClass& requestClass) const;
std::string class_to_string(const SpaceDataClass& requestClass) const;
std::string class_to_string(const PublicFilesClass& requestClass) const;
cpr::Url build_query_url(
const Controller& controller,
const Action& action,
const RequestClass& requestClass,
const std::vector<std::pair<std::string, std::string>> predicates
) const;
nlohmann::json query_impl(const std::string& username, const std::string& password, cpr::Url queryUrl);
};
} // namespace snapshot
} // namespace astrea