Require core.play to play videos in gocoder

This commit is contained in:
Zoe Roux 2025-11-02 18:37:07 +01:00
parent f1ddc7e7b9
commit 04171af3e3
No known key found for this signature in database

View File

@ -5,6 +5,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"net/http" "net/http"
"slices"
_ "github.com/zoriya/kyoo/transcoder/docs" _ "github.com/zoriya/kyoo/transcoder/docs"
@ -37,6 +38,35 @@ func ErrorHandler(err error, c echo.Context) {
}{Errors: []string{message}}) }{Errors: []string{message}})
} }
func RequireCorePlayPermission(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
user := c.Get("user")
if user == nil {
return echo.NewHTTPError(http.StatusForbidden, "missing jwt")
}
token, ok := user.(*jwt.Token)
if !ok {
return echo.NewHTTPError(http.StatusForbidden, "invalid jwt")
}
claims, ok := token.Claims.(jwt.MapClaims)
if !ok {
return echo.NewHTTPError(http.StatusForbidden, "invalid jwt claims")
}
permissions, ok := claims["permissions"]
if !ok {
return echo.NewHTTPError(http.StatusForbidden, "missing permissions claim")
}
perms, ok := permissions.([]any)
if !ok {
return echo.NewHTTPError(http.StatusForbidden, "permissions claim is not an array")
}
if !slices.Contains(perms, "core.play") {
return echo.NewHTTPError(http.StatusForbidden, "missing core.play permission")
}
return next(c)
}
}
// @title gocoder - Kyoo's transcoder // @title gocoder - Kyoo's transcoder
// @version 1.0 // @version 1.0
// @description Real time transcoder. // @description Real time transcoder.
@ -103,7 +133,7 @@ func main() {
return nil, fmt.Errorf("unable to find key %q", kid) return nil, fmt.Errorf("unable to find key %q", kid)
} }
var pubkey interface{} var pubkey any
if err := jwk.Export(key, &pubkey); err != nil { if err := jwk.Export(key, &pubkey); err != nil {
return nil, fmt.Errorf("Unable to get the public key. Error: %s", err.Error()) return nil, fmt.Errorf("Unable to get the public key. Error: %s", err.Error())
} }
@ -111,6 +141,8 @@ func main() {
return pubkey, nil return pubkey, nil
}, },
})) }))
g.Use(RequireCorePlayPermission)
} }
api.RegisterStreamHandlers(g, transcoder) api.RegisterStreamHandlers(g, transcoder)