mirror of
https://github.com/openziti/zrok.git
synced 2024-11-28 19:14:07 +01:00
54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
package socks
|
|
|
|
import (
|
|
"github.com/openziti/sdk-golang/ziti"
|
|
"github.com/openziti/sdk-golang/ziti/edge"
|
|
"github.com/openziti/zrok/endpoints"
|
|
"github.com/pkg/errors"
|
|
"time"
|
|
)
|
|
|
|
type BackendConfig struct {
|
|
IdentityPath string
|
|
ShrToken string
|
|
Requests chan *endpoints.Request
|
|
}
|
|
|
|
type Backend struct {
|
|
cfg *BackendConfig
|
|
listener edge.Listener
|
|
server *Server
|
|
}
|
|
|
|
func NewBackend(cfg *BackendConfig) (*Backend, error) {
|
|
options := ziti.ListenOptions{
|
|
ConnectTimeout: 5 * time.Minute,
|
|
WaitForNEstablishedListeners: 1,
|
|
}
|
|
zcfg, err := ziti.NewConfigFromFile(cfg.IdentityPath)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "error loading ziti identity")
|
|
}
|
|
zctx, err := ziti.NewContext(zcfg)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "error loading ziti context")
|
|
}
|
|
listener, err := zctx.ListenWithOptions(cfg.ShrToken, &options)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &Backend{
|
|
cfg: cfg,
|
|
listener: listener,
|
|
server: &Server{Requests: cfg.Requests},
|
|
}, nil
|
|
}
|
|
|
|
func (b *Backend) Run() error {
|
|
if err := b.server.Serve(b.listener); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|