server

package
v0.0.0-...-64f3ffe Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 19, 2018 License: Apache-2.0 Imports: 32 Imported by: 0

Documentation

Index

Constants

View Source
const (
	NotAuthorized = `HTTP/1.0 401 Not Authorized
WWW-Authenticate: Basic realm="ngrok"
Content-Length: 23

Authorization required
`

	NotFound = `HTTP/1.0 404 Not Found
Content-Length: %d

Tunnel %s not found
`

	BadRequest = `HTTP/1.0 400 Bad Request
Content-Length: 12

Bad Request
`
)
View Source
const (
	DbPrefix = "ngrok"
)

Variables

This section is empty.

Functions

func ConfigMain

func ConfigMain()

func LoadTLSConfig

func LoadTLSConfig(crtPath string, keyPath string) (tlsConfig *tls.Config, err error)

func Main

func Main()

func NewControl

func NewControl(ctlConn conn.Conn, authMsg *msg.Auth)

func NewProxy

func NewProxy(pxyConn conn.Conn, regPxy *msg.RegProxy)

Types

type ConfigMgr

type ConfigMgr struct {
	// contains filtered or unexported fields
}

func GetMgr

func GetMgr() *ConfigMgr

func NewConfigMgr

func NewConfigMgr() *ConfigMgr

func (*ConfigMgr) AddUserConfig

func (mgr *ConfigMgr) AddUserConfig(uc *UserConfig) error

Add new config, but not save to db

func (*ConfigMgr) BindUser

func (mgr *ConfigMgr) BindUser(id string, user string) error

func (*ConfigMgr) GetByDns

func (mgr *ConfigMgr) GetByDns(dns string) *UserInfo

func (*ConfigMgr) GetUserInfo

func (mgr *ConfigMgr) GetUserInfo(id string) *UserInfo

func (*ConfigMgr) ListAll

func (mgr *ConfigMgr) ListAll() []string

func (*ConfigMgr) TimeoutAllDays

func (mgr *ConfigMgr) TimeoutAllDays()

type Control

type Control struct {
	// contains filtered or unexported fields
}

func (*Control) GetProxy

func (c *Control) GetProxy() (proxyConn conn.Conn, err error)

Remove a proxy connection from the pool and return it If not proxy connections are in the pool, request one and wait until it is available Returns an error if we couldn't get a proxy because it took too long or the tunnel is closing

func (*Control) RegisterProxy

func (c *Control) RegisterProxy(conn conn.Conn)

func (*Control) Replaced

func (c *Control) Replaced(replacement *Control)

Called when this control is replaced by another control this can happen if the network drops out and the client reconnects before the old tunnel has lost its heartbeat

type ControlRegistry

type ControlRegistry struct {
	log.Logger
	sync.RWMutex
	// contains filtered or unexported fields
}

ControlRegistry maps a client ID to Control structures

func NewControlRegistry

func NewControlRegistry() *ControlRegistry

func (*ControlRegistry) Add

func (r *ControlRegistry) Add(clientId string, ctl *Control) (oldCtl *Control)

func (*ControlRegistry) Del

func (r *ControlRegistry) Del(clientId string) error

func (*ControlRegistry) Get

func (r *ControlRegistry) Get(clientId string) *Control

type Db

type Db struct {
	// contains filtered or unexported fields
}

func (*Db) LoadAll

func (db *Db) LoadAll(mgr *ConfigMgr) error

func (*Db) Save

func (db *Db) Save(mgr *ConfigMgr, uc *UserConfig) error

type DbProvider

type DbProvider interface {
	Save(mgr *ConfigMgr, config *UserConfig) error
	LoadAll(mgr *ConfigMgr) error
}

type KeenIoMetric

type KeenIoMetric struct {
	Collection string
	Event      interface{}
}

type KeenIoMetrics

type KeenIoMetrics struct {
	log.Logger
	ApiKey       string
	ProjectToken string
	HttpClient   http.Client
	Metrics      chan *KeenIoMetric
}

func NewKeenIoMetrics

func NewKeenIoMetrics(batchInterval time.Duration) *KeenIoMetrics

func (*KeenIoMetrics) AuthedRequest

func (k *KeenIoMetrics) AuthedRequest(method, path string, body *bytes.Reader) (resp *http.Response, err error)

func (*KeenIoMetrics) CloseConnection

func (k *KeenIoMetrics) CloseConnection(t *Tunnel, c conn.Conn, start time.Time, in, out int64)

func (*KeenIoMetrics) CloseTunnel

func (k *KeenIoMetrics) CloseTunnel(t *Tunnel)

func (*KeenIoMetrics) OpenConnection

func (k *KeenIoMetrics) OpenConnection(t *Tunnel, c conn.Conn)

func (*KeenIoMetrics) OpenTunnel

func (k *KeenIoMetrics) OpenTunnel(t *Tunnel)

type KeenStruct

type KeenStruct struct {
	Timestamp string `json:"timestamp"`
}

type LocalMetrics

type LocalMetrics struct {
	log.Logger
	// contains filtered or unexported fields
}

func NewLocalMetrics

func NewLocalMetrics(reportInterval time.Duration) *LocalMetrics

func (*LocalMetrics) CloseConnection

func (m *LocalMetrics) CloseConnection(t *Tunnel, c conn.Conn, start time.Time, bytesIn, bytesOut int64)

func (*LocalMetrics) CloseTunnel

func (m *LocalMetrics) CloseTunnel(t *Tunnel)

func (*LocalMetrics) OpenConnection

func (m *LocalMetrics) OpenConnection(t *Tunnel, c conn.Conn)

func (*LocalMetrics) OpenTunnel

func (m *LocalMetrics) OpenTunnel(t *Tunnel)

func (*LocalMetrics) Report

func (m *LocalMetrics) Report()

type Metrics

type Metrics interface {
	log.Logger
	OpenConnection(*Tunnel, conn.Conn)
	CloseConnection(*Tunnel, conn.Conn, time.Time, int64, int64)
	OpenTunnel(*Tunnel)
	CloseTunnel(*Tunnel)
}

type Options

type Options struct {
	// contains filtered or unexported fields
}

type Tunnel

type Tunnel struct {

	// logger
	log.Logger
	// contains filtered or unexported fields
}

*

  • Tunnel: A control connection, metadata and proxy connections which
  • route public traffic to a firewalled endpoint.

func NewTunnel

func NewTunnel(m *msg.ReqTunnel, ctl *Control) (t *Tunnel, err error)

Create a new tunnel from a registration message received on a control channel

func (*Tunnel) HandlePublicConnection

func (t *Tunnel) HandlePublicConnection(publicConn conn.Conn)

func (*Tunnel) Id

func (t *Tunnel) Id() string

func (*Tunnel) Shutdown

func (t *Tunnel) Shutdown()

type TunnelRegistry

type TunnelRegistry struct {
	log.Logger
	sync.RWMutex
	// contains filtered or unexported fields
}

TunnelRegistry maps a tunnel URL to Tunnel structures

func NewTunnelRegistry

func NewTunnelRegistry(cacheSize uint64, cacheFile string) *TunnelRegistry

func (*TunnelRegistry) Del

func (r *TunnelRegistry) Del(url string)

func (*TunnelRegistry) Get

func (r *TunnelRegistry) Get(url string) *Tunnel

func (*TunnelRegistry) GetCachedRegistration

func (r *TunnelRegistry) GetCachedRegistration(t *Tunnel) (url string)

func (*TunnelRegistry) Register

func (r *TunnelRegistry) Register(url string, t *Tunnel) error

Register a tunnel with a specific url, returns an error if a tunnel is already registered at that url

func (*TunnelRegistry) RegisterAndCache

func (r *TunnelRegistry) RegisterAndCache(url string, t *Tunnel) (err error)

func (*TunnelRegistry) RegisterRepeat

func (r *TunnelRegistry) RegisterRepeat(urlFn func() string, t *Tunnel) (string, error)

Register a tunnel with the following process: Consult the affinity cache to try to assign a previously used tunnel url if possible Generate new urls repeatedly with the urlFn and register until one is available.

func (*TunnelRegistry) SaveCacheThread

func (r *TunnelRegistry) SaveCacheThread(path string, interval time.Duration)

Spawns a goroutine the periodically saves the cache to a file.

type UserConfig

type UserConfig struct {
	UserId string   `json:"userId"`
	AuthId string   `json:"authId"`
	Dns    []string `json:"dns"`
}

type UserInfo

type UserInfo struct {
	Uc *UserConfig

	TransPerDay int32
	TransAll    int32
}

func CheckForLogin

func CheckForLogin(authMsg *msg.Auth) *UserInfo

func GetByDns

func GetByDns(dns string) *UserInfo

func GetUserInfo

func GetUserInfo(id string) *UserInfo

func (*UserInfo) CheckDns

func (ui *UserInfo) CheckDns(dns string) bool

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL