tangled
alpha
login
or
join now
stream.place
/
streamplace
Live video on the AT Protocol
74
fork
atom
overview
issues
1
pulls
pipelines
multistreaming: bit of validation
Eli Mallon
4 months ago
e2ea36c8
a630cc31
+20
-14
1 changed file
expand all
collapse all
unified
split
pkg
spxrpc
place_stream_multistream.go
+20
-14
pkg/spxrpc/place_stream_multistream.go
···
16
16
17
17
var allowedSchemes = []string{"rtmp", "rtmps"}
18
18
19
19
+
func validateMultistreamTargetURL(urlStr string) error {
20
20
+
u, err := url.Parse(urlStr)
21
21
+
if err != nil {
22
22
+
return fmt.Errorf("invalid multistream target URL: %w", err)
23
23
+
}
24
24
+
if !slices.Contains(allowedSchemes, u.Scheme) {
25
25
+
return fmt.Errorf("invalid multistream target scheme (must be rtmp or rtmps)")
26
26
+
}
27
27
+
if u.Scheme == "rtmps" && u.Port() == "" {
28
28
+
return fmt.Errorf("rtmps URLs must include a port")
29
29
+
}
30
30
+
return nil
31
31
+
}
32
32
+
19
33
func (s *Server) handlePlaceStreamMultistreamCreateTarget(ctx context.Context, body *placestreamtypes.MultistreamCreateTarget_Input) (*placestreamtypes.MultistreamDefs_TargetView, error) {
20
34
ctx, span := otel.Tracer("server").Start(ctx, "handleComAtprotoRepoUploadBlob")
21
35
defer span.End()
···
25
39
return nil, echo.NewHTTPError(http.StatusUnauthorized, "oauth session not found")
26
40
}
27
41
28
28
-
u, err := url.Parse(body.MultistreamTarget.Url)
42
42
+
err := validateMultistreamTargetURL(body.MultistreamTarget.Url)
29
43
if err != nil {
30
30
-
return nil, echo.NewHTTPError(http.StatusBadRequest, "invalid multistream target URL")
31
31
-
}
32
32
-
if !slices.Contains(allowedSchemes, u.Scheme) {
33
33
-
return nil, echo.NewHTTPError(http.StatusBadRequest, "invalid multistream target scheme (must be rtmp or rtmps)")
44
44
+
return nil, echo.NewHTTPError(http.StatusBadRequest, err.Error())
34
45
}
46
46
+
35
47
return s.statefulDB.CreateMultistreamTarget(body, session.DID)
36
48
}
37
49
···
86
98
return nil, echo.NewHTTPError(http.StatusUnauthorized, "oauth session not found")
87
99
}
88
100
89
89
-
// Validate the URL if provided
90
90
-
if body.MultistreamTarget != nil {
91
91
-
u, err := url.Parse(body.MultistreamTarget.Url)
92
92
-
if err != nil {
93
93
-
return nil, echo.NewHTTPError(http.StatusBadRequest, "invalid multistream target URL")
94
94
-
}
95
95
-
if !slices.Contains(allowedSchemes, u.Scheme) {
96
96
-
return nil, echo.NewHTTPError(http.StatusBadRequest, "invalid multistream target scheme (must be rtmp or rtmps)")
97
97
-
}
101
101
+
err := validateMultistreamTargetURL(body.MultistreamTarget.Url)
102
102
+
if err != nil {
103
103
+
return nil, echo.NewHTTPError(http.StatusBadRequest, err.Error())
98
104
}
99
105
100
106
// Build URI from rkey