commit b262e2d8edfa8415d9233fc84c41e5a05ac98524 Author: Vicente Ferrari Smith Date: Fri Sep 12 16:23:47 2025 +0200 initial commit diff --git a/cmd/server/cert.pem b/cmd/server/cert.pem new file mode 100644 index 0000000..5b4a15b --- /dev/null +++ b/cmd/server/cert.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgIUFLBXeBoRiWo+BlKfVFxGAOU9uwgwDQYJKoZIhvcNAQEL +BQAwPzELMAkGA1UEBhMCQVQxDTALBgNVBAgMBFdpZW4xDTALBgNVBAcMBFdpZW4x +EjAQBgNVBAoMCURpZSBQYXJ0eTAeFw0yNTA5MTExNzUyNTZaFw0yNjA5MTExNzUy +NTZaMD8xCzAJBgNVBAYTAkFUMQ0wCwYDVQQIDARXaWVuMQ0wCwYDVQQHDARXaWVu +MRIwEAYDVQQKDAlEaWUgUGFydHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDpNdBYKyc2z9hadellByc/CIPoDtHRVvjt94AMJFQ52Fu/yaN9/FX25egV +S9st9TbIJkJ2rMX8gaposF1Z1fN0uEujwuRv/l3MnvKEtYcVJtcc96/KdV/JD0kX +lTTr8WX6C5uJ8J9gZx4epc3SUVUevKvyjGjtO/1pGsS/JKpE1fgpa8V5TYaitL8t +EIMp7DOH2ebc8YXFb/nyr4mlsRTbheD/BJgAqWKi3kKJuml9etzWFlwoMli/nONJ +pj/KGCJLXABczwHehBIu4rBl56R9qtnRtPN9i9AEotRQHla5125mRyCCd2PRRITu +RiSdB0y8kImhROlzpacDSBPh0sJhAgMBAAGjUzBRMB0GA1UdDgQWBBQJP+zNoNNG +RQh0cgt42u0qGuMRkTAfBgNVHSMEGDAWgBQJP+zNoNNGRQh0cgt42u0qGuMRkTAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAINSMWHokDTqoQodHY +IJH0p0NxEqoQMhrt44medHWPYMlk4k3mWn5JD/9e29hsmovaobLPmW4+Qh90+vMu +/+yu1YBkjsNhyZ7INyPjT2UhC6JWxJTSBFtkfL8/sg61gjDSo2ERzlC/MkQ3wozr +bLsIf9Kj8FWMotfp71Anrrf6K83BQv6Xz5Vl/pCge0bUFkwAnoupEuiAGhLcflUH +0p/KX72qq1fdZjd6HRm2RodtJGT8wve3HWCzJcNA45DFbuF3RCH5o3Ntc+nLX8oF +OhYq/a8agiEWzaKwqZZ7LNyDQk65HcQDAi0qG31IdBBd6OM6DEvlh0DZIDzL7igj +g2C/ +-----END CERTIFICATE----- diff --git a/cmd/server/key.pem b/cmd/server/key.pem new file mode 100644 index 0000000..00cb163 --- /dev/null +++ b/cmd/server/key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDpNdBYKyc2z9ha +dellByc/CIPoDtHRVvjt94AMJFQ52Fu/yaN9/FX25egVS9st9TbIJkJ2rMX8gapo +sF1Z1fN0uEujwuRv/l3MnvKEtYcVJtcc96/KdV/JD0kXlTTr8WX6C5uJ8J9gZx4e +pc3SUVUevKvyjGjtO/1pGsS/JKpE1fgpa8V5TYaitL8tEIMp7DOH2ebc8YXFb/ny +r4mlsRTbheD/BJgAqWKi3kKJuml9etzWFlwoMli/nONJpj/KGCJLXABczwHehBIu +4rBl56R9qtnRtPN9i9AEotRQHla5125mRyCCd2PRRITuRiSdB0y8kImhROlzpacD +SBPh0sJhAgMBAAECggEARvLKOaiXO4OsDIlGwieU9wY+KwEnMArHnI3pdMgwn5CF +CSntBU0ZUg3Lt37mZWruiaGqIrSZXyKLl2HgZI5EjMPsrxuBp9i47KGGon0fZX31 +f6iS4IMo6uAtmnEYMpe0MIgLf8GmmwuEDErg/RUlUj6QCTBSU6omhC1SodwjuODS +7iCl11XcamqmVUY/VIByQH38rGzPuvNVHjc9w0nyop4TSLaoxAH/yyrg2oFfc/Ra +h3bgsrYoasDjI1+BzreDiyoCJBwTlpG11DTmlO2bYYUgt3lgwQz12McdNJK+1s+R +60M0BkD4TiglvHSHaUenDtXT93D8JlzOrrwYSNe0qQKBgQD7RPy3EO4KXij7QSAs +8aM5kJQjV0JKzmLH2+/WeIjFGiJLVqWbMLF2NSaKPjh5ktXT1YmkJgbfgLw7M4q3 +a/TWdAxPpjT4GhZh8AdqEKAlpLxaweu2umKsgmPwk12/nsB/vmEZG96vhHviC5PI ++KHKqTvGtdBsTMWhA0z0zf9GQwKBgQDtmcnirPD9QLtQd5O6dqNVUmgH8/wqGLrD +Y88H6Yv5nmd9Oex9JoZLOQO0oXRNRUU+eCxDm6volKgI0W6XT3U1+qBicLmGdYy6 +4MHQ7Zu4e8+TNmGeAWlnOrCf8nmEQz9KjW8kOGLY09pHj6U8xxoICi2DPmNQgN6s +t8KJQCY0iwKBgFI4Z81rj8j6uMRGskWiqDuc8KyD0CB0WmR1toxikraUb6Zhav1W +OKuqhrrz0z0M7EVN+aUqAFPAZ1ej7P9KJyrJfIHPrEOHHc3cYkC1wgGvXyb/j6cS +ZFl4rUU6o5GhW/IxFMrHkN20J2l3SluX6DFNoU7LjbDyijS+xL7SbXbLAoGBAJJ1 +AoGsEpw44311R+VfLczxD9kfJueX+L9p7Xq2FicW4jnJk6GNNqh1i3gzMWpT8ZvR +HY/LDEtAHtfYqK+yNdDBHU2wqFteaBHlavLrE9rCzq+yjLeFrUAJaEgfgZHqlb/R +sJmF/EAlTl5gB/2PyNb91xIYScWcuiWC2/IYTbSDAoGAZfDgx5CZZirYjzyTxDGM ++Ex06mqgDO+fWDm/Uyug4Ja3gk10Iu88F8MB6btm2yIras88RwnMPicBSq++yE0R +/ilOe5KSFyfQ3uu63gUgTKwCgb4LrdC6hMsD4ILnH44VH2zQ9yyLjrOq/8nsEq7v +E9VeQGnFHeM6Rpl1KUHTnnY= +-----END PRIVATE KEY----- diff --git a/cmd/server/main.go b/cmd/server/main.go new file mode 100644 index 0000000..60289a8 --- /dev/null +++ b/cmd/server/main.go @@ -0,0 +1,104 @@ +package main + +import ( + //"encoding/json" + "html/template" + "net/http" + "fmt" + "time" + + "github.com/gorilla/websocket" +) + +type Message struct { + Type string `json:"type"` + Timestamp string `json:"timestamp"` + Random float64 `json:"random"` +} + +var page_template = template.Must(template.ParseFiles("../../ui/index.html")) + +var upgrader = websocket.Upgrader{ + CheckOrigin: func(r *http.Request) bool { return true }, // allow all origins +} + +func handler(w http.ResponseWriter, r *http.Request) { + data := struct { + Name string + }{ + Name: "Visitor", + } + page_template.Execute(w, data) +} + +func ws_handler(w http.ResponseWriter, r *http.Request) { + conn, err := upgrader.Upgrade(w, r, nil) + if err != nil { + fmt.Println("Upgrade error:", err) + return + } + defer conn.Close() + + done := make(chan struct{}) + + go func() { + ticker := time.NewTicker(1 * time.Second); + + for { + select { + case <-done: + return + case t := <-ticker.C: + msg := map[string]interface{}{ + "type": "server_tick", + "timestamp": t.Format(time.RFC3339), + } + + + if err := conn.WriteJSON(msg); err != nil { + fmt.Println("Write error:", err) + return + } + } + } + }() + + for { + var msg Message + err := conn.ReadJSON(&msg) + if err != nil { + fmt.Println("Read error:", err) + break + } + fmt.Println(msg) + + // Send a response + // response := fmt.Sprintf("Server time: %s", time.Now()) + // if err := conn.WriteMessage(websocket.TextMessage, []byte(response)); err != nil { + // fmt.Println("Write error:", err) + // break + // } + } +} + +func redirect_to_HTTPS(w http.ResponseWriter, r *http.Request) { + http.Redirect(w, r, "https://localhost:8443" + r.URL.RequestURI(), http.StatusMovedPermanently) +} + +func main() { + http.HandleFunc("/", handler) + http.HandleFunc("/ws", ws_handler) + + go func() { + err := http.ListenAndServe(":8080", http.HandlerFunc(redirect_to_HTTPS)) + if err != nil { + panic(err) + } + }() + + // Start HTTPS server (requires cert.pem and key.pem in current dir) + err := http.ListenAndServeTLS(":8443", "cert.pem", "key.pem", nil) + if err != nil { + panic(err) + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..8431f71 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module party.at/party + +go 1.25.1 + +require github.com/gorilla/websocket v1.5.3 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..9e1b2ae --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= diff --git a/ui/index.html b/ui/index.html new file mode 100644 index 0000000..f211d2f --- /dev/null +++ b/ui/index.html @@ -0,0 +1,30 @@ + + + + + Ping Demo + + + +

Hello, {{.Name}}!

+

This page sends a ping to the server every second.

+ +