mirror of
https://github.com/gravitational/teleport
synced 2024-10-22 02:03:24 +00:00
58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package web
|
|
|
|
import (
|
|
"github.com/gravitational/teleport/lib/auth"
|
|
"github.com/gravitational/teleport/lib/reversetunnel"
|
|
"github.com/gravitational/teleport/lib/sshutils"
|
|
|
|
"github.com/gravitational/teleport/Godeps/_workspace/src/github.com/gravitational/log"
|
|
)
|
|
|
|
type TunAuth struct {
|
|
AuthHandler
|
|
siteName string
|
|
srv reversetunnel.Server
|
|
}
|
|
|
|
func NewTunAuth(auth AuthHandler, srv reversetunnel.Server, siteName string) (*TunAuth, error) {
|
|
t := &TunAuth{srv: srv, siteName: siteName}
|
|
t.AuthHandler = auth
|
|
return t, nil
|
|
}
|
|
|
|
func (t *TunAuth) ValidateSession(user, sid string) (Context, error) {
|
|
lctx, err := t.AuthHandler.ValidateSession(user, sid)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
site, err := t.srv.GetSite(t.siteName)
|
|
if err != nil {
|
|
log.Infof("failed to find site: %v %v", t.siteName, err)
|
|
return nil, err
|
|
}
|
|
tctx := &TunContext{site: site}
|
|
tctx.Context = lctx
|
|
return tctx, nil
|
|
}
|
|
|
|
type TunContext struct {
|
|
Context
|
|
site reversetunnel.RemoteSite
|
|
}
|
|
|
|
func (c *TunContext) ConnectUpstream(addr string) (*sshutils.Upstream, error) {
|
|
methods, err := c.GetAuthMethods()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
client, err := c.site.ConnectToServer(addr, c.GetUser(), methods)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return sshutils.NewUpstream(client)
|
|
}
|
|
|
|
func (c *TunContext) GetClient() auth.ClientI {
|
|
return c.site.GetClient()
|
|
}
|