make an embeddable version which can be kept alive

This commit is contained in:
idk
2020-09-10 17:03:54 -04:00
parent 984ad780bb
commit 1e9586338c
11 changed files with 201 additions and 23 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
toopie.html
import/jtoopie/jtoopie
import/jtoopie/toopie
bin
toopie

View File

@ -5,6 +5,9 @@ build: fmt gen
run: fmt gen
go run ./ -port 9001 #-ribbon true
test:
cd import && go test
fmt:
gofmt -w -s *.go */*.go

View File

@ -1,3 +1,22 @@
# toopie.html
toopie.html I2P standalone monitoring panel
===========================================
This is a very simple monitoring panel for interacting with I2P and monitoring
I2P statistics. It can stop, or restart an I2P router, as well as provide concise
output about I2P router status from I2PControl. It depends on the presence of an
I2P router implementing the i2pcontrol jsonrpc interface.
To enable jsonrpc on the Java I2P router, go to this the webapps config page:
[http://localhost:7657/configwebapps](http://localhost:7657/configwebapps) and
enable the `jsonrpc` app as seen in the screenshot below:
![enable i2pcontrol](i2pcontrol.png)
HELP WANTED!!!
--------------
I don't have a Mac, mine bit the dust. I need help creating a Mac package
of this. Please, if you want a Mac version of this application and have
Mac packaging experience, create an issue so we can work together to figure
out how to support Mac users best.
Still real crude, but it works now.

12
gen.go
View File

@ -2,10 +2,20 @@
package main
import "github.com/zserge/lorca"
import (
"github.com/zserge/lorca"
"log"
"os/exec"
)
func main() {
// You can also run "npm build" or webpack here, or compress assets, or
// generate manifests, or do other preparations for your assets.
lorca.Embed("toopie", "lib/assets.go", "www")
err := exec.Command("go", "build", "-tags", "netgo", "-o", "bin/toopie").Run()
if err != nil {
log.Fatalf(err.Error())
}
lorca.Embed("toopiexec", "import/assets.go", "bin/")
}

BIN
i2pcontrol.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

65
import/assets.go Normal file

File diff suppressed because one or more lines are too long

27
import/jtoopie/main.go Normal file
View File

@ -0,0 +1,27 @@
//go:generate go run -tags generate gen.go
package main
import (
"flag"
"github.com/eyedeekay/toopie.html/import"
"log"
)
var (
port = flag.String("port", "0", "Port to run the web interface on, default is randomly assigned.")
pport = flag.Int("proxy-port", 7677, "Port to use to proxy requests to i2p-control")
ribbon = flag.Bool("ribbon", false, "use a horizontal ribbon instead of a vertical panel")
)
func update(){
err := toopiexec.Run()
if err != nil {
log.Fatal(err.Error())
}
}
func main() {
flag.Parse()
go update()
}

40
import/main.go Normal file
View File

@ -0,0 +1,40 @@
package toopiexec
import (
"io/ioutil"
"bytes"
"io"
"os"
"fmt"
"os/exec"
"path/filepath"
)
func Run() error {
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
return fmt.Errorf("Path detection error %s", err)
}
filelist, err := FS.Readdir(-1)
for index, file := range filelist{
fmt.Println(index, file.Name())
}
toopie, err := FS.Open("toopie")
if err != nil {
return fmt.Errorf("Toopie open error %s", err)
}
sys := bytes.NewBuffer(nil)
if _, err := io.Copy(sys, toopie); err != nil {
return fmt.Errorf("File copy error %s", err)
}
exepath := filepath.Join(dir, "toopie")
err = ioutil.WriteFile(exepath, sys.Bytes(), 0755)
if err != nil {
return fmt.Errorf("File write error %s %s", err, exepath)
}
err = exec.Command(exepath).Run()
if err != nil {
return fmt.Errorf("Runtime error %s", err)
}
return nil
}

9
import/main_test.go Normal file
View File

@ -0,0 +1,9 @@
package toopiexec
import (
"testing"
)
func TestMain(t *testing.T) {
Run()
}

File diff suppressed because one or more lines are too long

Binary file not shown.