/
main.go
118 lines (110 loc) · 3.01 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//go:generate go run -tags generate gen.go
package main
import (
"bytes"
"io"
"io/ioutil"
"log"
"net/http"
"os"
. "github.com/eyedeekay/go-ccw"
)
var EXTENSIONS = []string{"i2pchrome.js"}
var EXTENSIONHASHES = []string{"359023d7c0e3eff50797c39942b27d088bd6db70740374dc3cf547fa540328f4"}
var ARGS = []string{
"--safebrowsing-disable-download-protection",
"--disable-client-side-phishing-detection",
"--disable-3d-apis",
"--disable-accelerated-2d-canvas",
"--disable-remote-fonts",
"--disable-sync-preferences",
"--disable-sync",
"--disable-speech",
"--disable-webgl",
"--disable-reading-from-canvas",
"--disable-gpu",
"--disable-32-apis",
"--disable-auto-reload",
"--disable-background-networking",
"--disable-d3d11",
"--disable-file-system",
}
func writeSubDirectory(fs http.File) {
log.Println("writing subdirectory")
name, err := fs.Stat()
if err != nil {
log.Fatal(err)
}
if embedded, err := fs.Readdir(0); err != nil {
log.Println("Extension error, embedded extension not read.")
} else {
if _, err := os.Stat("i2pchrome.js"); os.IsNotExist(err) {
os.MkdirAll("i2pchrome.js/"+name.Name(), FS.Mode())
for _, val := range embedded {
file, err := FS.Open(val.Name()) //
if err != nil {
log.Fatal(err.Error())
}
sys := bytes.NewBuffer(nil)
if _, err := io.Copy(sys, file); err != nil {
log.Fatal(err.Error())
}
ioutil.WriteFile("i2pchrome.js/"+name.Name()+"/"+val.Name(), sys.Bytes(), val.Mode())
}
} else {
log.Println("i2pchrome plugin already found")
}
}
}
func writeExtension(val os.FileInfo, system http.FileSystem) {
if len(val.Name()) > 3 {
if val.IsDir() {
os.MkdirAll("i2pchrome.js/"+val.Name(), FS.Mode())
file, err := FS.Open(val.Name()) //
if err != nil {
log.Fatal(err.Error())
}
writeSubDirectory(file)
} else {
log.Println("Writing file to extension", val.Name())
file, err := FS.Open(val.Name()) //
if err != nil {
log.Fatal(err.Error())
}
sys := bytes.NewBuffer(nil)
if _, err := io.Copy(sys, file); err != nil {
log.Fatal(err.Error())
}
if err := ioutil.WriteFile("i2pchrome.js/"+val.Name(), sys.Bytes(), val.Mode()); err != nil {
log.Fatal(err.Error())
}
}
} else {
log.Println("+i2pchrome.js/"+val.Name()+"'", "ignored", "contents", val.Sys())
}
}
func writeProfile(system http.FileSystem) {
if embedded, err := FS.Readdir(0); err != nil {
log.Println("Extension error, embedded extension not read.")
} else {
if _, err := os.Stat("i2pchrome.js"); os.IsNotExist(err) {
os.MkdirAll("i2pchrome.js/icons", FS.Mode())
os.MkdirAll("i2pchrome.js/options", FS.Mode())
os.MkdirAll("i2pchrome.js/_locales/en", FS.Mode())
for _, val := range embedded {
writeExtension(val, FS)
}
} else {
log.Println("i2pchrome plugin already found")
}
}
}
func main() {
writeProfile(FS)
CHROMIUM, ERROR = SecureExtendedChromium("i2pchromium-browser", false, EXTENSIONS, EXTENSIONHASHES, ARGS...)
if ERROR != nil {
log.Fatal(ERROR)
}
defer CHROMIUM.Close()
<-CHROMIUM.Done()
}