diff --git a/main.go b/main.go
index 9285a98..e75e5be 100644
--- a/main.go
+++ b/main.go
@@ -340,7 +340,7 @@ func main() {
// defer db.Close()
name := randomname.GenerateRandomName()
- fmt.Sprintf("Server instance: %s", name)
+ log.Println("Server instance: ", name)
webServer := &http.Server {
Addr: ":3333",
diff --git a/src/logger/logger.go b/src/logger/logger.go
index 2075f16..3988602 100644
--- a/src/logger/logger.go
+++ b/src/logger/logger.go
@@ -19,7 +19,6 @@ var (
logMutex sync.Mutex
logLimit = 100
- // LogEntries []string
)
const (
@@ -69,7 +68,7 @@ func InsertLog(level LogLevel, message string) error {
lite_dbMutex.Lock()
defer lite_dbMutex.Unlock()
- // Future use may fulfill multiple transactions, a transaction is used
+ // Future use may fulfill multiple transactions
tx, err := Lite_db.Begin()
if err != nil {
return fmt.Errorf("Error starting transaction: %w", err)
@@ -77,9 +76,7 @@ func InsertLog(level LogLevel, message string) error {
message = strings.ReplaceAll(message, `"`, `\"`)
- // insertQuery := `INSERT INTO logs (message) VALUES (?)`
insertQuery := `INSERT INTO logs (message, level) VALUES (?, ?)`
- // _, err := Lite_db.Exec(insertQuery, message, level)
_, err = tx.Exec(insertQuery, message, level)
if err != nil {
@@ -120,7 +117,6 @@ func FetchLogs(limit int, levels []string) ([]LogEntry, error) {
args = append(args, limit)
- // rows, err := Lite_db.Query(query, level, limit)
rows, err := Lite_db.Query(query, args...)
if err != nil {
return nil, fmt.Errorf("Error fetching logs: %w", err)
diff --git a/src/randomname/randomName.go b/src/randomname/randomName.go
index e843928..1f6b7d4 100644
--- a/src/randomname/randomName.go
+++ b/src/randomname/randomName.go
@@ -3,6 +3,7 @@ package randomname
import (
"math/rand"
)
+
func GenerateRandomName() string {
prefix := prefixes[rand.Intn(len(prefixes))]
suffix := suffixes[rand.Intn(len(suffixes))]
diff --git a/src/server/api/agentApi.go b/src/server/api/agentApi.go
index a2713d5..e13628d 100644
--- a/src/server/api/agentApi.go
+++ b/src/server/api/agentApi.go
@@ -6,7 +6,6 @@ import (
"encoding/json"
"strconv"
"log"
- // "gontrol/src/logger"
_ "github.com/go-sql-driver/mysql"
)
@@ -23,8 +22,6 @@ type Agent struct {
HostName string `json:"HostName"`
}
-// var db *sql.DB
-
func DeleteAgent(db *sql.DB, w http.ResponseWriter, r *http.Request, agentID string) ([]Agent, error) {
query := "DELETE FROM agents WHERE agentId = ?"
_, err := db.Exec(query, agentID)
@@ -170,6 +167,5 @@ func GetAgentIds(db *sql.DB, w http.ResponseWriter, r *http.Request) {
agentIds = append(agentIds, strconv.Itoa(id))
}
- // ocket.go.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(agentIds)
}
diff --git a/src/server/websocket/websocketServer.go b/src/server/websocket/websocketServer.go
index 97ce6ae..f1147f9 100644
--- a/src/server/websocket/websocketServer.go
+++ b/src/server/websocket/websocketServer.go
@@ -81,12 +81,11 @@ func registerAgent(agentName, agentId, agentIp, agentType, addPort, hostname str
return err
}
- // log.Printf("Agent %s successfully registered.", agentName)
}
func getAgentDetails(agentId string) (*api.Agent, error) {
agentURL := "http://localhost:3333/agents/" + agentId
- // var ids []string
+
resp, err := http.Get(agentURL)
if err != nil {
log.Printf("Failed to make GET request: %s", err)
@@ -130,9 +129,8 @@ func containsId(ids []string, agentId string) bool {
}
func getAgentIds() ([]string, error) {
-
idURL := "http://localhost:3333/agentIds"
- // var ids []string
+
resp, err := http.Get(idURL)
if err != nil {
log.Printf("Failed to make GET request: %s", err)
@@ -178,8 +176,6 @@ func (wsh webSocketHandler) ServeHTTP(w http.ResponseWriter, r *http.Request){
agentType := r.URL.Query().Get("agentType")
hostName := r.URL.Query().Get("hostname")
agentName := ""
- log.Println("addPort is the following")
- log.Println(r.URL.Query().Get("addPort"))
addPort := ""
if len(r.URL.Query().Get("addPort")) > 0 {
diff --git a/static/agents-graph.js b/static/agents-graph.js
index 4254b15..2b030b5 100644
--- a/static/agents-graph.js
+++ b/static/agents-graph.js
@@ -74,7 +74,8 @@ async function updateGraph(agentData) {
const status = agent.status;
if (id && name) {
- let nodeColor = (status === 'Connected') ? '#28a745' : '#dc3545'; // Green for connected, Red for disconnected
+ // let nodeColor = (status === 'Connected') ? '#28a745' : '#dc3545'; // Green for connected, Red for disconnected
+ let nodeBg = (status === 'Connected') ? 'url(static/computer-online.svg)' : 'url(static/computer-offline.svg)'; // Green for connected, Red for disconnected
cy.add({
group: 'nodes',
@@ -86,7 +87,11 @@ async function updateGraph(agentData) {
ip: agent.IPv4Address
},
style: {
- 'background-color': nodeColor,
+ // 'background-color': '#f8f9fa',
+ 'background-opacity': '0',
+ 'background-image': nodeBg,
+ 'background-fit': 'contain',
+ 'background-clip': 'none',
'label': name, // Display agent's name
'color': 'white',
'text-outline-width': 2,
@@ -115,7 +120,11 @@ async function updateGraph(agentData) {
ip: 'N/A'
},
style: {
- 'background-color': '#6c757d', // Gray for target node
+ // 'background-color': '#6c757d', // Gray for target node
+ 'background-opacity': '0',
+ 'background-image': 'url(static/server-online.svg)',
+ 'background-fit': 'contain',
+ 'background-clip': 'none',
'label': 'g2',
'color': 'white',
'text-outline-width': 2,
diff --git a/static/computer-offline.svg b/static/computer-offline.svg
new file mode 100755
index 0000000..c22db24
--- /dev/null
+++ b/static/computer-offline.svg
@@ -0,0 +1,17 @@
+
+
diff --git a/static/computer-online.svg b/static/computer-online.svg
new file mode 100755
index 0000000..419a306
--- /dev/null
+++ b/static/computer-online.svg
@@ -0,0 +1,17 @@
+
+
diff --git a/static/help-command.js b/static/help-command.js
index 4e36063..81a094d 100644
--- a/static/help-command.js
+++ b/static/help-command.js
@@ -1,13 +1,16 @@
const helpMsg = `
-This is a non interactive Webshell with an interactive mode, including some
-additional features to ease communications between server and client.
+This is a shell in the browser, a web shell.
+
+It includes a non-interactive shell with an optional interactive mode.
+Furthermore, additional commands to ease communications between server
+and client.
+
Available Commands:
upload Upload files to the server through the file selector of the browser.
download Download files from the server to your local download directory.
theme Change the colorscheme of the shell. Type theme to get an overview of all colorschemes.
start-interactive Opens a bash shell in an interactive terminal. Type ctrl+d to go back to non-interactive mode.
`
-// const helpMsg = 'This is a non interactive Webshell including some additional features to ease communications between server and client.\n Available Commands:\n upload\t\t\t\tUpload files to the server through the file selector of the browser.\n download \t\t\tDownload files from the server to your local download directory.\n theme \t\t\tChange the colorscheme of the shell. Type theme to get an overview of all colorschemes.\n start-interactive\t\t\tOpens a bash shell in an interactive terminal. Type ctrl+d to exi the interactive shell.'
document.addEventListener("DOMContentLoaded", function() {
const input = document.getElementById("command-input");
diff --git a/static/server-offline.svg b/static/server-offline.svg
new file mode 100755
index 0000000..37b5197
--- /dev/null
+++ b/static/server-offline.svg
@@ -0,0 +1,15 @@
+
+
diff --git a/static/server-online.svg b/static/server-online.svg
new file mode 100755
index 0000000..72fde86
--- /dev/null
+++ b/static/server-online.svg
@@ -0,0 +1,15 @@
+
+
diff --git a/static/start-interactive.js b/static/start-interactive.js
index b9ac4b0..d212418 100644
--- a/static/start-interactive.js
+++ b/static/start-interactive.js
@@ -27,8 +27,8 @@ function getQueryParam(name) {
function makeWsUrl() {
const proxyIp = getQueryParam("ip"); // "10.0.0.42" if you came via /proxyAgent
- const proxyPort = getQueryParam("port"); // "8080"
- const usingProxy = proxyIp && proxyPort; // truthy only in that case
+ const proxyPort = getQueryParam("port");
+ const usingProxy = proxyIp && proxyPort; // true only in that case
if (usingProxy) {
// Build ws(s):///proxyAgent/terminal?ip=…&port=…