mirror of
https://github.com/navidrome/navidrome.git
synced 2026-11-05 17:58:37 +01:00
refactor(plugins): streamline user access management in plugin services
Signed-off-by: Deluan <deluan@navidrome.org>
This commit is contained in:
parent
9f7b6870ac
commit
b0f91715b9
19 changed files with 369 additions and 174 deletions
16
plugins/testdata/test-http-endpoint-native/go.mod
vendored
Normal file
16
plugins/testdata/test-http-endpoint-native/go.mod
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
module test-http-endpoint-native
|
||||
|
||||
go 1.25
|
||||
|
||||
require github.com/navidrome/navidrome/plugins/pdk/go v0.0.0
|
||||
|
||||
require (
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/extism/go-pdk v1.1.3 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/stretchr/objx v0.5.2 // indirect
|
||||
github.com/stretchr/testify v1.11.1 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
replace github.com/navidrome/navidrome/plugins/pdk/go => ../../pdk/go
|
||||
14
plugins/testdata/test-http-endpoint-native/go.sum
vendored
Normal file
14
plugins/testdata/test-http-endpoint-native/go.sum
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/extism/go-pdk v1.1.3 h1:hfViMPWrqjN6u67cIYRALZTZLk/enSPpNKa+rZ9X2SQ=
|
||||
github.com/extism/go-pdk v1.1.3/go.mod h1:Gz+LIU/YCKnKXhgge8yo5Yu1F/lbv7KtKFkiCSzW/P4=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
|
||||
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
61
plugins/testdata/test-http-endpoint-native/main.go
vendored
Normal file
61
plugins/testdata/test-http-endpoint-native/main.go
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
// Test plugin for native auth (JWT) HTTP endpoint integration tests.
|
||||
// Build with: tinygo build -o ../test-http-endpoint-native.wasm -target wasip1 -buildmode=c-shared .
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/navidrome/navidrome/plugins/pdk/go/httpendpoint"
|
||||
)
|
||||
|
||||
func init() {
|
||||
httpendpoint.Register(&testNativeEndpoint{})
|
||||
}
|
||||
|
||||
type testNativeEndpoint struct{}
|
||||
|
||||
func (t *testNativeEndpoint) HandleRequest(req httpendpoint.HTTPHandleRequest) (httpendpoint.HTTPHandleResponse, error) {
|
||||
switch req.Path {
|
||||
case "/hello":
|
||||
return httpendpoint.HTTPHandleResponse{
|
||||
Status: 200,
|
||||
Headers: map[string][]string{
|
||||
"Content-Type": {"text/plain"},
|
||||
},
|
||||
Body: "Hello from native auth plugin!",
|
||||
}, nil
|
||||
|
||||
case "/echo":
|
||||
// Echo back the request as JSON
|
||||
data, _ := json.Marshal(map[string]any{
|
||||
"method": req.Method,
|
||||
"path": req.Path,
|
||||
"query": req.Query,
|
||||
"body": req.Body,
|
||||
"hasUser": req.User != nil,
|
||||
"username": userName(req.User),
|
||||
})
|
||||
return httpendpoint.HTTPHandleResponse{
|
||||
Status: 200,
|
||||
Headers: map[string][]string{
|
||||
"Content-Type": {"application/json"},
|
||||
},
|
||||
Body: string(data),
|
||||
}, nil
|
||||
|
||||
default:
|
||||
return httpendpoint.HTTPHandleResponse{
|
||||
Status: 404,
|
||||
Body: "Not found: " + req.Path,
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
func userName(u *httpendpoint.HTTPUser) string {
|
||||
if u == nil {
|
||||
return ""
|
||||
}
|
||||
return u.Username
|
||||
}
|
||||
|
||||
func main() {}
|
||||
16
plugins/testdata/test-http-endpoint-native/manifest.json
vendored
Normal file
16
plugins/testdata/test-http-endpoint-native/manifest.json
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"name": "Test HTTP Endpoint Native Plugin",
|
||||
"author": "Navidrome Test",
|
||||
"version": "1.0.0",
|
||||
"description": "Test plugin for native (JWT) HTTP endpoint integration testing",
|
||||
"permissions": {
|
||||
"endpoints": {
|
||||
"auth": "native",
|
||||
"paths": ["/hello", "/echo"],
|
||||
"reason": "Testing native auth HTTP endpoint handling"
|
||||
},
|
||||
"users": {
|
||||
"reason": "Authenticated endpoints require user access"
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue