Upload files to "/"
This commit is contained in:
parent
5e523bff39
commit
de83745ae3
118
rezemu.go
Normal file
118
rezemu.go
Normal file
@ -0,0 +1,118 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"crypto/sha1"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"time"
|
||||
)
|
||||
|
||||
// PopulateKnessetCookies fetches the seed from the given URL, performs the required requests,
|
||||
// and populates the provided http.Client's CookieJar with the necessary cookies.
|
||||
// Returns the waap_id value if successful, or an error.
|
||||
func PopulateKnessetCookies(client *http.Client, url string) (string, error) {
|
||||
resp, err := client.Get(url)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("error fetching URL: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("error reading response body: %w", err)
|
||||
}
|
||||
|
||||
re := `seed":"([^"]+)"` // Extract seed from HTML
|
||||
matches := regexp.MustCompile(re).FindStringSubmatch(string(body))
|
||||
if len(matches) < 2 {
|
||||
return "", fmt.Errorf("seed value not found")
|
||||
}
|
||||
seed := matches[1]
|
||||
final := SeedToFinalValue(seed)
|
||||
|
||||
// Prepare cookie request
|
||||
random32 := generateRandomString(32)
|
||||
cookiePath := "/7060ac19f50208cbb6b45328ef94140a612ee92387e015594234077b4d1e64f1/" + random32
|
||||
zebraKey := "x-zebra-" + generateRandomString(8)
|
||||
req, err := http.NewRequest("GET", "https://main.knesset.gov.il"+cookiePath, nil)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("error creating cookie request: %w", err)
|
||||
}
|
||||
req.Header.Set(zebraKey, final)
|
||||
resp2, err := client.Do(req)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("error sending cookie request: %w", err)
|
||||
}
|
||||
defer resp2.Body.Close()
|
||||
|
||||
var waapID string
|
||||
for k, v := range resp2.Header {
|
||||
if k == "Set-Cookie" {
|
||||
for _, cookieStr := range v {
|
||||
re := regexp.MustCompile(`waap_id=([^;]+)`)
|
||||
match := re.FindStringSubmatch(cookieStr)
|
||||
if len(match) > 1 {
|
||||
waapID = match[1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Optionally, fetch the original page again to ensure cookies are set
|
||||
/*
|
||||
req2, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
return waapID, fmt.Errorf("error creating second request: %w", err)
|
||||
}
|
||||
if waapID != "" {
|
||||
req2.Header.Set("Cookie", "waap_id="+waapID)
|
||||
}
|
||||
_, err = client.Do(req2)
|
||||
if err != nil {
|
||||
return waapID, fmt.Errorf("error fetching page with cookie: %w", err)
|
||||
}
|
||||
*/
|
||||
return waapID, nil
|
||||
}
|
||||
|
||||
func SeedToFinalValue(seed string) string {
|
||||
seedWithZero := seed + "0"
|
||||
sha1sum := sha1.Sum([]byte(seedWithZero))
|
||||
sha1hex := fmt.Sprintf("%x", sha1sum)
|
||||
concatData := []string{
|
||||
sha1hex,
|
||||
"0",
|
||||
"-22222222020",
|
||||
"disabled",
|
||||
seed,
|
||||
}
|
||||
joined := ""
|
||||
for i, v := range concatData {
|
||||
if i > 0 {
|
||||
joined += ";$(hash);_xcalc(arguments.calle);"
|
||||
}
|
||||
joined += v
|
||||
}
|
||||
b64 := base64.StdEncoding.EncodeToString([]byte(joined))
|
||||
b64 = regexp.MustCompile("=").ReplaceAllString(b64, "-")
|
||||
return b64
|
||||
}
|
||||
|
||||
// generateRandomString returns a random string of the given length (default 4)
|
||||
func generateRandomString(length ...int) string {
|
||||
l := 4
|
||||
if len(length) > 0 && length[0] > 0 {
|
||||
l = length[0]
|
||||
}
|
||||
chars := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
|
||||
result := make([]byte, l)
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
for i := 0; i < l; i++ {
|
||||
result[i] = chars[rand.Intn(len(chars))]
|
||||
}
|
||||
return string(result)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user