Reworked logging system to work with new GUI.
This commit is contained in:
@@ -186,7 +186,7 @@ proc handleAgentCommand*(component: ConsoleComponent, connection: WsConnection,
|
|||||||
command = getCommandByName(parsedArgs[0])
|
command = getCommandByName(parsedArgs[0])
|
||||||
task = createTask(component.agent.agentId, component.agent.listenerId, command, parsedArgs[1..^1])
|
task = createTask(component.agent.agentId, component.agent.listenerId, command, parsedArgs[1..^1])
|
||||||
|
|
||||||
connection.sendAgentTask(component.agent.agentId, task)
|
connection.sendAgentTask(component.agent.agentId, input, task)
|
||||||
component.addItem(LOG_INFO, fmt"Tasked agent to {command.description.toLowerAscii()} ({Uuid.toString(task.taskId)})")
|
component.addItem(LOG_INFO, fmt"Tasked agent to {command.description.toLowerAscii()} ({Uuid.toString(task.taskId)})")
|
||||||
|
|
||||||
except CatchableError:
|
except CatchableError:
|
||||||
|
|||||||
@@ -48,12 +48,13 @@ proc sendAgentBuild*(connection: WsConnection, buildInformation: AgentBuildInfor
|
|||||||
)
|
)
|
||||||
connection.ws.sendEvent(event, connection.sessionKey)
|
connection.ws.sendEvent(event, connection.sessionKey)
|
||||||
|
|
||||||
proc sendAgentTask*(connection: WsConnection, agentId: string, task: Task) =
|
proc sendAgentTask*(connection: WsConnection, agentId: string, command: string, task: Task) =
|
||||||
let event = Event(
|
let event = Event(
|
||||||
eventType: CLIENT_AGENT_TASK,
|
eventType: CLIENT_AGENT_TASK,
|
||||||
timestamp: now().toTime().toUnix(),
|
timestamp: now().toTime().toUnix(),
|
||||||
data: %*{
|
data: %*{
|
||||||
"agentId": agentId,
|
"agentId": agentId,
|
||||||
|
"command": command,
|
||||||
"task": task
|
"task": task
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ proc makeAgentLogDirectory*(cq: Conquest, agentId: string): bool =
|
|||||||
except OSError:
|
except OSError:
|
||||||
return false
|
return false
|
||||||
|
|
||||||
proc log*(cq: Conquest, agentId: string = "", logEntry: string) =
|
proc log*(logEntry: string, agentId: string = "") =
|
||||||
# Write log entry to file
|
# Write log entry to file
|
||||||
var logFile: string
|
var logFile: string
|
||||||
if agentId.isEmptyOrWhitespace():
|
if agentId.isEmptyOrWhitespace():
|
||||||
logFile = fmt"{CONQUEST_ROOT}/data/logs/events.log"
|
logFile = fmt"{CONQUEST_ROOT}/data/logs/teamserver.log"
|
||||||
else:
|
else:
|
||||||
logFile = fmt"{CONQUEST_ROOT}/data/logs/{agentId}/session.log"
|
logFile = fmt"{CONQUEST_ROOT}/data/logs/{agentId}/session.log"
|
||||||
let file = open(logFile, fmAppend)
|
let file = open(logFile, fmAppend)
|
||||||
@@ -39,7 +39,6 @@ proc getTimestamp*(): string =
|
|||||||
# Function templates and overwrites
|
# Function templates and overwrites
|
||||||
template writeLine*(cq: Conquest, args: varargs[untyped] = "") =
|
template writeLine*(cq: Conquest, args: varargs[untyped] = "") =
|
||||||
stdout.styledWriteLine(args)
|
stdout.styledWriteLine(args)
|
||||||
# cq.log(extractStrings($(args)))
|
|
||||||
|
|
||||||
# Wrapper functions for logging/console output
|
# Wrapper functions for logging/console output
|
||||||
template info*(cq: Conquest, args: varargs[untyped] = "") =
|
template info*(cq: Conquest, args: varargs[untyped] = "") =
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import terminal, parsetoml, json, math, base64, times
|
import terminal, parsetoml, json, math, base64, times
|
||||||
import strutils, strformat, system, tables
|
import strutils, strformat, system, tables
|
||||||
|
|
||||||
import ./core/[listener, builder]
|
import ./core/[listener, logger, builder]
|
||||||
import ./globals
|
import ./globals
|
||||||
import ./db/database
|
import ./db/database
|
||||||
import ./core/logger
|
|
||||||
import ../common/[types, crypto, utils, profile, event]
|
import ../common/[types, crypto, utils, profile, event]
|
||||||
import ./websocket
|
import ./websocket
|
||||||
import mummy, mummy/routers
|
import mummy, mummy/routers
|
||||||
@@ -66,13 +65,17 @@ proc websocketHandler(ws: WebSocket, event: WebSocketEvent, message: Message) {.
|
|||||||
cq.client.sendListener(listener)
|
cq.client.sendListener(listener)
|
||||||
for id, agent in cq.agents:
|
for id, agent in cq.agents:
|
||||||
cq.client.sendAgent(agent)
|
cq.client.sendAgent(agent)
|
||||||
cq.client.sendEventlogItem(LOG_SUCCESS_SHORT, "CQ-V1")
|
cq.client.sendEventlogItem(LOG_SUCCESS_SHORT, "Connected to Conquest team server.")
|
||||||
|
|
||||||
of CLIENT_AGENT_TASK:
|
of CLIENT_AGENT_TASK:
|
||||||
let agentId = event.data["agentId"].getStr()
|
let agentId = event.data["agentId"].getStr()
|
||||||
|
let command = event.data["command"].getStr()
|
||||||
let task = event.data["task"].to(Task)
|
let task = event.data["task"].to(Task)
|
||||||
cq.agents[agentId].tasks.add(task)
|
cq.agents[agentId].tasks.add(task)
|
||||||
|
|
||||||
|
let timestamp = event.timestamp.fromUnix().local().format("dd-MM-yyyy HH:mm:ss")
|
||||||
|
log(fmt"[{timestamp}]{$LOG_COMMAND}{command}", agentId)
|
||||||
|
|
||||||
of CLIENT_LISTENER_START:
|
of CLIENT_LISTENER_START:
|
||||||
let listener = event.data.to(UIListener)
|
let listener = event.data.to(UIListener)
|
||||||
cq.listenerStart(listener.listenerId, listener.address, listener.port, listener.protocol)
|
cq.listenerStart(listener.listenerId, listener.address, listener.port, listener.protocol)
|
||||||
@@ -133,10 +136,6 @@ proc startServer*(profilePath: string) =
|
|||||||
|
|
||||||
cq.info("Using profile \"", profile.getString("name"), "\" (", profilePath ,").")
|
cq.info("Using profile \"", profile.getString("name"), "\" (", profilePath ,").")
|
||||||
|
|
||||||
except CatchableError as err:
|
|
||||||
echo err.msg
|
|
||||||
quit(0)
|
|
||||||
|
|
||||||
# Initialize database
|
# Initialize database
|
||||||
cq.dbInit()
|
cq.dbInit()
|
||||||
for agent in cq.dbGetAllAgents():
|
for agent in cq.dbGetAllAgents():
|
||||||
@@ -156,6 +155,11 @@ proc startServer*(profilePath: string) =
|
|||||||
let server = newServer(router, websocketHandler, maxBodyLen = 1024 * 1024 * 1024, maxMessageLen = 1024 * 1024 * 1024)
|
let server = newServer(router, websocketHandler, maxBodyLen = 1024 * 1024 * 1024, maxMessageLen = 1024 * 1024 * 1024)
|
||||||
server.serve(Port(cq.profile.getInt("team-server.port")), "0.0.0.0")
|
server.serve(Port(cq.profile.getInt("team-server.port")), "0.0.0.0")
|
||||||
|
|
||||||
|
except CatchableError as err:
|
||||||
|
echo err.msg
|
||||||
|
quit(0)
|
||||||
|
|
||||||
|
|
||||||
# Conquest framework entry point
|
# Conquest framework entry point
|
||||||
when isMainModule:
|
when isMainModule:
|
||||||
import cligen; dispatch startServer
|
import cligen; dispatch startServer
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import times, json, base64, parsetoml
|
import times, json, base64, parsetoml, strformat
|
||||||
import ../common/[types, utils, event]
|
import ../common/[types, utils, event]
|
||||||
|
import ./core/logger
|
||||||
export sendHeartbeat, recvEvent
|
export sendHeartbeat, recvEvent
|
||||||
|
|
||||||
proc `%`*(agent: Agent): JsonNode =
|
proc `%`*(agent: Agent): JsonNode =
|
||||||
@@ -61,6 +62,11 @@ proc sendEventlogItem*(client: WsConnection, logType: LogType, message: string)
|
|||||||
"message": message
|
"message": message
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Log event
|
||||||
|
let timestamp = event.timestamp.fromUnix().local().format("dd-MM-yyyy HH:mm:ss")
|
||||||
|
log(fmt"[{timestamp}]{$logType}{message}")
|
||||||
|
|
||||||
if client != nil:
|
if client != nil:
|
||||||
client.ws.sendEvent(event, client.sessionKey)
|
client.ws.sendEvent(event, client.sessionKey)
|
||||||
|
|
||||||
@@ -101,6 +107,7 @@ proc sendAgentPayload*(client: WsConnection, bytes: seq[byte]) =
|
|||||||
"payload": encode(bytes)
|
"payload": encode(bytes)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
if client != nil:
|
if client != nil:
|
||||||
client.ws.sendEvent(event, client.sessionKey)
|
client.ws.sendEvent(event, client.sessionKey)
|
||||||
|
|
||||||
@@ -114,6 +121,14 @@ proc sendConsoleItem*(client: WsConnection, agentId: string, logType: LogType, m
|
|||||||
"message": message
|
"message": message
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Log agent console item
|
||||||
|
let timestamp = event.timestamp.fromUnix().local().format("dd-MM-yyyy HH:mm:ss")
|
||||||
|
if logType != LOG_OUTPUT:
|
||||||
|
log(fmt"[{timestamp}]{$logType}{message}", agentId)
|
||||||
|
else:
|
||||||
|
log(message, agentId)
|
||||||
|
|
||||||
if client != nil:
|
if client != nil:
|
||||||
client.ws.sendEvent(event, client.sessionKey)
|
client.ws.sendEvent(event, client.sessionKey)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user