1
0
mirror of https://github.com/CPunch/Laika.git synced 2025-10-08 08:50:12 +00:00

Shell: improved looks, added colored output

This commit is contained in:
2022-03-21 17:47:46 -05:00
parent 30f7ffb73b
commit 192bf22225
8 changed files with 125 additions and 26 deletions

View File

@@ -12,8 +12,34 @@
#include "sclient.h"
typedef enum {
TERM_BLACK,
TERM_RED,
TERM_GREEN,
TERM_YELLOW,
TERM_BLUE,
TERM_MAGENTA,
TERM_CYAN,
TERM_WHITE,
TERM_BRIGHT_BLACK,
TERM_BRIGHT_RED,
TERM_BRIGHT_GREEN,
TERM_BRIGHT_YELLOW,
TERM_BRIGHT_BLUE,
TERM_BRIGHT_MAGENTA,
TERM_BRIGHT_CYAN,
TERM_BRIGHT_WHITE
} TERM_COLOR;
#define PRINTINFO(...) shellT_printf("\r%s[~]%s ", shellT_getForeColor(TERM_BRIGHT_YELLOW), shellT_getForeColor(TERM_BRIGHT_WHITE)); \
shellT_printf(__VA_ARGS__);
#define PRINTSUCC(...) shellT_printf("\r%s[~]%s ", shellT_getForeColor(TERM_BRIGHT_GREEN), shellT_getForeColor(TERM_BRIGHT_WHITE)); \
shellT_printf(__VA_ARGS__);
void shellT_conioTerm(void);
void shellT_resetTerm(void);
const char *shellT_getForeColor(TERM_COLOR);
void shellT_printf(const char *format, ...);
/* waits for input for timeout (in ms). returns true if input is ready to be read, false if no events */

View File

@@ -3,10 +3,18 @@
#include "sclient.h"
#include "sterm.h"
#define STRING(x) #x
#define MACROLITSTR(x) STRING(x)
const char *LOGO = "\n██╗ █████╗ ██╗██╗ ██╗ █████╗\n██║ ██╔══██╗██║██║ ██╔╝██╔══██╗\n██║ ███████║██║█████╔╝ ███████║\n██║ ██╔══██║██║██╔═██╗ ██╔══██║\n███████╗██║ ██║██║██║ ██╗██║ ██║\n╚══════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═╝";
int main(int argv, char *argc[]) {
tShell_client client;
bool printPrompt = false;
shellT_printf("%s%s\n%s", shellT_getForeColor(TERM_BRIGHT_RED), LOGO, shellT_getForeColor(TERM_BRIGHT_WHITE));
shellT_printf("\t\t%s\n\n", " v"MACROLITSTR(LAIKA_VERSION_MAJOR) "." MACROLITSTR(LAIKA_VERSION_MINOR));
shellC_init(&client);
shellC_connectToCNC(&client, "127.0.0.1", "13337");

View File

@@ -31,6 +31,8 @@ uint64_t shell_ElemHash(const void *item, uint64_t seed0, uint64_t seed1) {
void shellC_handleHandshakeRes(struct sLaika_peer *peer, LAIKAPKT_SIZE sz, void *uData) {
uint8_t endianness = laikaS_readByte(&peer->sock);
peer->sock.flipEndian = endianness != laikaS_isBigEndian();
PRINTSUCC("Handshake accepted!\n");
}
void shellC_handleAddPeer(struct sLaika_peer *peer, LAIKAPKT_SIZE sz, void *uData) {
@@ -185,6 +187,8 @@ void shellC_cleanup(tShell_client *client) {
void shellC_connectToCNC(tShell_client *client, char *ip, char *port) {
struct sLaika_socket *sock = &client->peer->sock;
PRINTINFO("Connecting to CNC...\n");
/* create encryption keys */
if (crypto_kx_client_session_keys(client->peer->inKey, client->peer->outKey, client->pub, client->priv, client->peer->peerPub) != 0)
LAIKA_ERROR("failed to gen session key!\n");
@@ -291,9 +295,9 @@ int shellC_addPeer(tShell_client *client, tShell_peer *newPeer) {
/* let user know */
if (!shellC_isShellOpen(client)) {
shellT_printf("\nNew peer connected to CNC:\n");
shellP_printInfo(newPeer);
PRINTSUCC("Peer %04d connected\n", id)
}
return id;
}
@@ -304,9 +308,9 @@ void shellC_rmvPeer(tShell_client *client, tShell_peer *oldPeer, int id) {
/* remove peer from hashmap */
hashmap_delete(client->peers, &(tShell_hashMapElem){.pub = oldPeer->pub, .peer = oldPeer});
/* tell user */
if (!shellC_isShellOpen(client)) {
shellT_printf("\nPeer disconnected from CNC:\n");
shellP_printInfo(oldPeer);
PRINTINFO("Peer %04d disconnected\n", id)
}
/* finally, free peer */

View File

@@ -35,6 +35,27 @@ void shellT_resetTerm(void) {
tcsetattr(STDIN_FILENO, TCSANOW, &orig_termios);
}
const char *shellT_getForeColor(TERM_COLOR col) {
switch (col) {
case TERM_BLACK: return "\033[30m"; break;
case TERM_RED: return "\033[31m"; break;
case TERM_GREEN: return "\033[32m"; break;
case TERM_YELLOW: return "\033[33m"; break;
case TERM_BLUE: return "\033[34m"; break;
case TERM_MAGENTA: return "\033[35m"; break;
case TERM_CYAN: return "\033[36m"; break;
case TERM_WHITE: return "\033[37m"; break;
case TERM_BRIGHT_BLACK: return "\033[90m"; break;
case TERM_BRIGHT_RED: return "\033[91m"; break;
case TERM_BRIGHT_GREEN: return "\033[92m"; break;
case TERM_BRIGHT_YELLOW: return "\033[93m"; break;
case TERM_BRIGHT_BLUE: return "\033[94m"; break;
case TERM_BRIGHT_MAGENTA: return "\033[95m"; break;
case TERM_BRIGHT_CYAN: return "\033[96m"; break;
case TERM_BRIGHT_WHITE: default: return "\033[97m"; break;
}
}
void shellT_printf(const char *format, ...) {
va_list args;