2023-03-02 07:24:12 +01:00
|
|
|
package telal
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"log"
|
|
|
|
|
"net/http"
|
2023-03-04 11:45:53 +01:00
|
|
|
"path/filepath"
|
2023-03-02 07:24:12 +01:00
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/gorilla/websocket"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Message represents the format of messages sent to clients
|
|
|
|
|
type Message struct {
|
|
|
|
|
Type string `json:"type"`
|
|
|
|
|
URL string `json:"url"`
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-04 11:45:53 +01:00
|
|
|
func ServeBanners() {
|
2023-03-02 07:24:12 +01:00
|
|
|
// Create a new WebSocket upgrader
|
|
|
|
|
upgrader := websocket.Upgrader{}
|
2023-03-04 11:45:53 +01:00
|
|
|
upgrader.CheckOrigin = func(r *http.Request) bool { return true }
|
|
|
|
|
|
|
|
|
|
// Set up a file server to serve static files from the /web/static/ folder
|
|
|
|
|
fs := staticFileServer("./web/static")
|
|
|
|
|
http.Handle("/", fs)
|
2023-03-02 07:24:12 +01:00
|
|
|
|
|
|
|
|
// Create a handler function for WebSocket connections
|
|
|
|
|
handler := func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
// Upgrade the HTTP connection to a WebSocket connection
|
|
|
|
|
conn, err := upgrader.Upgrade(w, r, nil)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
defer conn.Close()
|
|
|
|
|
|
|
|
|
|
// Send a message containing an image URL every 5 seconds
|
|
|
|
|
for {
|
|
|
|
|
message := Message{
|
|
|
|
|
Type: "image",
|
2023-03-04 11:45:53 +01:00
|
|
|
URL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAYAAADo08FDAAAgAElEQVR4Xuzce6jfdR3H8c/ZXd2cLrd0OTUvJU5MQQuhBBMEzT8SSZAM/MPqj6RS6Y8gELoR/RGBQWX+UyFE4OUPiW5iN7tJhAvLkpaXpvM23XTM7bitc05kGXo8xw1pzx6/P89+57vzfrxe/734/SZ+s+yavcOLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA54gQkD8AGfoQMIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwI2AAVgQCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhEBAzAkSCdQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQOwDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAiYACOBOkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGIB1gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhEBA3AkSGcQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAAKwDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQiAgYgCNBOoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIGYB0gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBARMAAHAnSGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDAA6wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQiAgbgSJDOIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAFYBwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIBARMABHgnQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDMA6QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYiAATgSpDMIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgANYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIRAQMwJEgnUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEDsA4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgImAAjgTpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBiAdYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIRAQNwJEhnECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwACsAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEIgIGIAjQTqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBmAdIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQETAABwJ0hkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAwAOsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEIgIG4EiQziBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIABWAcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAQETAAR4J0BgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAzAOkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGIgAE4EqQzCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgYADWAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEQEDMCRIJ1BgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABA7AOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAICJgAI4E6QwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgYgHWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECEQEDcCRIZxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQMAArAMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCICBiAI0E6gwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgZgHSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBEwAAcCdIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQMADrAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCICBuBIkM4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAVgHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgEBEwAEeCdAYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQMwDpAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBiIABOBKkMwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIGAA1gECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhEBAzAkSCdQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQOwDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCAiYACOBOkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIGIB1gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhEBA3AkSGcQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDAAKwDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQiAgYgCNBOoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIGYB0gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBARMAAHAnSGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDAA6wABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQiAgbgSJDOIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgAFYBwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIBARMABHgnQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDMA6QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYiAATgSpDMIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBgANYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIRAQMwJEgnUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEDsA4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgImAAjgTpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBiAdYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIRAQNwJEhnECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAwACsAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEIgIGIAjQTqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBmAdIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQETAABwJ0hkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAwAOsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEIgIG4EiQziBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIABWAcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAQETAAR4J0BgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAzAOkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAI
|
2023-03-02 07:24:12 +01:00
|
|
|
}
|
|
|
|
|
jsonMessage, err := json.Marshal(message)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
err = conn.WriteMessage(websocket.TextMessage, jsonMessage)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
time.Sleep(5 * time.Second)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Set up an HTTP server with the WebSocket handler
|
2023-03-04 11:45:53 +01:00
|
|
|
http.HandleFunc("/ws", handler)
|
|
|
|
|
log.Fatal(http.ListenAndServe(":8081", nil))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// staticFileServer returns an http.Handler that serves static files from the given directory
|
|
|
|
|
func staticFileServer(dir string) http.Handler {
|
|
|
|
|
fs := http.FileServer(http.Dir(dir))
|
|
|
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
// Set the content type header to "text/html" for .html files
|
|
|
|
|
if filepath.Ext(r.URL.Path) == ".html" {
|
|
|
|
|
w.Header().Set("Content-Type", "text/html")
|
|
|
|
|
}
|
|
|
|
|
fs.ServeHTTP(w, r)
|
|
|
|
|
})
|
2023-03-02 07:24:12 +01:00
|
|
|
}
|