Files
GingerShrew/gen.go

209 lines
4.9 KiB
Go
Raw Normal View History

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
}