Adds most of the Torrent Download option. Defaults to on if the torrent is already downloaded.

This commit is contained in:
idk
2022-03-15 18:54:42 -04:00
parent 6437de0e0d
commit 0c2cb7c11d
3 changed files with 92 additions and 11 deletions

View File

@ -286,6 +286,7 @@ func (t *TBDownloader) GetUpdaterForLangFromJSONBytes(jsonBytes []byte, ietf str
}
func (t *TBDownloader) MirrorIze(replaceStr string) string {
log.Println("MirrorIze()", "Replacing", replaceStr, t.Mirror)
if t.OS == "linux" && runtime.GOARCH == "arm64" {
replaceStr = strings.Replace(replaceStr, "linux64", "linux-arm64", -1)
if strings.HasSuffix(replaceStr, ".tar.xz.asc") {
@ -296,6 +297,14 @@ func (t *TBDownloader) MirrorIze(replaceStr string) string {
replaceStr = strings.Replace(replaceStr, lastElement, "sha256sums-unsigned-build.txt.asc", -1)
}
}
if strings.Contains(t.Mirror, "i2psnark") {
replaceStr = strings.Replace(replaceStr, "https://dist.torproject.org/torbrowser/", t.Mirror, 1)
dpath := filepath.Base(replaceStr)
replaceStr = strings.Replace(replaceStr, "http://", "", 1)
replaceStr = filepath.Dir(replaceStr)
replaceStr = filepath.Dir(replaceStr)
return "http://" + filepath.Join(replaceStr, dpath)
}
if t.Mirror != "" {
return strings.Replace(replaceStr, "https://dist.torproject.org/torbrowser/", t.Mirror, 1)
}
@ -498,12 +507,12 @@ func (t *TBDownloader) FetchContentLength(dl, name string) (int64, error) {
Method: "HEAD",
URL: dlurl,
}
t.Log("SingleFileDownload()", "Downloading file "+dl)
t.Log("FetchContentLength()", "Downloading file "+dl)
//file, err := http.Get(dl)
file, err := http.DefaultClient.Do(&req)
//Do(&req, nil)
if err != nil {
return 0, fmt.Errorf("SingleFileDownload: Request Error %s", err)
return 0, fmt.Errorf("FetchContentLength: Request Error %s", err)
}
file.Body.Close()
log.Println("Content-Length:", file.ContentLength)
@ -528,8 +537,12 @@ func (t *TBDownloader) BotherToDownload(dl, name string) bool {
return true
}
lenString := strconv.Itoa(int(contentLength))[:4]
lenSize := strconv.Itoa(int(stat.Size()))[:4]
l := 4
if len(strconv.Itoa(int(contentLength))) < 4 {
l = 1
}
lenString := strconv.Itoa(int(contentLength))[:l]
lenSize := strconv.Itoa(int(stat.Size()))[:l]
log.Println("comparing sizes:", lenString, lenSize)
//if stat.Size() != contentLength {
@ -562,7 +575,7 @@ func (t *TBDownloader) NamePerPlatform(ietf, version string) string {
extension = "exe"
}
//version, err := t.Get
return fmt.Sprintf("torbrowser%s-%s-%s_%s.%s", windowsonly, t.GetRuntimePair(), version, ietf, extension)
return fmt.Sprintf("tor-browser%s-%s-%s_%s.%s", windowsonly, t.GetRuntimePair(), version, ietf, extension)
}
func (t *TBDownloader) GetVersion() string {
@ -594,6 +607,13 @@ func (t *TBDownloader) DownloadUpdaterForLang(ietf string) (string, string, stri
return "", "", "", fmt.Errorf("DownloadUpdaterForLang: %s", err)
}
version := t.GetVersion()
if strings.Contains(t.Mirror, "i2psnark") {
for !TorrentDownloaded() {
time.Sleep(time.Second * 10)
log.Println("DownloadUpdaterForLang:", "Waiting for torrent to download")
}
time.Sleep(time.Second * 10)
}
sigpath, err := t.SingleFileDownload(sig, t.NamePerPlatform(ietf, version)+".asc", 0)
if err != nil {

View File

@ -162,3 +162,49 @@ func TorrentReady() bool {
}
return true
}
func TorrentPath() (string, string) {
extension := "tar.xz"
windowsonly := ""
switch runtime.GOOS {
case "darwin":
extension = "dmg"
case "windows":
windowsonly = "-installer"
extension = "exe"
}
//version, err := t.Get
return fmt.Sprintf("tor-browser%s", windowsonly), extension
}
func TorrentDownloaded() bool {
cmpsize := 8661000
if dir, err := FindSnarkDirectory(); err == nil {
err := filepath.Walk(dir,
func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
prefix, suffix := TorrentPath()
if strings.HasPrefix(path, prefix) && strings.HasSuffix(path, suffix) {
if info.Size() > int64(cmpsize) {
log.Println("TorrentDownloaded: Torrent Download found:", path)
return nil
}
}
return nil
})
return err == nil
}
return false
}
func Torrent() bool {
if !TorrentReady() {
return false
}
if !TorrentDownloaded() {
return false
}
return true
}

27
main.go
View File

@ -92,7 +92,8 @@ var (
destruct = flag.Bool("destruct", false, "Destructively delete the working directory when finished")
password = flag.String("password", Password(), "Password to encrypt the working directory with. Implies -destruct, only the encrypted container will be saved.")
chat = flag.Bool("chat", false, "Open a WebChat client")
/*ptop = flag.Bool("p2p", tbget.TorrentReady(), "Use bittorrent over I2P to download the initial copy of Tor Browser")*/
notor = flag.Bool("notor", false, "Do not automatically start Tor")
ptop = flag.Bool("p2p", tbget.TorrentDownloaded(), "Use bittorrent over I2P to download the initial copy of Tor Browser")
)
func Clearnet() bool {
@ -136,21 +137,32 @@ func Mirror() string {
if mir := os.Getenv("TOR_MANAGER_MIRROR"); mir != "" {
return mir
}
log.Println("No mirror specified, using default")
if runtime.GOOS == "linux" && runtime.GOARCH == "arm64" {
log.Println("Using arm64 mirror")
return "https://sourceforge.net/projects/tor-browser-ports/files"
}
clear := os.Getenv("TOR_MANAGER_CLEARNET")
if clear == "true" || clear == "1" {
switch clear {
case "1", "true", "yes", "on":
log.Println("Using clearnet mirror")
return "https://dist.torproject.org/torbrowser/"
}
if tbget.TorrentReady() {
// return "http://127.0.0.1:7657/i2psnark/"
clearmirror := os.Getenv("TOR_MANAGER_CLEARNET_MIRROR")
switch clearmirror {
case "1", "true", "yes", "on":
log.Println("Using clearnet mirror")
return "https://dist.torproject.org/torbrowser/"
}
if tbget.Torrent() {
log.Println("Using torrent mirror")
return "http://localhost:7657/i2psnark/"
}
if tbget.TestHTTPDefaultProxy() {
log.Println("Using I2P mirror")
return "http://dist.torproject.i2p/torbrowser/"
}
log.Println("Using clearnet mirror")
return "https://dist.torproject.org/torbrowser/"
}
@ -174,6 +186,9 @@ func main() {
usage()
}
flag.Parse()
if *ptop {
*mirror = "http://localhost:7657/i2psnark/"
}
if *password != "" {
log.Println("Looking for directory with password")
DecryptTarXZifThere(*directory, *password)
@ -330,7 +345,7 @@ func main() {
log.Fatal(err)
}
}
if !*clearnet {
if !*clearnet && !*notor {
client.TBS.RunTorWithLang()
}