fix some issues reported from Matrix

This commit is contained in:
idk
2022-03-15 17:04:24 -04:00
parent 3981f53434
commit 12848c30b1
5 changed files with 126 additions and 101 deletions

View File

@ -264,7 +264,7 @@ tor-browser/TPO-signing-key.pub:
#gpg --output ./tor-browser/TPO-signing-key.pub --export -r torbrowser@torproject.org #gpg --output ./tor-browser/TPO-signing-key.pub --export -r torbrowser@torproject.org
#gpg --armor --output ./tor-browser/TPO-signing-key.pub --export -r torbrowser@torproject.org #gpg --armor --output ./tor-browser/TPO-signing-key.pub --export -r torbrowser@torproject.org
#gpg -r 0xEF6E286DDA85EA2A4BA7DE684E2C6E8793298290 --output ./tor-browser/TPO-signing-key.pub --export #gpg -r 0xEF6E286DDA85EA2A4BA7DE684E2C6E8793298290 --output ./tor-browser/TPO-signing-key.pub --export
#gpg -r 0xEF6E286DDA85EA2A4BA7DE684E2C6E8793298290 --armor --output ./tor-browser/TPO-signing-key.pub --export gpg -r 0xEF6E286DDA85EA2A4BA7DE684E2C6E8793298290 --armor --output ./tor-browser/TPO-signing-key.pub --export
deb: clean deb: clean
mv "hankhill19580_at_gmail.com.crl" ../; true mv "hankhill19580_at_gmail.com.crl" ../; true

View File

@ -17,6 +17,7 @@ import (
"path" "path"
"path/filepath" "path/filepath"
"runtime" "runtime"
"strconv"
"strings" "strings"
"time" "time"
@ -333,14 +334,63 @@ func (t *TBDownloader) StartConf() *tor.StartConf {
for _, path := range paths { for _, path := range paths {
if FileExists(path) { if FileExists(path) {
return &tor.StartConf{ return &tor.StartConf{
ExePath: path, ExePath: path,
RetainTempDataDir: false,
} }
} }
} }
tp := t.TorPath() tp := t.TorPath()
if FileExists(tp) { if FileExists(tp) {
return &tor.StartConf{ return &tor.StartConf{
ExePath: tp, ExePath: tp,
RetainTempDataDir: false,
}
}
return nil
}
// SetupProxy sets up the proxy for the given URL
func (t *TBDownloader) SetupProxy() error {
var d proxy.Dialer
if t.MirrorIsI2P() {
log.Println("Using I2P mirror, setting up proxy")
var err error
proxyURL, err := url.Parse("http://127.0.0.1:4444")
if err != nil {
return err
}
d, err = connectproxy.New(proxyURL, proxy.Direct)
if nil != err {
return err
}
tr := &http.Transport{
Dial: d.Dial,
}
http.DefaultClient.Transport = tr
} else {
if !strings.Contains(t.Mirror, "127.0.0.1") {
if tmp, torerr := net.Listen("tcp", "127.0.0.1:9050"); torerr != nil {
log.Println("System Tor is running, downloading over that because obviously.")
t, err := tor.Start(context.Background(), t.StartConf())
if err != nil {
if t == nil {
return err
}
}
//defer t.Close()
// Wait at most a minute to start network and get
dialCtx, _ := context.WithTimeout(context.Background(), time.Minute)
//defer dialCancel()
// Make connection
dialer, err := t.Dialer(dialCtx, nil)
if err != nil {
return err
}
tr := &http.Transport{DialContext: dialer.DialContext}
http.DefaultClient.Transport = tr
} else {
tmp.Close()
}
} }
} }
return nil return nil
@ -356,47 +406,9 @@ func (t *TBDownloader) SingleFileDownload(dl, name string, rangebottom int64) (s
t.Log("SingleFileDownload()", "File already exists, skipping download") t.Log("SingleFileDownload()", "File already exists, skipping download")
return path, nil return path, nil
} }
var d proxy.Dialer err := t.SetupProxy()
if t.MirrorIsI2P() { if err != nil {
log.Println("Using I2P mirror, setting up proxy") return "", err
var err error
proxyURL, err := url.Parse("http://127.0.0.1:4444")
if err != nil {
panic(err)
}
d, err = connectproxy.New(proxyURL, proxy.Direct)
if nil != err {
panic(err)
}
tr := &http.Transport{
Dial: d.Dial,
}
http.DefaultClient.Transport = tr
} else {
if !strings.Contains(t.Mirror, "127.0.0.1") {
if tmp, torerr := net.Listen("tcp", "127.0.0.1:9050"); torerr != nil {
log.Println("System Tor is running, downloading over that because obviously.")
t, err := tor.Start(context.Background(), t.StartConf())
if err != nil {
if t == nil {
return "", err
}
}
defer t.Close()
// Wait at most a minute to start network and get
dialCtx, dialCancel := context.WithTimeout(context.Background(), time.Minute)
defer dialCancel()
// Make connection
dialer, err := t.Dialer(dialCtx, nil)
if err != nil {
return "", err
}
tr := &http.Transport{DialContext: dialer.DialContext}
http.DefaultClient.Transport = tr
} else {
tmp.Close()
}
}
} }
dlurl, err := url.Parse(dl) dlurl, err := url.Parse(dl)
if err != nil { if err != nil {
@ -474,45 +486,9 @@ func (t *TBDownloader) FetchContentLength(dl, name string) (int64, error) {
// t.Log("FetchContentLength()", "File already exists, skipping download") // t.Log("FetchContentLength()", "File already exists, skipping download")
// return 0, nil // return 0, nil
//} //}
var d proxy.Dialer err := t.SetupProxy()
if t.MirrorIsI2P() { if err != nil {
log.Println("Using I2P mirror, setting up proxy") return 0, err
var err error
proxyURL, err := url.Parse("http://127.0.0.1:4444")
if err != nil {
return 0, err
}
d, err = connectproxy.New(proxyURL, proxy.Direct)
if nil != err {
return 0, err
}
tr := &http.Transport{
Dial: d.Dial,
}
http.DefaultClient.Transport = tr
} else {
if !strings.Contains(t.Mirror, "127.0.0.1") {
if tmp, torerr := net.Listen("tcp", "127.0.0.1:9050"); torerr != nil {
log.Println("System Tor is running, downloading over that because obviously.")
t, err := tor.Start(context.Background(), nil)
if err != nil {
return 0, err
}
defer t.Close()
// Wait at most a minute to start network and get
dialCtx, dialCancel := context.WithTimeout(context.Background(), time.Minute)
defer dialCancel()
// Make connection
dialer, err := t.Dialer(dialCtx, nil)
if err != nil {
return 0, err
}
tr := &http.Transport{DialContext: dialer.DialContext}
http.DefaultClient.Transport = tr
} else {
tmp.Close()
}
}
} }
dlurl, err := url.Parse(dl) dlurl, err := url.Parse(dl)
if err != nil { if err != nil {
@ -551,8 +527,16 @@ func (t *TBDownloader) BotherToDownload(dl, name string) bool {
if err != nil { if err != nil {
return true return true
} }
if stat.Size() < contentLength { //TODO: Make this the real size of the file by requesting content-length
lenString := strconv.Itoa(int(contentLength))[:4]
lenSize := strconv.Itoa(int(stat.Size()))[:4]
log.Println("comparing sizes:", lenString, lenSize)
//if stat.Size() != contentLength {
if lenString != lenSize {
return true return true
} else {
return false
} }
} }
defer ioutil.WriteFile(filepath.Join(t.DownloadPath, name+".last-url"), []byte(dl), 0644) defer ioutil.WriteFile(filepath.Join(t.DownloadPath, name+".last-url"), []byte(dl), 0644)
@ -567,7 +551,7 @@ func (t *TBDownloader) BotherToDownload(dl, name string) bool {
} }
// NamePerPlatform returns the name of the updater for the given platform with appropriate extensions. // NamePerPlatform returns the name of the updater for the given platform with appropriate extensions.
func (t *TBDownloader) NamePerPlatform(ietf string) string { func (t *TBDownloader) NamePerPlatform(ietf, version string) string {
extension := "tar.xz" extension := "tar.xz"
windowsonly := "" windowsonly := ""
switch t.OS { switch t.OS {
@ -577,7 +561,21 @@ func (t *TBDownloader) NamePerPlatform(ietf string) string {
windowsonly = "-installer" windowsonly = "-installer"
extension = "exe" extension = "exe"
} }
return fmt.Sprintf("torbrowser%s-%s-%s.%s", windowsonly, t.GetRuntimePair(), ietf, extension) //version, err := t.Get
return fmt.Sprintf("torbrowser%s-%s-%s_%s.%s", windowsonly, t.GetRuntimePair(), version, ietf, extension)
}
func (t *TBDownloader) GetVersion() string {
binary, _, err := t.GetUpdaterForLang(t.Lang)
if err != nil {
return ""
}
version := strings.Split(binary, "/")[len(strings.Split(binary, "/"))-2]
return version
}
func (t *TBDownloader) GetName() string {
return t.NamePerPlatform(t.Lang, t.GetVersion())
} }
// DownloadUpdater downloads the updater for the t.Lang. It returns // DownloadUpdater downloads the updater for the t.Lang. It returns
@ -595,18 +593,19 @@ func (t *TBDownloader) DownloadUpdaterForLang(ietf string) (string, string, stri
if err != nil { if err != nil {
return "", "", "", fmt.Errorf("DownloadUpdaterForLang: %s", err) return "", "", "", fmt.Errorf("DownloadUpdaterForLang: %s", err)
} }
version := t.GetVersion()
sigpath, err := t.SingleFileDownload(sig, t.NamePerPlatform(ietf)+".asc", 0) sigpath, err := t.SingleFileDownload(sig, t.NamePerPlatform(ietf, version)+".asc", 0)
if err != nil { if err != nil {
return "", "", "", fmt.Errorf("DownloadUpdaterForLang: %s", err) return "", "", "", fmt.Errorf("DownloadUpdaterForLang: %s", err)
} }
binpath, err := t.SingleFileDownload(binary, t.NamePerPlatform(ietf), 0) binpath, err := t.SingleFileDownload(binary, t.NamePerPlatform(ietf, version), 0)
if err != nil { if err != nil {
return "", sigpath, "", fmt.Errorf("DownloadUpdaterForLang: %s", err) return "", sigpath, "", fmt.Errorf("DownloadUpdaterForLang: %s", err)
} }
var sumpath string var sumpath string
if t.OS == "linux" && runtime.GOARCH == "arm64" { if t.OS == "linux" && runtime.GOARCH == "arm64" {
sumpath, err = t.SingleFileDownload("https://sourceforge.net/projects/tor-browser-ports/files/11.0.6/sha256sums-unsigned-build.txt/download", t.NamePerPlatform(ietf)+".sha256sums", 0) sumpath, err = t.SingleFileDownload("https://sourceforge.net/projects/tor-browser-ports/files/11.0.6/sha256sums-unsigned-build.txt/download", t.NamePerPlatform(ietf, version)+".sha256sums", 0)
if err != nil { if err != nil {
return "", sigpath, sumpath, fmt.Errorf("DownloadUpdaterForLang: %s", err) return "", sigpath, sumpath, fmt.Errorf("DownloadUpdaterForLang: %s", err)
} }
@ -728,7 +727,7 @@ func (t *TBDownloader) CheckSignature(binpath, sigpath string) (string, error) {
} }
var err error var err error
if err = Verify(pk, sigpath, binpath); err == nil { if err = Verify(pk, sigpath, binpath); err == nil {
t.Log("CheckSignature: signature", "verified successfully") log.Println("CheckSignature: signature", "verified successfully")
return t.UnpackUpdater(binpath) return t.UnpackUpdater(binpath)
} }
return "", fmt.Errorf("CheckSignature: %s", err) return "", fmt.Errorf("CheckSignature: %s", err)

View File

@ -29,6 +29,8 @@ func Verify(keyrings, detached, target string) error {
return fmt.Errorf("Verify: failed to read keyrings: %s\n\t%s", err, keyrings) return fmt.Errorf("Verify: failed to read keyrings: %s\n\t%s", err, keyrings)
} }
log.Printf("Verify: %s", fmt.Sprintf("Read %d keyrings", len(entities))) log.Printf("Verify: %s", fmt.Sprintf("Read %d keyrings", len(entities)))
log.Printf("Verifying: %s against %s\n", target, detached)
log.Printf("Verify: using keyring %s\n", keyrings)
_, err = openpgp.CheckArmoredDetachedSignature(entities, verification_target, signature, nil) _, err = openpgp.CheckArmoredDetachedSignature(entities, verification_target, signature, nil)
if err != nil { if err != nil {
return fmt.Errorf("Verify: failed to verify signature: %s\n\t%s\n\t%s\n\t%s", err, keyrings, detached, target) return fmt.Errorf("Verify: failed to verify signature: %s\n\t%s\n\t%s\n\t%s", err, keyrings, detached, target)

43
main.go
View File

@ -83,7 +83,7 @@ var (
shortcuts = flag.Bool("shortcuts", false, "Create desktop shortcuts") shortcuts = flag.Bool("shortcuts", false, "Create desktop shortcuts")
apparmor = flag.Bool("apparmor", false, "Generate apparmor rules") apparmor = flag.Bool("apparmor", false, "Generate apparmor rules")
offline = flag.Bool("offline", false, "Work offline. Differs from Firefox's offline mode in that cannot be disabled until the browser is closed.") offline = flag.Bool("offline", false, "Work offline. Differs from Firefox's offline mode in that cannot be disabled until the browser is closed.")
clearnet = flag.Bool("clearnet", false, "Use clearnet (no Tor or I2P)") clearnet = flag.Bool("clearnet", Clearnet(), "Use clearnet (no Tor or I2P)")
profile = flag.String("profile", "", "use a custom profile path, normally blank") profile = flag.String("profile", "", "use a custom profile path, normally blank")
help = flag.Bool("help", false, "Print help") help = flag.Bool("help", false, "Print help")
mirror = flag.String("mirror", Mirror(), "Mirror to use. I2P will be used if an I2P proxy is present, if system Tor is available, it will be downloaded over the Tor proxy.") mirror = flag.String("mirror", Mirror(), "Mirror to use. I2P will be used if an I2P proxy is present, if system Tor is available, it will be downloaded over the Tor proxy.")
@ -95,12 +95,23 @@ var (
/*ptop = flag.Bool("p2p", tbget.TorrentReady(), "Use bittorrent over I2P to download the initial copy of Tor Browser")*/ /*ptop = flag.Bool("p2p", tbget.TorrentReady(), "Use bittorrent over I2P to download the initial copy of Tor Browser")*/
) )
func Clearnet() bool {
if tmc := os.Getenv("TOR_MANAGER_CLEARNET"); tmc != "" {
switch tmc {
case "1", "true", "yes", "on":
return true
}
}
return false
}
func Password() string { func Password() string {
require_password := os.Getenv("TOR_MANAGER_REQUIRE_PASSWORD") require_password := os.Getenv("TOR_MANAGER_REQUIRE_PASSWORD")
if require_password == "" && !PluginStat() { if require_password == "" && !PluginStat() {
require_password = "true" require_password = "true"
} }
if require_password == "true" || require_password == "1" { switch require_password {
case "true", "1", "yes", "on":
passwd, err := zenity.Entry( passwd, err := zenity.Entry(
"Enter a password if you want to encrypt the working directory", "Enter a password if you want to encrypt the working directory",
zenity.Title("Work Directory Encryption"), zenity.Title("Work Directory Encryption"),
@ -122,16 +133,24 @@ func Password() string {
} }
func Mirror() string { func Mirror() string {
if tbget.TestHTTPDefaultProxy() { if mir := os.Getenv("TOR_MANAGER_MIRROR"); mir != "" {
return "http://dist.torproject.i2p/torbrowser/" return mir
}
if tbget.TorrentReady() {
//return "http://127.0.0.1:7657/i2psnark/"
return "https://dist.torproject.org/torbrowser/"
} }
if runtime.GOOS == "linux" && runtime.GOARCH == "arm64" { if runtime.GOOS == "linux" && runtime.GOARCH == "arm64" {
return "https://sourceforge.net/projects/tor-browser-ports/files" return "https://sourceforge.net/projects/tor-browser-ports/files"
} }
clear := os.Getenv("TOR_MANAGER_CLEARNET")
if clear == "true" || clear == "1" {
return "https://dist.torproject.org/torbrowser/"
}
if tbget.TorrentReady() {
// return "http://127.0.0.1:7657/i2psnark/"
return "https://dist.torproject.org/torbrowser/"
}
if tbget.TestHTTPDefaultProxy() {
return "http://dist.torproject.i2p/torbrowser/"
}
return "https://dist.torproject.org/torbrowser/" return "https://dist.torproject.org/torbrowser/"
} }
@ -147,7 +166,8 @@ func main() {
fmt.Printf("Usage: %s %s\n", filename, "[options]") fmt.Printf("Usage: %s %s\n", filename, "[options]")
fmt.Printf("\n") fmt.Printf("\n")
fmt.Printf("Downloads, verifies and unpacks Tor Browser. Manages the Tor Browser\n") fmt.Printf("Downloads, verifies and unpacks Tor Browser. Manages the Tor Browser\n")
fmt.Printf("system in environments where Tor is not in use.\n") fmt.Printf("system in environments where Tor is not in use. Monitors a long-running\n")
fmt.Printf("Tor process and downloads updates when Tor is not available.\n")
fmt.Printf("\n") fmt.Printf("\n")
fmt.Printf("Options:\n") fmt.Printf("Options:\n")
fmt.Printf("\n") fmt.Printf("\n")
@ -310,7 +330,10 @@ func main() {
log.Fatal(err) log.Fatal(err)
} }
} }
client.TBS.RunTorWithLang() if !*clearnet {
client.TBS.RunTorWithLang()
}
if *chat { if *chat {
log.Println("Starting I2P chat") log.Println("Starting I2P chat")
go BRBClient(*directory, "brb") go BRBClient(*directory, "brb")

View File

@ -13,6 +13,7 @@ import (
"os" "os"
"path" "path"
"path/filepath" "path/filepath"
"runtime"
"strconv" "strconv"
"strings" "strings"
@ -53,7 +54,7 @@ func NewClient(verbose bool, lang, OS, arch, mirror string, content *embed.FS) (
panic(err) panic(err)
} }
sum := "" sum := ""
if sums != "" { if sums != "" && runtime.GOOS == "linux" && runtime.GOARCH == "arm64" {
b, err := ioutil.ReadFile(sums) b, err := ioutil.ReadFile(sums)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)