Upload files to "/"

This commit is contained in:
wissotsky   2025-10-06 17:18:40 +03:00
parent 5e523bff39
commit de83745ae3

118
rezemu.go Normal file
View 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)
}