2018-07-26 17:48:24 -04:00
|
|
|
# sam-forwarder
|
|
|
|
Forward a local port to i2p over the SAM API.
|
2018-07-23 22:18:15 -04:00
|
|
|
|
|
|
|
## building
|
|
|
|
|
|
|
|
Just:
|
|
|
|
|
|
|
|
make deps build
|
|
|
|
|
|
|
|
and it will be in the folder ./bin/
|
|
|
|
|
|
|
|
## usage
|
|
|
|
|
2018-07-27 12:37:11 -04:00
|
|
|
./bin/ephsite -host=host -port=port
|
2018-07-23 22:18:15 -04:00
|
|
|
|
|
|
|
So, to serve an eepSite version of a local service on port 8080 -
|
|
|
|
|
2018-07-27 12:37:11 -04:00
|
|
|
./bin/ephsite -host=127.0.0.1 -port=8080
|
2018-07-26 23:15:27 -04:00
|
|
|
|
|
|
|
## Quick-And-Dirty i2p-enabled golang web applications
|
|
|
|
|
|
|
|
Normal web applications can easily add the ability to serve itself over i2p by
|
|
|
|
importing and configuring this forwarding doodad. Wherever it takes the argument
|
|
|
|
for the web server's listening host and/or port, pass that same host and/or port
|
|
|
|
to a new instance of the "SAMForwarder" and then run the "Serve" function of the
|
|
|
|
SAMForwarder as a gorouting. This simply forwards the running service to the i2p
|
|
|
|
network, it doesn't do any filtering, and if your application establishes
|
|
|
|
out-of-band connections, those may escape. Also, if your application is
|
|
|
|
listening on all addresses, it will be visible from the local network.
|
|
|
|
|
|
|
|
Here's a simple example with a simple static file server:
|
|
|
|
|
|
|
|
```Diff
|
2018-07-27 12:37:11 -04:00
|
|
|
package main package main
|
|
|
|
|
|
|
|
import ( import (
|
|
|
|
"flag" "flag"
|
|
|
|
"log" "log"
|
|
|
|
"net/http" "net/http"
|
|
|
|
) )
|
|
|
|
|
|
|
|
> import "github.com/eyedeekay/sam-forwarder"
|
|
|
|
>
|
|
|
|
func main() { func main() {
|
|
|
|
port := flag.String("p", "8100", "port to serve on") port := flag.String("p", "8100", "port to serve on")
|
|
|
|
directory := flag.String("d", ".", "the directory of static file to host") directory := flag.String("d", ".", "the directory of static file to host")
|
|
|
|
flag.Parse() flag.Parse()
|
|
|
|
>
|
|
|
|
> forwarder, err := samforwarder.NewSAMForwarderFromOptions(
|
|
|
|
> samforwarder.SetHost("127.0.0.1"),
|
|
|
|
> samforwarder.SetPort(*port),
|
|
|
|
> samforwarder.SetSAMHost("127.0.0.1"),
|
|
|
|
> samforwarder.SetSAMPort("7656"),
|
|
|
|
> samforwarder.SetName("staticfiles"),
|
|
|
|
> )
|
|
|
|
> if err != nil {
|
|
|
|
> log.Fatal(err.Error())
|
|
|
|
> }
|
|
|
|
> go forwarder.Serve()
|
|
|
|
|
|
|
|
http.Handle("/", http.FileServer(http.Dir(*directory))) http.Handle("/", http.FileServer(http.Dir(*directory)))
|
|
|
|
|
|
|
|
log.Printf("Serving %s on HTTP port: %s\n", *directory, *port) log.Printf("Serving %s on HTTP port: %s\n", *directory, *port)
|
|
|
|
log.Fatal(http.ListenAndServe("127.0.0.1:"+*port, nil)) log.Fatal(http.ListenAndServe("127.0.0.1:"+*port, nil))
|
|
|
|
} }
|
2018-07-26 23:15:27 -04:00
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
[This tiny file server taken from here and used for this example](https://gist.github.com/paulmach/7271283)
|