2020-06-25 20:36:18 -04:00
|
|
|
//+build generate
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
2020-06-28 21:52:53 -04:00
|
|
|
import (
|
|
|
|
"github.com/zserge/lorca"
|
|
|
|
|
|
|
|
"io/ioutil"
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
var icecatdir = "gnuzilla"
|
|
|
|
|
|
|
|
var lowercase = "gingershrew"
|
|
|
|
var CamelCase = "GingerShrew"
|
|
|
|
var UPPERCASE = "GINGERSHREW"
|
|
|
|
|
|
|
|
var Full_Name = "Free GingerShrew"
|
|
|
|
var Developer = "From A Tiny Rodent"
|
|
|
|
var Foundation = "No Foundation"
|
2020-06-29 02:17:22 -04:00
|
|
|
var Corporation = "No Corporation"
|
2020-06-28 21:52:53 -04:00
|
|
|
|
|
|
|
var unpacker = `package REPLACEME
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
// "io/ioutil"
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
)
|
|
|
|
|
|
|
|
func userFind() string {
|
|
|
|
if os.Geteuid() == 0 {
|
|
|
|
log.Fatal("Do not run this application as root!")
|
|
|
|
}
|
|
|
|
if un, err := os.UserHomeDir(); err == nil {
|
|
|
|
os.MkdirAll(filepath.Join(un, "i2p"), 0755)
|
|
|
|
return un
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
var userdir = filepath.Join(userFind(), "/i2p/firefox-profiles")
|
|
|
|
|
|
|
|
func writeFile(val os.FileInfo, system *fs) ([]byte, error) {
|
|
|
|
if !val.IsDir() {
|
|
|
|
file, err := system.Open(val.Name())
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
sys := bytes.NewBuffer(nil)
|
|
|
|
if _, err := io.Copy(sys, file); err != nil {
|
|
|
|
return nil, err
|
|
|
|
} else {
|
|
|
|
return sys.Bytes(), nil
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
log.Println(filepath.Join(userdir, val.Name()), "ignored", "contents", val.Sys())
|
|
|
|
}
|
|
|
|
return nil, fmt.Errorf("undefined unpacker error")
|
|
|
|
}
|
|
|
|
|
|
|
|
func WriteBrowser(FS *fs) ([]byte, error) {
|
|
|
|
if embedded, err := FS.Readdir(-1); err != nil {
|
|
|
|
log.Fatal("Extension error, embedded extension not read.", err)
|
|
|
|
} else {
|
|
|
|
for _, val := range embedded {
|
|
|
|
if val.IsDir() {
|
|
|
|
os.MkdirAll(filepath.Join(userdir, val.Name()), val.Mode())
|
|
|
|
} else {
|
|
|
|
return writeFile(val, FS)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
`
|
2020-06-25 20:36:18 -04:00
|
|
|
|
|
|
|
func main() {
|
|
|
|
// You can also run "npm build" or webpack here, or compress assets, or
|
|
|
|
// generate manifests, or do other preparations for your assets.
|
2020-06-28 21:52:53 -04:00
|
|
|
|
|
|
|
if err := deleteDirectories(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
if err := createDirectories(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
if err := generateGoUnpacker(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
if err := splitBinaries(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
lorca.Embed("gsaa", "parts/aa/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.aa")
|
|
|
|
log.Println("embedded gsaa")
|
|
|
|
lorca.Embed("gsab", "parts/ab/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.ab")
|
|
|
|
log.Println("embedded gsab")
|
|
|
|
lorca.Embed("gsac", "parts/ac/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.ac")
|
|
|
|
log.Println("embedded gsac")
|
|
|
|
lorca.Embed("gsad", "parts/ad/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.ad")
|
|
|
|
log.Println("embedded gsad")
|
|
|
|
lorca.Embed("gsae", "parts/ae/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.ae")
|
|
|
|
log.Println("embedded gsae")
|
|
|
|
lorca.Embed("gsaf", "parts/af/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.af")
|
|
|
|
log.Println("embedded gsaf")
|
|
|
|
lorca.Embed("gsag", "parts/ag/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.ag")
|
|
|
|
log.Println("embedded gsag")
|
|
|
|
lorca.Embed("gsah", "parts/ah/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.ah")
|
|
|
|
log.Println("embedded gsah")
|
|
|
|
lorca.Embed("gsai", "parts/ai/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.ai")
|
|
|
|
log.Println("embedded gsai")
|
|
|
|
lorca.Embed("gsaj", "parts/aj/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.aj")
|
|
|
|
log.Println("embedded gsaj")
|
|
|
|
lorca.Embed("gsak", "parts/ak/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.ak")
|
|
|
|
log.Println("embedded gsak")
|
|
|
|
lorca.Embed("gsal", "parts/al/chunk.go", "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2.al")
|
|
|
|
log.Println("embedded gsal")
|
|
|
|
}
|
|
|
|
|
|
|
|
var dirs = []string{
|
|
|
|
"parts/aa",
|
|
|
|
"parts/ab",
|
|
|
|
"parts/ac",
|
|
|
|
"parts/ad",
|
|
|
|
"parts/ae",
|
|
|
|
"parts/af",
|
|
|
|
"parts/ag",
|
|
|
|
"parts/ah",
|
|
|
|
"parts/ai",
|
|
|
|
"parts/aj",
|
|
|
|
"parts/ak",
|
|
|
|
"parts/al",
|
|
|
|
}
|
|
|
|
|
|
|
|
var libs = []string{
|
|
|
|
"aa",
|
|
|
|
"ab",
|
|
|
|
"ac",
|
|
|
|
"ad",
|
|
|
|
"ae",
|
|
|
|
"af",
|
|
|
|
"ag",
|
|
|
|
"ah",
|
|
|
|
"ai",
|
|
|
|
"aj",
|
|
|
|
"ak",
|
|
|
|
"al",
|
|
|
|
}
|
|
|
|
|
|
|
|
func splitBinaries() error {
|
|
|
|
fileToBeChunked := "gingershrew-68.9.0.en-US.linux-x86_64.tar.bz2"
|
|
|
|
bytes, err := ioutil.ReadFile(fileToBeChunked)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
chunkSize := len(bytes) / 12
|
|
|
|
for index, lib := range libs {
|
2020-06-29 02:17:22 -04:00
|
|
|
start := index * chunkSize
|
|
|
|
finish := ((index + 1) * chunkSize)
|
2020-06-29 01:49:56 -04:00
|
|
|
if index == 11 {
|
|
|
|
finish = len(bytes)
|
|
|
|
}
|
2020-06-28 21:52:53 -04:00
|
|
|
outBytes := bytes[start:finish]
|
|
|
|
err := ioutil.WriteFile(fileToBeChunked+"."+lib, outBytes, 0644)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2020-06-29 01:49:56 -04:00
|
|
|
log.Printf("Started at: %d, Ended at: %d", start, finish)
|
2020-06-28 21:52:53 -04:00
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func deleteDirectories() error {
|
|
|
|
for _, dir := range libs {
|
|
|
|
err := os.RemoveAll(filepath.Join("parts", dir))
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func createDirectories() error {
|
|
|
|
for _, dir := range libs {
|
|
|
|
err := os.MkdirAll(filepath.Join("parts", dir), 0755)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func generateGoUnpacker() error {
|
|
|
|
for index, dir := range libs {
|
|
|
|
contents := strings.Replace(unpacker, "REPLACEME", "gs"+libs[index], -1)
|
|
|
|
if err := ioutil.WriteFile(filepath.Join("parts", dir, "unpacker.go"), []byte(contents), 0644); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
2020-06-25 20:36:18 -04:00
|
|
|
}
|