Fail closed on missing playback ACK; log node /play hits for diagnosis.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
2aac72cd71
commit
974b3124d0
2 changed files with 9 additions and 7 deletions
|
|
@ -339,9 +339,9 @@ class NodeConnectionManager {
|
|||
|
||||
const acked = new Promise<boolean>((resolve) => {
|
||||
const timer = setTimeout(() => {
|
||||
// Optimistic: node has 1s grace on /play; prefer play over hard fail.
|
||||
// Fail closed: never hand Stremio a node URL without a confirmed session.
|
||||
this.pendingSessionAcks.delete(payload.sessionId);
|
||||
resolve(true);
|
||||
resolve(false);
|
||||
}, timeoutMs);
|
||||
this.pendingSessionAcks.set(payload.sessionId, { resolve, timer });
|
||||
});
|
||||
|
|
|
|||
|
|
@ -116,13 +116,15 @@ func (s *Server) handlePlay(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
clientIP := clientIP(r)
|
||||
if !s.acquireIP(clientIP) {
|
||||
log.Printf("GET /play/[REDACTED] rejected: too many connections from %s", clientIP)
|
||||
ip := clientIP(r)
|
||||
log.Printf("GET /play request from %s method=%s range=%q", ip, r.Method, r.Header.Get("Range"))
|
||||
|
||||
if !s.acquireIP(ip) {
|
||||
log.Printf("GET /play/[REDACTED] rejected: too many connections from %s", ip)
|
||||
http.Error(w, "Too Many Requests", http.StatusTooManyRequests)
|
||||
return
|
||||
}
|
||||
defer s.releaseIP(clientIP)
|
||||
defer s.releaseIP(ip)
|
||||
|
||||
tokenHash := hashToken(token)
|
||||
sess, err := s.store.GetSessionByTokenHash(tokenHash)
|
||||
|
|
@ -134,7 +136,7 @@ func (s *Server) handlePlay(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
}
|
||||
if err != nil {
|
||||
log.Printf("GET /play/[REDACTED] invalid session from %s", clientIP)
|
||||
log.Printf("GET /play/[REDACTED] invalid session from %s", ip)
|
||||
http.NotFound(w, r)
|
||||
return
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue