revamp config/installation
Signed-off-by: Tiago Garcia <tiago.rgarcia@ua.pt>
This commit is contained in:
parent
6688a89cb7
commit
cb471e4f16
|
|
@ -47,30 +47,32 @@ target_link_libraries(${EXECUTABLE_NAME} PUBLIC ncurses dialog)
|
||||||
# "-static -static-libgcc -static-libstdc++")
|
# "-static -static-libgcc -static-libstdc++")
|
||||||
|
|
||||||
# Install the executable
|
# Install the executable
|
||||||
set(SERVICE_EXECUTABLE "/services/gh-wh-handler/${EXECUTABLE_NAME}")
|
set(SERVICE_EXECUTABLE "/usr/bin/${EXECUTABLE_NAME}")
|
||||||
set(SERVICE_CONFIG "/services/gh-wh-handler/config.json")
|
set(SERVICE_CONFIG "/etc/gh-wh-handler/config.json")
|
||||||
set(SERVICE_LOGS "/services/gh-wh-handler/logs")
|
set(SERVICE_LOGS "/var/log/gh-wh-handler")
|
||||||
configure_file(
|
configure_file(
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/gh-wh-handler.service.in"
|
"${CMAKE_CURRENT_BINARY_DIR}/gh-wh-handler.service.in"
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/gh-wh-handler.service"
|
"${CMAKE_CURRENT_BINARY_DIR}/gh-wh-handler.service"
|
||||||
@ONLY)
|
@ONLY)
|
||||||
install(CODE "file(MAKE_DIRECTORY /services/gh-wh-handler)")
|
install(CODE "file(MAKE_DIRECTORY /etc/gh-wh-handler)")
|
||||||
install(CODE "file(MAKE_DIRECTORY /services/gh-wh-handler/logs)")
|
install(CODE "file(MAKE_DIRECTORY /var/log/gh-wh-handler)")
|
||||||
install(TARGETS ${EXECUTABLE_NAME} DESTINATION /services/gh-wh-handler)
|
install(TARGETS ${EXECUTABLE_NAME} DESTINATION /usr/bin)
|
||||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/config.json"
|
|
||||||
DESTINATION /services/gh-wh-handler)
|
|
||||||
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
|
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
|
||||||
/services/gh-wh-handler/${EXECUTABLE_NAME} /usr/bin/gh-wh-handler)")
|
/usr/bin/${EXECUTABLE_NAME} /usr/bin/gh-wh-handler)")
|
||||||
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/config.json"
|
||||||
|
DESTINATION /etc/gh-wh-handler)
|
||||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/gh-wh-handler.service"
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/gh-wh-handler.service"
|
||||||
DESTINATION /etc/systemd/system)
|
DESTINATION /etc/systemd/system)
|
||||||
install(CODE "execute_process(COMMAND systemctl daemon-reload)")
|
install(CODE "execute_process(COMMAND systemctl daemon-reload)")
|
||||||
install(CODE "execute_process(COMMAND systemctl enable gh-wh-handler)")
|
install(CODE "execute_process(COMMAND systemctl enable gh-wh-handler)")
|
||||||
install(CODE "execute_process(COMMAND systemctl start gh-wh-handler)")
|
install(CODE "execute_process(COMMAND systemctl start gh-wh-handler)")
|
||||||
|
|
||||||
|
|
||||||
if(NOT TARGET uninstall)
|
if(NOT TARGET uninstall)
|
||||||
configure_file(
|
configure_file(
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake.in"
|
"${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake.in"
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake" IMMEDIATE @ONLY)
|
"${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake" IMMEDIATE @ONLY)
|
||||||
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake)
|
add_custom_target(uninstall
|
||||||
|
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake
|
||||||
|
USES_TERMINAL
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,68 @@
|
||||||
message(STATUS "[0%] Stopping systemd service...")
|
function(ask_user_permission PROMPT_TEXT RESULT_VAR)
|
||||||
execute_process(COMMAND systemctl stop gh-wh-handler)
|
execute_process(COMMAND printf "${PROMPT_TEXT} [Y/n]: ")
|
||||||
|
|
||||||
message(STATUS "[15%] Disabling systemd service...")
|
execute_process(
|
||||||
execute_process(COMMAND systemctl disable gh-wh-handler)
|
COMMAND bash -c "read -n 1 -s -r; echo \"$REPLY\""
|
||||||
|
OUTPUT_VARIABLE USER_INPUT
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
message(STATUS "[30%] Removing service configuration file from systemd directory...")
|
string(TOLOWER "${USER_INPUT}" INPUT_LOWER)
|
||||||
file(REMOVE /etc/systemd/system/gh-wh-handler.service)
|
|
||||||
|
|
||||||
message(STATUS "[45%] Reloading systemd daemon...")
|
if("${INPUT_LOWER}" STREQUAL "y" OR "${INPUT_LOWER}" STREQUAL "")
|
||||||
|
set(${RESULT_VAR} TRUE PARENT_SCOPE)
|
||||||
|
execute_process(COMMAND echo "Y")
|
||||||
|
else()
|
||||||
|
set(${RESULT_VAR} FALSE PARENT_SCOPE)
|
||||||
|
execute_process(COMMAND echo "n")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
if(NOT DEFINED CMAKE_SCRIPT_MODE_FILE)
|
||||||
|
message(FATAL_ERROR "This script should be run via: cmake -P uninstall.cmake")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND id -u
|
||||||
|
OUTPUT_VARIABLE USER_ID
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT USER_ID EQUAL 0)
|
||||||
|
message(FATAL_ERROR "This script must be run as root (UID 0). Current UID: ${USER_ID}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(COMMAND uname -m OUTPUT_VARIABLE ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
message(STATUS "Uninstalling gh-wh-handler [${ARCH}]...")
|
||||||
|
|
||||||
|
message(STATUS "Stopping and disabling service...")
|
||||||
|
execute_process(COMMAND systemctl stop gh-wh-handler ERROR_QUIET)
|
||||||
|
execute_process(COMMAND systemctl disable gh-wh-handler ERROR_QUIET)
|
||||||
|
|
||||||
|
message(STATUS "Removing service file...")
|
||||||
|
file(REMOVE "/etc/systemd/system/gh-wh-handler.service")
|
||||||
|
|
||||||
|
message(STATUS "Reloading systemd...")
|
||||||
execute_process(COMMAND systemctl daemon-reload)
|
execute_process(COMMAND systemctl daemon-reload)
|
||||||
|
|
||||||
message(STATUS "[55%] Removing symlink to service executable...")
|
message(STATUS "Removing binaries...")
|
||||||
execute_process(COMMAND rm /usr/bin/gh-wh-handler)
|
file(REMOVE "/usr/bin/gh-wh-handler")
|
||||||
|
file(REMOVE "/usr/bin/gh-wh-handler.${ARCH}")
|
||||||
|
|
||||||
message(STATUS "[70%] Removing service executable from service directory...")
|
ask_user_permission("Do you want to remove the configuration file?" REMOVE_CONFIG)
|
||||||
file(REMOVE /services/gh-wh-handler/@EXECUTABLE_NAME@)
|
if(REMOVE_CONFIG)
|
||||||
|
message(STATUS "Removing /etc/gh-wh-handler...")
|
||||||
|
file(REMOVE_RECURSE "/etc/gh-wh-handler")
|
||||||
|
else()
|
||||||
|
message(STATUS "Skipping configuration removal.")
|
||||||
|
endif()
|
||||||
|
|
||||||
message(STATUS "[85%] Removing all log files...")
|
ask_user_permission("Do you want to remove the logs?" REMOVE_LOGS)
|
||||||
execute_process(COMMAND rm -fr /services/gh-wh-handler/logs)
|
if(REMOVE_LOGS)
|
||||||
|
message(STATUS "Removing /var/log/gh-wh-handler...")
|
||||||
|
file(REMOVE_RECURSE "/var/log/gh-wh-handler")
|
||||||
|
else()
|
||||||
|
message(STATUS "Skipping log removal.")
|
||||||
|
endif()
|
||||||
|
|
||||||
message(STATUS "[100%] Uninstallation complete!")
|
message(STATUS "Uninstallation complete.")
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,14 @@
|
||||||
|
|
||||||
class DialogMenu {
|
class DialogMenu {
|
||||||
public:
|
public:
|
||||||
static void open_menu(nlohmann::json config, std::string config_file_path);
|
static void open_menu(nlohmann::json config, std::string config_file_path, std::string default_editor);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static void open_main_menu();
|
||||||
|
|
||||||
|
static nlohmann::json s_config;
|
||||||
|
static std::string s_config_path;
|
||||||
|
static std::string s_editor;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
#ifndef TERMINAL_MENU_HPP
|
|
||||||
#define TERMINAL_MENU_HPP
|
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
|
||||||
|
|
||||||
class TerminalMenu {
|
|
||||||
public:
|
|
||||||
static void open_menu(nlohmann::json config, std::string config_file_path);
|
|
||||||
|
|
||||||
private:
|
|
||||||
static void general_menu(nlohmann::json config, std::string config_file_path);
|
|
||||||
static void update_files_menu(nlohmann::json config, std::string config_file_path);
|
|
||||||
static void run_scripts_menu(nlohmann::json config, std::string config_file_path);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -13,9 +13,12 @@ class Logger {
|
||||||
static void success(std::string message);
|
static void success(std::string message);
|
||||||
static void code(std::string message);
|
static void code(std::string message);
|
||||||
static void debug(std::string message);
|
static void debug(std::string message);
|
||||||
|
|
||||||
|
static void enable_config_mode();
|
||||||
private:
|
private:
|
||||||
static void log(std::string message, std::string level);
|
static void log(std::string message, std::string level);
|
||||||
static std::ofstream log_file;
|
static std::ofstream log_file;
|
||||||
|
static bool is_config_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,68 +1,49 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# Check if the script is being run as root
|
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
echo "This script must be run as root."
|
echo "Error: This script must be run as root (UID 0). Current UID: $(id -u)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Save the current directory
|
|
||||||
CUR_DIR=$(pwd)
|
CUR_DIR=$(pwd)
|
||||||
|
|
||||||
# Get system architecture
|
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
|
|
||||||
# Change to the temporary directory
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
|
||||||
# Download the latest version of the package for the system architecture
|
|
||||||
# Exit if the download fails
|
|
||||||
echo "Downloading gh-wh-handler..."
|
echo "Downloading gh-wh-handler..."
|
||||||
curl -fsSL https://cdn.tiagorg.pt/gh-wh-handler/gh-wh-handler.${ARCH}.latest.tar.gz -o gh-wh-handler.tar.gz || { echo "Download failed."; exit 1; }
|
curl -fsSL https://cdn.tiagorg.pt/gh-wh-handler/gh-wh-handler.${ARCH}.latest.tar.gz -o gh-wh-handler.tar.gz || { echo "Download failed."; exit 1; }
|
||||||
|
|
||||||
# Extract the package
|
|
||||||
echo "Extracting gh-wh-handler..."
|
echo "Extracting gh-wh-handler..."
|
||||||
tar -xzf gh-wh-handler.tar.gz || { echo "Extraction failed."; exit 1; }
|
tar -xzf gh-wh-handler.tar.gz || { echo "Extraction failed."; exit 1; }
|
||||||
|
|
||||||
# Change to the extracted directory
|
|
||||||
cd gh-wh-handler
|
cd gh-wh-handler
|
||||||
|
|
||||||
# Install the package
|
|
||||||
echo "Installing gh-wh-handler..."
|
echo "Installing gh-wh-handler..."
|
||||||
|
|
||||||
# Create service directory
|
echo "Creating directories..."
|
||||||
echo "Creating service directory..."
|
mkdir -p /etc/gh-wh-handler
|
||||||
mkdir -p /services/gh-wh-handler
|
mkdir -p /var/log/gh-wh-handler
|
||||||
mkdir -p /services/gh-wh-handler/logs
|
|
||||||
|
|
||||||
# Copy the binary and configuration file to the service directory
|
|
||||||
echo "Copying files..."
|
echo "Copying files..."
|
||||||
cp "gh-wh-handler.${ARCH}" /services/gh-wh-handler/
|
cp "gh-wh-handler.${ARCH}" /usr/bin/
|
||||||
cp "config.json" /services/gh-wh-handler/
|
ln -s /usr/bin/gh-wh-handler.${ARCH} /usr/bin/gh-wh-handler
|
||||||
|
cp "config.json" /etc/gh-wh-handler/
|
||||||
|
|
||||||
# Create a symbolic link to the binary in /usr/bin
|
|
||||||
echo "Creating symbolic link..."
|
|
||||||
ln -sf /services/gh-wh-handler/gh-wh-handler.${ARCH} /usr/bin/gh-wh-handler
|
|
||||||
|
|
||||||
# Copy the service file to the systemd directory
|
|
||||||
echo "Copying service file..."
|
echo "Copying service file..."
|
||||||
cp "gh-wh-handler.service" /etc/systemd/system/
|
cp "gh-wh-handler.service" /etc/systemd/system/
|
||||||
|
|
||||||
# Reload systemd
|
|
||||||
echo "Reloading systemd..."
|
echo "Reloading systemd..."
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
|
|
||||||
# Enable and start the service
|
|
||||||
echo "Enabling and starting service..."
|
echo "Enabling and starting service..."
|
||||||
systemctl enable gh-wh-handler
|
systemctl enable gh-wh-handler
|
||||||
systemctl start gh-wh-handler
|
systemctl start gh-wh-handler
|
||||||
|
|
||||||
# Clean up
|
|
||||||
echo "Cleaning up..."
|
echo "Cleaning up..."
|
||||||
cd /tmp
|
cd /tmp
|
||||||
rm -rf gh-wh-handler
|
rm -rf gh-wh-handler
|
||||||
rm gh-wh-handler.tar.gz
|
rm gh-wh-handler.tar.gz
|
||||||
|
|
||||||
# Change back to the original directory
|
|
||||||
cd $CUR_DIR
|
cd $CUR_DIR
|
||||||
echo "Installation complete."
|
echo "Installation complete."
|
||||||
|
|
|
||||||
|
|
@ -1,42 +1,54 @@
|
||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
|
|
||||||
|
ask_user_permission() {
|
||||||
|
local PROMPT_TEXT=$1
|
||||||
|
printf "${PROMPT_TEXT} [Y/n]: "
|
||||||
|
|
||||||
|
read -n 1 -s -r USER_INPUT
|
||||||
|
|
||||||
|
if [[ -z "$USER_INPUT" ]] || [[ "$USER_INPUT" =~ ^[Yy]$ ]]; then
|
||||||
|
echo "Y"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "n"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Check if the script is being run as root
|
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
echo "This script must be run as root."
|
echo "Error: This script must be run as root (UID 0). Current UID: $(id -u)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Save the current directory
|
|
||||||
CUR_DIR=$(pwd)
|
|
||||||
|
|
||||||
# Get system architecture
|
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
|
echo "Uninstalling gh-wh-handler [${ARCH}]..."
|
||||||
|
|
||||||
echo "Uninstalling gh-wh-handler..."
|
|
||||||
|
|
||||||
# Stop and disable the service
|
|
||||||
echo "Stopping and disabling service..."
|
echo "Stopping and disabling service..."
|
||||||
systemctl stop gh-wh-handler
|
systemctl stop gh-wh-handler 2>/dev/null
|
||||||
systemctl disable gh-wh-handler
|
systemctl disable gh-wh-handler 2>/dev/null
|
||||||
|
|
||||||
# Remove the service file
|
|
||||||
echo "Removing service file..."
|
echo "Removing service file..."
|
||||||
rm /etc/systemd/system/gh-wh-handler.service
|
rm -f "/etc/systemd/system/gh-wh-handler.service"
|
||||||
|
|
||||||
# Reload systemd
|
|
||||||
echo "Reloading systemd..."
|
echo "Reloading systemd..."
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
|
|
||||||
# Remove the symbolic link
|
echo "Removing binaries..."
|
||||||
echo "Removing symbolic link..."
|
rm -f "/usr/bin/gh-wh-handler"
|
||||||
rm /usr/bin/gh-wh-handler
|
rm -f "/usr/bin/gh-wh-handler.${ARCH}"
|
||||||
|
|
||||||
# Remove the logs directory and binary
|
if ask_user_permission "Do you want to remove the configuration file?"; then
|
||||||
echo "Removing files..."
|
echo "Removing /etc/gh-wh-handler..."
|
||||||
rm -rf /services/gh-wh-handler/logs
|
rm -rf "/etc/gh-wh-handler"
|
||||||
rm -f /services/gh-wh-handler/gh-wh-handler.${ARCH}
|
else
|
||||||
|
echo "Skipping configuration removal."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ask_user_permission "Do you want to remove the logs?"; then
|
||||||
|
echo "Removing /var/log/gh-wh-handler..."
|
||||||
|
rm -rf "/var/log/gh-wh-handler"
|
||||||
|
else
|
||||||
|
echo "Skipping log removal."
|
||||||
|
fi
|
||||||
|
|
||||||
# Change back to the original directory
|
|
||||||
cd $CUR_DIR
|
|
||||||
echo "Uninstallation complete."
|
echo "Uninstallation complete."
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "config/terminal-menu.hpp"
|
|
||||||
#include "config/dialog-menu.hpp"
|
#include "config/dialog-menu.hpp"
|
||||||
#include "logger.hpp"
|
#include "logger.hpp"
|
||||||
|
|
||||||
|
|
@ -66,18 +65,24 @@ nlohmann::json Config::get_config(std::string config_file_path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Config::open_menu(nlohmann::json config, std::string config_file_path) {
|
void Config::open_menu(nlohmann::json config, std::string config_file_path) {
|
||||||
Logger::info("[Config] Opening config menu");
|
Logger::info("[Config] Opening config...");
|
||||||
std::string menu = "";
|
|
||||||
if (std::system("which dialog > /dev/null") == 0) {
|
const char* visual_env = std::getenv("VISUAL");
|
||||||
menu = "dialog";
|
const char* editor_env = std::getenv("EDITOR");
|
||||||
} else {
|
|
||||||
menu = "terminal";
|
std::string default_editor = "vi";
|
||||||
|
if (visual_env) {
|
||||||
|
Logger::info("[Config] VISUAL environment variable found: " + std::string(visual_env));
|
||||||
|
default_editor = visual_env;
|
||||||
|
} else if (editor_env) {
|
||||||
|
Logger::info("[Config] EDITOR environment variable found: " + std::string(editor_env));
|
||||||
|
default_editor = editor_env;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (menu == "dialog") {
|
if (std::system("which dialog > /dev/null") == 0) {
|
||||||
DialogMenu::open_menu(config, config_file_path);
|
DialogMenu::open_menu(config, config_file_path, default_editor);
|
||||||
} else {
|
} else {
|
||||||
TerminalMenu::open_menu(config, config_file_path);
|
std::string command = default_editor + " " + config_file_path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,58 @@
|
||||||
#include "config/dialog-menu.hpp"
|
#include "config/dialog-menu.hpp"
|
||||||
#include "logger.hpp"
|
#include "logger.hpp"
|
||||||
|
|
||||||
void DialogMenu::open_menu(nlohmann::json config, std::string config_file_path) {
|
nlohmann::json DialogMenu::s_config;
|
||||||
|
std::string DialogMenu::s_config_path;
|
||||||
|
std::string DialogMenu::s_editor;
|
||||||
|
|
||||||
|
void DialogMenu::open_menu(nlohmann::json config, std::string config_file_path, std::string default_editor) {
|
||||||
|
Logger::info("Opening dialog menu");
|
||||||
|
|
||||||
|
init_dialog(stdin, stdout);
|
||||||
|
|
||||||
|
// Define the menu items: { "Tag", "Description" }
|
||||||
|
const char *items[] = {
|
||||||
|
"1", "Continue with visual menu",
|
||||||
|
"2", "Open default editor"
|
||||||
|
};
|
||||||
|
int item_count = 2;
|
||||||
|
|
||||||
|
// dialog_menu returns 0 on success (Enter), 1 on Cancel/ESC
|
||||||
|
int result = dialog_menu(
|
||||||
|
"GitHub Webhook Handler - Config Menu", // Title
|
||||||
|
"Select an option to proceed:", // Prompt
|
||||||
|
12, 50, // Height, Width
|
||||||
|
item_count, // Menu height inside box
|
||||||
|
item_count, // Number of items
|
||||||
|
const_cast<char**>(items) // Items array
|
||||||
|
);
|
||||||
|
|
||||||
|
if (result == 0) {
|
||||||
|
std::string choice = dialog_vars.input_result;
|
||||||
|
|
||||||
|
if (choice == "1") {
|
||||||
|
Logger::info("User chose: Visual Menu");
|
||||||
|
|
||||||
|
s_config = config;
|
||||||
|
s_config_path = config_file_path;
|
||||||
|
s_editor = default_editor;
|
||||||
|
|
||||||
|
open_main_menu();
|
||||||
|
} else if (choice == "2") {
|
||||||
|
Logger::info("User chose: Default Editor");
|
||||||
|
// Logic to launch default_editor with config_file_path
|
||||||
|
std::string command = default_editor + " " + config_file_path;
|
||||||
|
system(command.c_str());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Logger::info("User cancelled the menu");
|
||||||
|
}
|
||||||
|
|
||||||
|
end_dialog();
|
||||||
|
Logger::info("Dialog menu closed");
|
||||||
|
}
|
||||||
|
|
||||||
|
void DialogMenu::open_main_menu() {
|
||||||
Logger::info("Opening dialog menu");
|
Logger::info("Opening dialog menu");
|
||||||
init_dialog(stdin, stdout);
|
init_dialog(stdin, stdout);
|
||||||
dialog_msgbox(
|
dialog_msgbox(
|
||||||
|
|
|
||||||
|
|
@ -1,98 +0,0 @@
|
||||||
#include <iostream>
|
|
||||||
#include <fstream>
|
|
||||||
#include "config/terminal-menu.hpp"
|
|
||||||
#include "config/config-api.hpp"
|
|
||||||
#include "logger.hpp"
|
|
||||||
|
|
||||||
void print_menu() {
|
|
||||||
std::cout << "1. Print menu" << std::endl;
|
|
||||||
std::cout << "2. Preview current config" << std::endl;
|
|
||||||
std::cout << "3. Set port" << std::endl;
|
|
||||||
std::cout << "4. Add token" << std::endl;
|
|
||||||
std::cout << "5. Remove token" << std::endl;
|
|
||||||
std::cout << "6. Add run actions repo" << std::endl;
|
|
||||||
std::cout << "7. Add run actions action" << std::endl;
|
|
||||||
std::cout << "8. Remove run actions repo" << std::endl;
|
|
||||||
std::cout << "9. Remove run actions action" << std::endl;
|
|
||||||
std::cout << "10. Add update files repo" << std::endl;
|
|
||||||
std::cout << "11. Add update files file" << std::endl;
|
|
||||||
std::cout << "12. Add update files post-update" << std::endl;
|
|
||||||
std::cout << "13. Remove update files repo" << std::endl;
|
|
||||||
std::cout << "14. Remove update files file" << std::endl;
|
|
||||||
std::cout << "15. Remove update files post-update" << std::endl;
|
|
||||||
std::cout << "16. Exit and save changes" << std::endl;
|
|
||||||
std::cout << "17. Exit and discard changes" << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TerminalMenu::open_menu(nlohmann::json config, std::string config_file_path) {
|
|
||||||
Logger::warn("[Config] Config menu (no TUI available, using terminal only)");
|
|
||||||
|
|
||||||
print_menu();
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
std::cout << ">>> ";
|
|
||||||
|
|
||||||
int choice;
|
|
||||||
std::cin >> choice;
|
|
||||||
|
|
||||||
switch (choice) {
|
|
||||||
case 1: {
|
|
||||||
print_menu();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 2: {
|
|
||||||
Logger::info("[Config] Current config: ");
|
|
||||||
Logger::code(config.dump(2));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 3: {
|
|
||||||
int port;
|
|
||||||
std::cout << "Enter new port: ";
|
|
||||||
std::cin >> port;
|
|
||||||
config = ConfigApi::set_port(config, port);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 4: {
|
|
||||||
std::string repo, token;
|
|
||||||
std::cout << "Enter repo name (owner/name): ";
|
|
||||||
std::cin >> repo;
|
|
||||||
if (config["tokens"].find(repo) != config["tokens"].end()) {
|
|
||||||
std::cout << "Token already exists for this repo. Do you want to update it? (y/N): ";
|
|
||||||
char update;
|
|
||||||
std::cin >> update;
|
|
||||||
if (update != 'y') {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::cout << "Enter token: ";
|
|
||||||
std::cin >> token;
|
|
||||||
config = ConfigApi::add_token(config, repo, token);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 5: {
|
|
||||||
std::string repo;
|
|
||||||
std::cout << "Enter repo name (owner/name): ";
|
|
||||||
std::cin >> repo;
|
|
||||||
config = ConfigApi::remove_token(config, repo);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 16: {
|
|
||||||
Logger::info("[Config] Saving changes to config file: " + config_file_path);
|
|
||||||
Logger::info("[Config] New config: ");
|
|
||||||
std::ofstream config_file(config_file_path);
|
|
||||||
Logger::code(config.dump(2));
|
|
||||||
config_file << config.dump(2);
|
|
||||||
config_file.close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
case 17: {
|
|
||||||
std::cout << "Exiting without saving changes" << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
std::cout << "Invalid choice" << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -33,6 +33,7 @@
|
||||||
#define COLORS_BG_WHITE "\033[47m"
|
#define COLORS_BG_WHITE "\033[47m"
|
||||||
|
|
||||||
std::ofstream Logger::log_file;
|
std::ofstream Logger::log_file;
|
||||||
|
bool Logger::is_config_mode = false;
|
||||||
|
|
||||||
void Logger::init(std::string logs_dir) {
|
void Logger::init(std::string logs_dir) {
|
||||||
std::cout << "Initializing logger" << std::endl;
|
std::cout << "Initializing logger" << std::endl;
|
||||||
|
|
@ -62,6 +63,7 @@ void Logger::init(std::string logs_dir) {
|
||||||
if (!Logger::log_file.is_open()) {
|
if (!Logger::log_file.is_open()) {
|
||||||
std::cerr << "Error opening log file" << std::endl;
|
std::cerr << "Error opening log file" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger::success("Logger initialized");
|
Logger::success("Logger initialized");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -137,10 +139,15 @@ void Logger::log(std::string message, std::string level) {
|
||||||
} else {
|
} else {
|
||||||
formatted_message += "[" + level + "] " + message;
|
formatted_message += "[" + level + "] " + message;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isatty(fileno(stdout))) {
|
if (isatty(fileno(stdout))) {
|
||||||
formatted_message += COLORS_RESET;
|
formatted_message += COLORS_RESET;
|
||||||
}
|
}
|
||||||
std::cout << formatted_message << std::endl;
|
|
||||||
|
if (!Logger::is_config_mode) {
|
||||||
|
std::cout << formatted_message << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
if (level == "CODE") {
|
if (level == "CODE") {
|
||||||
#if defined(__aarch64__)
|
#if defined(__aarch64__)
|
||||||
Logger::log_file << std::endl << message << std::endl;
|
Logger::log_file << std::endl << message << std::endl;
|
||||||
|
|
@ -160,3 +167,7 @@ void Logger::log(std::string message, std::string level) {
|
||||||
std::exit(1);
|
std::exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Logger::enable_config_mode() {
|
||||||
|
Logger::is_config_mode = true;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ int main(int argc, char **argv) {
|
||||||
nlohmann::json config = Config::get_config(config_file_path);
|
nlohmann::json config = Config::get_config(config_file_path);
|
||||||
|
|
||||||
if (argc == 4 && std::string(argv[3]) == "--config") {
|
if (argc == 4 && std::string(argv[3]) == "--config") {
|
||||||
|
Logger::enable_config_mode();
|
||||||
Config::open_menu(config, config_file_path);
|
Config::open_menu(config, config_file_path);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue