tmpchat

commit 57cd687b81d1640c584c2673280ec456a5463380

tree

parent:
3229c8c3f64a8cbe5ffe91155a54975cbca81201

nmyk <nick@nmyk.io>

2022-12-11T11:48:41-05:00

push getenv responsibility to main package

diff --git a/cmd/signaling/main.go b/cmd/signaling/main.go
index c84880464a2a8ab6a8f6b4fd873e23a75915e8a3..4b47a4b5c616276685aa2ce07fa8ee33464a760b 100644
--- a/cmd/signaling/main.go
+++ b/cmd/signaling/main.go
@@ -16,7 +16,8 @@ 	Channels: make(map[string]*tmpchat.Channel),
 }
 
 type signalingHandler struct {
-	frontendURL string
+	frontendURL    string
+	turnAuthSecret string
 }
 
 func (h signalingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
@@ -46,7 +47,7 @@ 	if err != nil {
 		log.Print("upgrade: ", err)
 		return
 	}
-	chat.Materialize(channelName).Members.Set(userID, conn)
+	chat.Materialize(channelName, h.turnAuthSecret).Members.Set(userID, conn)
 	defer chat.Collect(channelName, userID)
 	for {
 		_, rawSignal, err := conn.ReadMessage()
@@ -65,9 +66,13 @@ 	}
 }
 
 func main() {
-	var frontendURL string
+	var (
+		frontendURL    string
+		turnAuthSecret string
+	)
 	envflag.StringVar(&frontendURL, "TMPCHAT_URL", "http://frontend:8080", "")
+	envflag.StringVar(&turnAuthSecret, "TURN_AUTH_SECRET", "", "")
 	envflag.Parse()
-	http.Handle("/", signalingHandler{frontendURL})
+	http.Handle("/", signalingHandler{frontendURL, turnAuthSecret})
 	log.Fatal(http.ListenAndServe(":5050", nil))
 }
diff --git a/tmpchat.go b/tmpchat.go
index a76ff638ff91fbba8e0aa09a97dce36820ffba6a..2baf5590c43041b8caab7ce060f8bb73d752fd82 100644
--- a/tmpchat.go
+++ b/tmpchat.go
@@ -7,7 +7,6 @@ 	"encoding/base64"
 	"encoding/json"
 	"fmt"
 	"log"
-	"os"
 	"sync"
 	"time"
 
@@ -39,8 +38,9 @@ 	ch.Unlock()
 }
 
 type Channel struct {
-	Members  *Members
-	Messages chan Message
+	Members        *Members
+	Messages       chan Message
+	turnAuthSecret string
 }
 
 type Members struct {
@@ -88,10 +88,11 @@ 		}
 	}
 }
 
-func (ch *Chat) Materialize(channelName string) *Channel {
+func (ch *Chat) Materialize(channelName, turnAuthSecret string) *Channel {
 	c := &Channel{
-		Members:  &Members{m: make(map[string]*websocket.Conn)},
-		Messages: make(chan Message),
+		Members:        &Members{m: make(map[string]*websocket.Conn)},
+		Messages:       make(chan Message),
+		turnAuthSecret: turnAuthSecret,
 	}
 	if existing, ok := ch.Get(channelName); !ok {
 		go c.Run()
@@ -113,10 +114,10 @@ 		}
 	}
 }
 
-func GetTURNCreds(userID string) TURNCreds {
+func (c *Channel) getTURNCreds(userID string) TURNCreds {
 	expiresAt := time.Now().Add(24 * time.Hour).Unix()
 	turnUserName := fmt.Sprintf("%d:%s", expiresAt, userID)
-	h := hmac.New(sha1.New, []byte(os.Getenv("TURN_AUTH_SECRET")))
+	h := hmac.New(sha1.New, []byte(c.turnAuthSecret))
 	h.Write([]byte(turnUserName))
 	password := base64.StdEncoding.EncodeToString(h.Sum(nil))
 	return TURNCreds{turnUserName, password}
@@ -134,7 +135,7 @@ 		case TURNCredRequest:
 			if member, ok := c.Members.Get(msg.From); ok {
 				Message{
 					Type:    TURNCredResponse,
-					Content: GetTURNCreds(msg.From),
+					Content: c.getTURNCreds(msg.From),
 				}.SendTo(member)
 			}
 			c.Broadcast(