Random strings for cookie values (#1122)

This commit is contained in:
SpedNSFW 2021-02-23 13:40:43 +11:00 committed by GitHub
parent 14230d7b52
commit acbdee76de
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 60 additions and 6 deletions

View file

@ -160,6 +160,7 @@ type scraperDebugOptions struct {
type scraperCookies struct {
Name string `yaml:"Name"`
Value string `yaml:"Value"`
ValueRandom int `yaml:"ValueRandom"`
Domain string `yaml:"Domain"`
Path string `yaml:"Path"`
}

View file

@ -13,6 +13,7 @@ import (
"github.com/chromedp/chromedp"
"github.com/stashapp/stash/pkg/logger"
"github.com/stashapp/stash/pkg/utils"
)
// set cookies for the native http client
@ -32,7 +33,7 @@ func setCookies(jar *cookiejar.Jar, scraperConfig config) {
for _, cookie := range ckURL.Cookies {
httpCookie = &http.Cookie{
Name: cookie.Name,
Value: cookie.Value,
Value: getCookieValue(cookie),
Path: cookie.Path,
Domain: cookie.Domain,
}
@ -53,6 +54,13 @@ func setCookies(jar *cookiejar.Jar, scraperConfig config) {
}
}
func getCookieValue(cookie *scraperCookies) string {
if cookie.ValueRandom > 0 {
return utils.RandomSequence(cookie.ValueRandom)
}
return cookie.Value
}
// print all cookies from the jar of the native http client
func printCookies(jar *cookiejar.Jar, scraperConfig config, msg string) {
driverOptions := scraperConfig.DriverOptions
@ -92,7 +100,7 @@ func setCDPCookies(driverOptions scraperDriverOptions) chromedp.Tasks {
for _, ckURL := range driverOptions.Cookies {
for _, cookie := range ckURL.Cookies {
success, err := network.SetCookie(cookie.Name, cookie.Value).
success, err := network.SetCookie(cookie.Name, getCookieValue(cookie)).
WithExpires(&expr).
WithDomain(cookie.Domain).
WithPath(cookie.Path).

17
pkg/utils/strings.go Normal file
View file

@ -0,0 +1,17 @@
package utils
import (
"math/rand"
"time"
)
var characters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")
func RandomSequence(n int) string {
b := make([]rune, n)
rand.Seed(time.Now().UnixNano())
for i := range b {
b[i] = characters[rand.Intn(len(characters))]
}
return string(b)
}

View file

@ -1,2 +1,3 @@
### 🎨 Improvements
* Support random strings for scraper cookie values.
* Added Rescan button to scene, image, gallery details overflow button.

View file

@ -489,6 +489,33 @@ driver:
Domain: ".somewhere.com"
```
For some sites, the value of the cookie itself doesn't actually matter. In these cases, we can use the `ValueRandom`
property instead of `Value`. Unlike `Value`, `ValueRandom` requires an integer value greater than `0` where the value
indicates how long the cookie string should be.
In the following example, we will adapt the previous cookies to use `ValueRandom` instead. We set the `_test2` cookie
to randomly generate a value with a length of 6 characters and the `_warn` cookie to a length of 3.
```yaml
driver:
cookies:
- CookieURL: "https://www.example.com"
Cookies:
- Name: "_warning"
Domain: ".example.com"
Value: "true"
Path: "/"
- Name: "_test2"
ValueRandom: 6
Domain: ".example.com"
Path: "/"
- CookieURL: "https://api.somewhere.com"
Cookies:
- Name: "_warn"
ValueRandom: 3
Domain: ".somewhere.com"
```
When developing a scraper you can have a look at the cookies set by a site by adding
* a `CookieURL` if you use the direct xpath scraper