mirror of
https://github.com/blacktop/ipsw.git
synced 2026-06-07 12:27:36 +00:00
79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
package dyld
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"strings"
|
|
"time"
|
|
"unicode/utf8"
|
|
|
|
"github.com/gocolly/colly/v2"
|
|
)
|
|
|
|
const webkitURL = "https://trac.webkit.org/browser/webkit/tags/"
|
|
|
|
func trimFirstRune(s string) string {
|
|
_, i := utf8.DecodeRuneInString(s)
|
|
return s[i:]
|
|
}
|
|
|
|
func ScrapeWebKitTRAC(version string) (string, string, error) {
|
|
|
|
var changeset string
|
|
|
|
c := colly.NewCollector(
|
|
colly.MaxDepth(1),
|
|
)
|
|
|
|
// On every a element which has href attribute call callback
|
|
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
|
|
link := e.Attr("href")
|
|
|
|
if strings.Contains(link, "/log/webkit/tags/Safari-") {
|
|
r := regexp.MustCompile(`\/Safari-(?P<version>(\d+\.)?(\d+\.)?(\d+\.)?(\d+\.)(\*|\d+))\?rev=(?P<changeset>\d+)$`)
|
|
names := r.SubexpNames()
|
|
|
|
result := r.FindAllStringSubmatch(link, -1)
|
|
if result != nil {
|
|
m := map[string]string{}
|
|
for i, n := range result[0] {
|
|
m[names[i]] = n
|
|
}
|
|
|
|
if strings.Contains(m["version"], trimFirstRune(version)) {
|
|
changeset = e.Text
|
|
version = trimFirstRune(version)
|
|
}
|
|
}
|
|
} else if strings.Contains(link, "/log/webkit/tags/WebKit-") {
|
|
r := regexp.MustCompile(`\/WebKit-(?P<version>(\d+\.)?(\d+\.)?(\d+\.)?(\d+\.)(\*|\d+))\?rev=(?P<changeset>\d+)$`)
|
|
names := r.SubexpNames()
|
|
|
|
result := r.FindAllStringSubmatch(link, -1)
|
|
if result != nil {
|
|
m := map[string]string{}
|
|
for i, n := range result[0] {
|
|
m[names[i]] = n
|
|
}
|
|
if strings.Contains(m["version"], version) {
|
|
changeset = e.Text
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
// Set error handler
|
|
c.OnError(func(r *colly.Response, err error) {
|
|
fmt.Println("Request URL:", r.Request.URL, "failed with response:", r, "\nError:", err)
|
|
})
|
|
|
|
c.SetRequestTimeout(60 * time.Second)
|
|
c.Visit(webkitURL)
|
|
|
|
if len(changeset) > 0 {
|
|
return version, changeset, nil
|
|
}
|
|
|
|
return version, "", fmt.Errorf("failed to find svn rev for version: %s", version)
|
|
}
|