add tcp daemon listener with token auth
This commit is contained in:
@@ -56,6 +56,11 @@ func main() {
|
||||
runDaemonCommand()
|
||||
return
|
||||
}
|
||||
if len(os.Args) >= 2 && os.Args[1] == "connect" {
|
||||
os.Args = append(os.Args[:1], os.Args[2:]...)
|
||||
runConnectCommand()
|
||||
return
|
||||
}
|
||||
if len(os.Args) >= 2 && os.Args[1] == "ls" {
|
||||
runDaemonList()
|
||||
return
|
||||
@@ -233,7 +238,10 @@ func runDaemonCommand() {
|
||||
runDaemonList()
|
||||
return
|
||||
}
|
||||
var projectDir = flag.String("project", "", "initial project directory (default $PWD)")
|
||||
var (
|
||||
projectDir = flag.String("project", "", "initial project directory (default $PWD)")
|
||||
listenAddr = flag.String("listen", "", "optional TCP listen address for remote human clients (for example 127.0.0.1:2488, 0.0.0.0:2488, or 2488)")
|
||||
)
|
||||
flag.Parse()
|
||||
cwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
@@ -244,11 +252,69 @@ func runDaemonCommand() {
|
||||
} else if flag.NArg() > 0 {
|
||||
cwd = flag.Arg(0)
|
||||
}
|
||||
if err := app.RunDaemon(context.Background(), app.DaemonOptions{ProjectDir: cwd}); err != nil {
|
||||
if err := app.RunDaemon(context.Background(), app.DaemonOptions{ProjectDir: cwd, ListenAddr: *listenAddr}); err != nil {
|
||||
die("daemon: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func runConnectCommand() {
|
||||
var (
|
||||
host = flag.String("host", "", "remote daemon host:port")
|
||||
token = flag.String("token", "", "remote daemon token (default PATTERM_TOKEN or stored token file)")
|
||||
projectDir = flag.String("project", "", "project directory to request on the daemon")
|
||||
)
|
||||
flag.Parse()
|
||||
if *host == "" && flag.NArg() > 0 {
|
||||
*host = flag.Arg(0)
|
||||
}
|
||||
if *host == "" {
|
||||
die("connect: --host HOST:PORT is required")
|
||||
}
|
||||
tok := *token
|
||||
if tok == "" {
|
||||
tok = os.Getenv("PATTERM_TOKEN")
|
||||
}
|
||||
if tok == "" {
|
||||
if stored, err := app.LoadClientToken(); err == nil {
|
||||
tok = stored
|
||||
}
|
||||
}
|
||||
if tok == "" {
|
||||
die("connect: token required via --token, PATTERM_TOKEN, or %s", mustTokenPath())
|
||||
}
|
||||
cwd := *projectDir
|
||||
if cwd == "" {
|
||||
var err error
|
||||
cwd, err = os.Getwd()
|
||||
if err != nil {
|
||||
die("getwd: %v", err)
|
||||
}
|
||||
}
|
||||
tr, err := app.DialTCPTransport(*host)
|
||||
if err != nil {
|
||||
die("connect: %v", err)
|
||||
}
|
||||
defer tr.Close()
|
||||
if err := app.RunAttachedClient(context.Background(), app.ClientOptions{
|
||||
ProjectDir: cwd,
|
||||
Transport: tr,
|
||||
Stdin: os.Stdin,
|
||||
Stdout: os.Stdout,
|
||||
RawMode: true,
|
||||
Token: tok,
|
||||
}); err != nil {
|
||||
die("connect: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func mustTokenPath() string {
|
||||
path, err := app.ClientTokenPath()
|
||||
if err != nil {
|
||||
return "$XDG_DATA_HOME/patterm/clients/token"
|
||||
}
|
||||
return path
|
||||
}
|
||||
|
||||
func runDaemonList() {
|
||||
projects, err := daemonRequest(protocol.Frame{Type: protocol.FrameList})
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user