2020-04-02 17:52:46 -04:00
|
|
|
//+build generate
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
2020-07-02 18:24:46 -04:00
|
|
|
import (
|
2020-07-03 02:29:15 -04:00
|
|
|
"crypto/sha256"
|
2020-07-02 18:24:46 -04:00
|
|
|
"fmt"
|
|
|
|
"io"
|
2020-07-03 02:29:15 -04:00
|
|
|
"io/ioutil"
|
2020-07-02 18:24:46 -04:00
|
|
|
"log"
|
|
|
|
"net/http"
|
|
|
|
"os"
|
2020-07-02 19:58:19 -04:00
|
|
|
"time"
|
2020-07-02 18:24:46 -04:00
|
|
|
|
|
|
|
"github.com/zserge/lorca"
|
|
|
|
)
|
|
|
|
|
2020-07-03 02:29:15 -04:00
|
|
|
var pureExtensions = `// +build !variant
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
var EXTENSIONS = []string{
|
|
|
|
"i2ppb@eyedeekay.github.io.xpi",
|
|
|
|
"uBlock0@raymondhill.net.xpi",
|
|
|
|
"uMatrix@raymondhill.net.xpi",
|
|
|
|
}
|
|
|
|
var EXTENSIONHASHES = []string{
|
|
|
|
`
|
|
|
|
|
|
|
|
var variantExtensions = `// +build variant
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
var NOM = "variant"
|
|
|
|
|
|
|
|
var EXTENSIONS = []string{
|
|
|
|
"i2ppb@eyedeekay.github.io.xpi",
|
|
|
|
"{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi",
|
|
|
|
"uBlock0@raymondhill.net.xpi",
|
|
|
|
"uMatrix@raymondhill.net.xpi",
|
|
|
|
}
|
|
|
|
var EXTENSIONHASHES = []string{
|
|
|
|
`
|
|
|
|
|
|
|
|
var i2ppbHash = ""
|
|
|
|
var snowflakeHash = ""
|
|
|
|
var ublockHash = ""
|
|
|
|
var umatrixHash = ""
|
|
|
|
|
2020-07-02 18:24:46 -04:00
|
|
|
var i2ppb = []string{
|
|
|
|
"i2ppb@eyedeekay.github.io.xpi",
|
|
|
|
"https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/",
|
|
|
|
VERSION,
|
|
|
|
}
|
|
|
|
var snowflake = []string{
|
|
|
|
"{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi",
|
|
|
|
"https://addons.mozilla.org/firefox/downloads/file/3519836/",
|
|
|
|
SNOW_VERSION,
|
|
|
|
"snowflake",
|
|
|
|
}
|
|
|
|
var noscript = []string{
|
|
|
|
"{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi",
|
|
|
|
"https://addons.mozilla.org/firefox/downloads/file/3534184/",
|
|
|
|
NOSS_VERSION,
|
|
|
|
"noscript_security_suite",
|
|
|
|
}
|
|
|
|
var umatrix = []string{
|
|
|
|
"uMatrix@raymondhill.net.xpi",
|
|
|
|
"https://addons.mozilla.org/firefox/downloads/file/3396815/",
|
|
|
|
UMAT_VERSION,
|
|
|
|
"umatrix",
|
|
|
|
}
|
|
|
|
var ublock = []string{
|
|
|
|
"uBlock0@raymondhill.net.xpi",
|
2020-07-02 19:58:19 -04:00
|
|
|
"https://addons.mozilla.org/firefox/downloads/file/3521827/",
|
2020-07-02 18:24:46 -04:00
|
|
|
UBLO_VERSION,
|
|
|
|
"ublock",
|
|
|
|
}
|
|
|
|
|
2020-07-03 02:29:15 -04:00
|
|
|
func variantFile() error {
|
|
|
|
value := variantExtensions
|
|
|
|
value += "\t\"" + i2ppbHash + "\",\n"
|
|
|
|
value += "\t\"" + snowflakeHash + "\",\n"
|
|
|
|
value += "\t\"" + ublockHash + "\",\n"
|
|
|
|
value += "\t\"" + umatrixHash + "\",\n"
|
|
|
|
value += "}\n"
|
|
|
|
return ioutil.WriteFile("variantextensions.go", []byte(value), 0644)
|
|
|
|
}
|
|
|
|
|
|
|
|
func pureFile() error {
|
|
|
|
value := pureExtensions
|
|
|
|
value += "\t\"" + i2ppbHash + "\",\n"
|
|
|
|
value += "\t\"" + ublockHash + "\",\n"
|
|
|
|
value += "\t\"" + umatrixHash + "\",\n"
|
|
|
|
value += "}\n"
|
|
|
|
return ioutil.WriteFile("pureextensions.go", []byte(value), 0644)
|
|
|
|
}
|
|
|
|
|
|
|
|
func sha256sum(path string) (string, error) {
|
|
|
|
bytes, err := ioutil.ReadFile("ifox/" + path)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
sum := sha256.Sum256(bytes)
|
|
|
|
var s []byte
|
|
|
|
for _, c := range sum {
|
2020-07-29 13:05:05 -04:00
|
|
|
s = append(s, c)
|
2020-07-03 02:29:15 -04:00
|
|
|
}
|
|
|
|
log.Println(fmt.Sprintf("%x", sum))
|
|
|
|
return fmt.Sprintf("%x", sum), nil
|
|
|
|
}
|
|
|
|
|
2020-07-02 18:24:46 -04:00
|
|
|
func fetch() error {
|
|
|
|
if err := get(i2ppb); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2020-07-03 02:29:15 -04:00
|
|
|
if tmp, err := sha256sum(i2ppb[0]); err != nil {
|
|
|
|
return err
|
|
|
|
} else {
|
|
|
|
i2ppbHash = tmp
|
|
|
|
}
|
2020-07-02 18:24:46 -04:00
|
|
|
if err := get(snowflake); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2020-07-03 02:29:15 -04:00
|
|
|
if tmp, err := sha256sum(snowflake[0]); err != nil {
|
|
|
|
return err
|
|
|
|
} else {
|
|
|
|
snowflakeHash = tmp
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
// if err := get(noscript); err != nil {
|
|
|
|
// return err
|
|
|
|
// }
|
|
|
|
// if tmp, err := sha256sum(noscript[0]); err != nil {
|
|
|
|
// return err
|
|
|
|
// }else{
|
|
|
|
// i2ppbHash = tmp
|
|
|
|
// }
|
|
|
|
*/
|
2020-07-02 18:24:46 -04:00
|
|
|
if err := get(umatrix); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2020-07-03 02:29:15 -04:00
|
|
|
if tmp, err := sha256sum(umatrix[0]); err != nil {
|
|
|
|
return err
|
|
|
|
} else {
|
|
|
|
umatrixHash = tmp
|
|
|
|
}
|
2020-07-02 18:24:46 -04:00
|
|
|
if err := get(ublock); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2020-07-03 02:29:15 -04:00
|
|
|
if tmp, err := sha256sum(ublock[0]); err != nil {
|
|
|
|
return err
|
|
|
|
} else {
|
|
|
|
ublockHash = tmp
|
|
|
|
}
|
2020-07-02 18:24:46 -04:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2020-07-02 19:58:19 -04:00
|
|
|
func determinate(path string) error {
|
|
|
|
t := time.Date(1970, time.January, 1, 1, 0, 0, 0, time.UTC)
|
|
|
|
if err := os.Chtimes("ifox/"+path, t, t); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func download(path string, url string) error {
|
2020-07-02 18:24:46 -04:00
|
|
|
os.MkdirAll("ifox", 0755)
|
|
|
|
// Get the data
|
|
|
|
resp, err := http.Get(url)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
defer resp.Body.Close()
|
|
|
|
// Create the file
|
2020-07-02 19:58:19 -04:00
|
|
|
out, err := os.Create("ifox/" + path)
|
2020-07-02 18:24:46 -04:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
defer out.Close()
|
|
|
|
// Write the body to file
|
|
|
|
_, err = io.Copy(out, resp.Body)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
func get(extension []string) error {
|
|
|
|
if len(extension) == 3 {
|
2020-07-03 02:29:15 -04:00
|
|
|
path := extension[1] + extension[2] + "/" + extension[0]
|
2020-07-02 19:58:19 -04:00
|
|
|
err := download(extension[0], path)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return determinate(extension[0])
|
2020-07-02 18:24:46 -04:00
|
|
|
} else if len(extension) == 4 {
|
2020-07-02 19:58:19 -04:00
|
|
|
path := extension[1] + extension[3] + extension[2] + "-an+fx.xpi"
|
|
|
|
err := download(extension[0], path)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return determinate(extension[0])
|
2020-07-02 18:24:46 -04:00
|
|
|
}
|
|
|
|
return fmt.Errorf("Error fetching extension for build.")
|
|
|
|
}
|
|
|
|
|
|
|
|
/// wget -nv -c -O
|
2020-04-02 17:52:46 -04:00
|
|
|
|
|
|
|
func main() {
|
2020-07-03 02:29:15 -04:00
|
|
|
os.RemoveAll("ifox")
|
2020-07-02 18:24:46 -04:00
|
|
|
if err := fetch(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2020-07-03 02:29:15 -04:00
|
|
|
if err := pureFile(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
if err := variantFile(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
2020-04-02 17:52:46 -04:00
|
|
|
// You can also run "npm build" or webpack here, or compress assets, or
|
|
|
|
// generate manifests, or do other preparations for your assets.
|
2020-04-03 11:38:32 -04:00
|
|
|
lorca.Embed("main", "assets.go", "ifox/")
|
2020-04-02 17:52:46 -04:00
|
|
|
}
|