Show T5 products in the client's shop; keep float IDs and unknown paths off IMVU
CI / build (push) Successful in 34s
CI / build (push) Successful in 34s
The shop's T5 filter (maturity_rating "t5") is answered from the hub's products, fetched so they can be
shown and tried on; buying T5 products adds them to the hub library, and product.php details for
community products are answered here.
The client sends some product IDs as floats ("2000000008.0"): product.php passed the worn community
product to IMVU that way. Every ID is now read either way, and products.Guard refuses any request to
IMVU that still names a local ID given out. T5DE_PROXY_DUMP logs request and response bodies.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
6506c641f0
commit
2280ad6314
14 files changed
+785
-18
No files matched your search
@@ -0,0 +1,33 @@
|
||||
package proxy
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Dump logs the request and response bodies of requests whose path contains Match (T5DE_PROXY_DUMP, for finding
|
||||
// out what IMVU's APIs send). It may log personal data: only for test accounts.
|
||||
type Dump struct {
|
||||
Match string
|
||||
Log *log.Logger
|
||||
}
|
||||
|
||||
func (d Dump) Intercept(x *Exchange) error {
|
||||
if d.Match == "" || !strings.Contains(x.URL.Path, d.Match) {
|
||||
return nil
|
||||
}
|
||||
d.Log.Printf("dump: %s %s\n%s", x.Request.Method, x.URL, x.Body)
|
||||
next := x.ModifyResponse
|
||||
x.ModifyResponse = func(resp *http.Response, body []byte) ([]byte, error) {
|
||||
if next != nil {
|
||||
var err error
|
||||
if body, err = next(resp, body); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
d.Log.Printf("dump: %s answered %d\n%s", x.URL.Path, resp.StatusCode, body)
|
||||
return body, nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in new issue
Block a user