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(