Complete artifact binary transfer streaming

This commit is contained in:
npc0-hue
2026-09-03 13:27:22 +08:00
parent fe09d21a56
commit ec2462a312
8 changed files with 178 additions and 35 deletions
+23 -6
View File
@@ -14,10 +14,11 @@ import (
)
const (
runEndpointHeader = "X-Run-Endpoint"
runTimestampHeader = "X-Run-Timestamp"
runNonceHeader = "X-Run-Nonce"
runSignatureHeader = "X-Run-Signature"
runEndpointHeader = "X-Run-Endpoint"
runSessionTokenHeader = "X-Run-Session-Token"
runTimestampHeader = "X-Run-Timestamp"
runNonceHeader = "X-Run-Nonce"
runSignatureHeader = "X-Run-Signature"
)
type runRequestEnvelope struct {
@@ -37,8 +38,8 @@ func (h *coreHandlers) requireRunSignature(next http.HandlerFunc) http.HandlerFu
return
}
r.Body = io.NopCloser(bytes.NewReader(body))
var envelope runRequestEnvelope
if err := json.Unmarshal(body, &envelope); err != nil {
envelope, ok := signedRunRequestEnvelope(r, body)
if !ok {
next(w, r)
return
}
@@ -65,3 +66,19 @@ func (h *coreHandlers) requireRunSignature(next http.HandlerFunc) http.HandlerFu
next(w, r)
}
}
func signedRunRequestEnvelope(r *http.Request, body []byte) (runRequestEnvelope, bool) {
if isOctetStream(r.Header.Get("Content-Type")) {
return runRequestEnvelope{RunEndpointID: strings.TrimSpace(r.Header.Get(runEndpointHeader)), SessionToken: strings.TrimSpace(r.Header.Get(runSessionTokenHeader))}, true
}
var envelope runRequestEnvelope
if err := json.Unmarshal(body, &envelope); err != nil {
return runRequestEnvelope{}, false
}
return envelope, true
}
func isOctetStream(contentType string) bool {
mediaType := strings.ToLower(strings.TrimSpace(strings.Split(contentType, ";")[0]))
return mediaType == "application/octet-stream"
}