get ready for saving the keys
This commit is contained in:
parent
564bf08803
commit
fa15a55bbd
5 changed files with 72 additions and 21 deletions
|
@ -19,5 +19,7 @@ func NewConn(conn *sam3.SAMConn, path string) (*Conn, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func GenConn(conn *sam3.SAMConn, path string) *Conn {
|
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
|
||||||
}
|
}
|
||||||
|
|
16
main.go
16
main.go
|
@ -2,9 +2,6 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
//"log"
|
|
||||||
"./socks"
|
|
||||||
//"github.com/eyedeekay/eeproxy/socks"
|
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -12,7 +9,8 @@ import (
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/eyedeekay/sam-forwarder/config"
|
"github.com/eyedeekay/sam-forwarder/config"
|
||||||
"github.com/eyedeekay/samcatd-web"
|
//"github.com/eyedeekay/samcatd-web"
|
||||||
|
"github.com/eyedeekay/eeproxy/socks"
|
||||||
)
|
)
|
||||||
|
|
||||||
type flagOpts []string
|
type flagOpts []string
|
||||||
|
@ -95,15 +93,11 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
webinterface *samcatweb.SAMWebConfig
|
err error
|
||||||
webinterfaceerr error
|
config *i2ptunconf.Conf
|
||||||
err error
|
|
||||||
accessList flagOpts
|
|
||||||
config *i2ptunconf.Conf
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.Var(&accessList, "accesslist", "Specify an access list member(can be used multiple times)")
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
if *readKeys != "" {
|
if *readKeys != "" {
|
||||||
|
@ -144,7 +138,7 @@ func main() {
|
||||||
|
|
||||||
c := make(chan os.Signal, 1)
|
c := make(chan os.Signal, 1)
|
||||||
signal.Notify(c, os.Interrupt)
|
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() {
|
go func() {
|
||||||
for sig := range c {
|
for sig := range c {
|
||||||
if sig == os.Interrupt {
|
if sig == os.Interrupt {
|
||||||
|
|
|
@ -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) {
|
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")
|
return ctx, nil, fmt.Errorf("Error, not an allowed suffix")
|
||||||
}
|
}
|
||||||
raddr, err := r.SAMResolver.Resolve(name)
|
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 {
|
func (r Resolver) ValidateI2PAddr(name string) bool {
|
||||||
noi2p := true
|
noi2p := false
|
||||||
for _, suffix := range r.allowedSuffixes {
|
for _, suffix := range r.allowedSuffixes {
|
||||||
if strings.HasSuffix(name, suffix) {
|
if strings.HasSuffix(name, suffix) {
|
||||||
if suffix == ".b32.i2p" {
|
if suffix == ".b32.i2p" {
|
||||||
|
@ -41,7 +41,7 @@ func (r Resolver) ValidateI2PAddr(name string) bool {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
noi2p = false
|
noi2p = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return noi2p
|
return noi2p
|
||||||
|
|
|
@ -18,8 +18,11 @@ type Manager struct {
|
||||||
resolver.Resolver
|
resolver.Resolver
|
||||||
socks5.Config
|
socks5.Config
|
||||||
sam3.StreamSession
|
sam3.StreamSession
|
||||||
conns []*conn.Conn
|
conns []*conn.Conn
|
||||||
datapath string
|
datadir string
|
||||||
|
samhost string
|
||||||
|
samport string
|
||||||
|
samopts string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m Manager) Serve() error {
|
func (m Manager) Serve() error {
|
||||||
|
@ -41,7 +44,7 @@ func (m Manager) DialI2P(ctx context.Context, addr string) (*sam3.SAMConn, error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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)
|
log.Println("Generated destination for address:", i2paddr.Base32(), "at position", len(m.conns)-1)
|
||||||
return m.conns[len(m.conns)-1].SAMConn, nil
|
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)
|
return m.DialI2P(ctx, addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewManager() (*Manager, error) {
|
func NewManager(samhost, samport, samopts, datadir string) (*Manager, error) {
|
||||||
return NewManagerFromOptions()
|
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
|
var m Manager
|
||||||
if r, err := resolver.NewResolver(); err == nil {
|
if r, err := resolver.NewResolver(); err == nil {
|
||||||
m.Config = socks5.Config{
|
m.Config = socks5.Config{
|
||||||
|
|
|
@ -1 +1,48 @@
|
||||||
package tunmanager
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue