From c220fca6910a96be76ba0d87d10dc84f8d80ba12 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 21 Apr 2025 11:54:37 +1200 Subject: [PATCH] servers --- src/dropshell.hpp | 4 +++- src/server_env.cpp | 9 ++++++++- src/server_env.hpp | 3 +++ src/servers.cpp | 34 ++++++++++++++-------------------- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/dropshell.hpp b/src/dropshell.hpp index b65fe14..13215cf 100644 --- a/src/dropshell.hpp +++ b/src/dropshell.hpp @@ -16,7 +16,9 @@ const std::string LICENSE = "MIT"; // Server information structure struct ServerInfo { std::string name; - std::string address; + std::string ssh_host; + std::string ssh_user; + std::string ssh_port; }; // Command handlers diff --git a/src/server_env.cpp b/src/server_env.cpp index 035255b..f16de4b 100644 --- a/src/server_env.cpp +++ b/src/server_env.cpp @@ -6,7 +6,11 @@ namespace dropshell { -server_env::server_env(const std::string& path) { +bool server_env::is_valid() { + return mValid; +} + +server_env::server_env(const std::string& path) : mValid(false) { // Construct the full path to _server.env boost::filesystem::path env_path = boost::filesystem::path(path) / "_server.env"; @@ -33,6 +37,9 @@ server_env::server_env(const std::string& path) { variables.find("SSH_PORT") == variables.end()) { throw std::runtime_error("Missing required variables in server environment file"); } + + mValid = true; + } catch (const boost::property_tree::ini_parser_error& e) { throw std::runtime_error("Failed to parse server environment file: " + std::string(e.what())); } diff --git a/src/server_env.hpp b/src/server_env.hpp index 69b6232..7cf5183 100644 --- a/src/server_env.hpp +++ b/src/server_env.hpp @@ -24,8 +24,11 @@ class server_env { std::string get_SSH_USER(); std::string get_SSH_PORT(); + bool is_valid(); + private: std::map variables; + bool mValid; }; } // namespace dropshell diff --git a/src/servers.cpp b/src/servers.cpp index f5f48ff..fddaaa5 100644 --- a/src/servers.cpp +++ b/src/servers.cpp @@ -1,4 +1,5 @@ #include "dropshell.hpp" +#include "server_env.hpp" #include #include #include @@ -23,31 +24,24 @@ std::vector get_configured_servers() { } fs::path servers_dir = fs::path(user_dir) / "servers"; if (!fs::exists(servers_dir)) { + std::cerr << "Error: Servers directory not found" << std::endl; return servers; } for (const auto& entry : fs::directory_iterator(servers_dir)) { if (fs::is_directory(entry)) { fs::path env_file = entry.path() / "_server.env"; - if (fs::exists(env_file)) { - std::ifstream file(env_file.string()); - std::string line; - std::string address; - - while (std::getline(file, line)) { - if (boost::starts_with(line, "SSH_ADDRESS=")) { - address = line.substr(12); - break; - } - } - - if (!address.empty()) { - servers.push_back({ - entry.path().filename().string(), - address - }); - } + server_env env(env_file.string()); + if (!env.is_valid()) { + std::cerr << "Error: Invalid server environment file: " << env_file.string() << std::endl; + continue; } + servers.push_back({ + entry.path().filename().string(), + env.get_SSH_HOST(), + env.get_SSH_USER(), + env.get_SSH_PORT() + }); } } @@ -68,7 +62,7 @@ void list_servers() { for (const auto& server : servers) { max_name_len = std::max(max_name_len, server.name.length()); - max_addr_len = std::max(max_addr_len, server.address.length()); + max_addr_len = std::max(max_addr_len, server.ssh_host.length()); } // Print header @@ -82,7 +76,7 @@ void list_servers() { // Print server rows for (const auto& server : servers) { std::cout << std::left << std::setw(max_name_len) << server.name << " | " - << std::setw(max_addr_len) << server.address << std::endl; + << std::setw(max_addr_len) << server.ssh_host << std::endl; } }