get ready for saving the keys

This commit is contained in:
idk 2018-12-25 01:45:42 -05:00
parent 564bf08803
commit fa15a55bbd
No known key found for this signature in database
GPG key ID: D75C03B39B5E14E1
5 changed files with 72 additions and 21 deletions

View file

@ -19,5 +19,7 @@ func NewConn(conn *sam3.SAMConn, path string) (*Conn, error) {
}
func GenConn(conn *sam3.SAMConn, path string) *Conn {
return &Conn{SAMConn: conn, path: path}
var c = Conn{SAMConn: conn, path: path}
c.SaveKeys()
return &c
}

12
main.go
View file

@ -2,9 +2,6 @@ package main
import (
"flag"
//"log"
"./socks"
//"github.com/eyedeekay/eeproxy/socks"
"os"
"os/signal"
"strings"
@ -12,7 +9,8 @@ import (
import (
"github.com/eyedeekay/sam-forwarder/config"
"github.com/eyedeekay/samcatd-web"
//"github.com/eyedeekay/samcatd-web"
"github.com/eyedeekay/eeproxy/socks"
)
type flagOpts []string
@ -95,15 +93,11 @@ var (
)
var (
webinterface *samcatweb.SAMWebConfig
webinterfaceerr error
err error
accessList flagOpts
config *i2ptunconf.Conf
)
func main() {
flag.Var(&accessList, "accesslist", "Specify an access list member(can be used multiple times)")
flag.Parse()
if *readKeys != "" {
@ -144,7 +138,7 @@ func main() {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
if tunsocks, tunerr := tunmanager.NewManager(); tunerr == nil {
if tunsocks, tunerr := tunmanager.NewManager(config.SamHost, config.SamPort, config.Print(), config.SaveDirectory); tunerr == nil {
go func() {
for sig := range c {
if sig == os.Interrupt {

View file

@ -21,7 +21,7 @@ func (r Resolver) Resolve(ctx context.Context, name string) (context.Context, ne
}
func (r Resolver) ResolveI2P(ctx context.Context, name string) (context.Context, *sam3.I2PAddr, error) {
if r.ValidateI2PAddr(name) {
if !r.ValidateI2PAddr(name) {
return ctx, nil, fmt.Errorf("Error, not an allowed suffix")
}
raddr, err := r.SAMResolver.Resolve(name)
@ -32,7 +32,7 @@ func (r Resolver) ResolveI2P(ctx context.Context, name string) (context.Context,
}
func (r Resolver) ValidateI2PAddr(name string) bool {
noi2p := true
noi2p := false
for _, suffix := range r.allowedSuffixes {
if strings.HasSuffix(name, suffix) {
if suffix == ".b32.i2p" {
@ -41,7 +41,7 @@ func (r Resolver) ValidateI2PAddr(name string) bool {
break
}
}
noi2p = false
noi2p = true
}
}
return noi2p

View file

@ -19,7 +19,10 @@ type Manager struct {
socks5.Config
sam3.StreamSession
conns []*conn.Conn
datapath string
datadir string
samhost string
samport string
samopts string
}
func (m Manager) Serve() error {
@ -41,7 +44,7 @@ func (m Manager) DialI2P(ctx context.Context, addr string) (*sam3.SAMConn, error
if err != nil {
return nil, err
}
m.conns = append(m.conns, conn.GenConn(newconn, m.datapath))
m.conns = append(m.conns, conn.GenConn(newconn, m.datadir))
log.Println("Generated destination for address:", i2paddr.Base32(), "at position", len(m.conns)-1)
return m.conns[len(m.conns)-1].SAMConn, nil
}
@ -50,11 +53,16 @@ func (m Manager) Dial(ctx context.Context, network, addr string) (net.Conn, erro
return m.DialI2P(ctx, addr)
}
func NewManager() (*Manager, error) {
return NewManagerFromOptions()
func NewManager(samhost, samport, samopts, datadir string) (*Manager, error) {
return NewManagerFromOptions(
SetHost(samhost),
SetPort(samport),
SetSAMOpts(samopts),
SetDataDir(datadir),
)
}
func NewManagerFromOptions() (*Manager, error) {
func NewManagerFromOptions(opts ...func(*Manager) error) (*Manager, error) {
var m Manager
if r, err := resolver.NewResolver(); err == nil {
m.Config = socks5.Config{

View file

@ -1 +1,48 @@
package tunmanager
import (
"fmt"
"strconv"
)
//Option is a Manager option
type Option func(*Manager) error
//SetHost sets the host of the client's SAM bridge
func SetHost(s string) func(*Manager) error {
return func(c *Manager) error {
c.samhost = s
return nil
}
}
//SetDataDir sets the directory to save per-site keys
func SetDataDir(s string) func(*Manager) error {
return func(c *Manager) error {
c.datadir = s
return nil
}
}
//SetPort sets the port of the client's SAM bridge
func SetPort(v string) func(*Manager) error {
return func(c *Manager) error {
port, err := strconv.Atoi(v)
if err != nil {
return fmt.Errorf("Invalid port; non-number.")
}
if port < 65536 && port > -1 {
c.samport = v
return nil
}
return fmt.Errorf("Invalid port.")
}
}
//SetSAMOpts sets the SAM options
func SetSAMOpts(s string) func(*Manager) error {
return func(c *Manager) error {
c.samopts = s
return nil
}
}