feat: validate proxy targets during signing and proxy fetch
This commit is contained in:
@@ -8,8 +8,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"mal/internal/domain"
|
"mal/internal/domain"
|
||||||
|
"mal/internal/playback/proxytarget"
|
||||||
"mal/internal/server"
|
"mal/internal/server"
|
||||||
netutil "mal/pkg/net"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
@@ -27,8 +27,8 @@ func NewPlaybackHandler(svc domain.PlaybackService, animeSvc domain.AnimePlaybac
|
|||||||
return &PlaybackHandler{
|
return &PlaybackHandler{
|
||||||
svc: svc,
|
svc: svc,
|
||||||
animeSvc: animeSvc,
|
animeSvc: animeSvc,
|
||||||
proxyClient: netutil.NewClient(),
|
proxyClient: proxytarget.NewClient(60 * time.Second),
|
||||||
streamingClient: netutil.NewStreamingClient(),
|
streamingClient: proxytarget.NewStreamingClient(),
|
||||||
subtitleCache: newSubtitleCache(10*time.Minute, 256),
|
subtitleCache: newSubtitleCache(10*time.Minute, 256),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"mal/internal/observability"
|
"mal/internal/observability"
|
||||||
|
"mal/internal/playback/proxytarget"
|
||||||
netutil "mal/pkg/net"
|
netutil "mal/pkg/net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
@@ -11,6 +12,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func newProxyRequest(ctx context.Context, targetURL string, referer string) (*http.Request, error) {
|
func newProxyRequest(ctx context.Context, targetURL string, referer string) (*http.Request, error) {
|
||||||
|
if err := proxytarget.Validate(targetURL); err != nil {
|
||||||
|
return nil, fmt.Errorf("validate proxy target %q: %w", targetURL, err)
|
||||||
|
}
|
||||||
|
|
||||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, targetURL, nil)
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, targetURL, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("build proxy request for %q: %w", targetURL, err)
|
return nil, fmt.Errorf("build proxy request for %q: %w", targetURL, err)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"mal/integrations/jikan"
|
"mal/integrations/jikan"
|
||||||
"mal/internal/domain"
|
"mal/internal/domain"
|
||||||
"mal/internal/observability"
|
"mal/internal/observability"
|
||||||
|
"mal/internal/playback/proxytarget"
|
||||||
errlog "mal/pkg"
|
errlog "mal/pkg"
|
||||||
netutil "mal/pkg/net"
|
netutil "mal/pkg/net"
|
||||||
"net/http"
|
"net/http"
|
||||||
@@ -43,6 +44,9 @@ func (s *playbackService) SignProxyToken(targetURL, referer, scope string) (stri
|
|||||||
if s.proxyTokenKey == "" {
|
if s.proxyTokenKey == "" {
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
if err := proxytarget.Validate(targetURL); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
return s.proxyTokens.create(targetURL, referer, scope, 2*time.Hour, time.Now())
|
return s.proxyTokens.create(targetURL, referer, scope, 2*time.Hour, time.Now())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user