Compare commits
	
		
			2 Commits
		
	
	
		
			6d6ed30227
			...
			792dfdba78
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 792dfdba78 | |||
| 4f7a8f0b04 | 
@@ -22,8 +22,6 @@
 | 
				
			|||||||
package backends
 | 
					package backends
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"strings"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/zclconf/go-cty/cty"
 | 
						"github.com/zclconf/go-cty/cty"
 | 
				
			||||||
	"go.elara.ws/seashell/internal/config"
 | 
						"go.elara.ws/seashell/internal/config"
 | 
				
			||||||
	"go.elara.ws/seashell/internal/router"
 | 
						"go.elara.ws/seashell/internal/router"
 | 
				
			||||||
@@ -84,17 +82,6 @@ func ctyObjToStringMap(o *cty.Value) map[string]string {
 | 
				
			|||||||
	return out
 | 
						return out
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// sshGetenv gets an environment variable from the SSH session
 | 
					 | 
				
			||||||
func sshGetenv(env []string, key string) string {
 | 
					 | 
				
			||||||
	for _, kv := range env {
 | 
					 | 
				
			||||||
		before, after, ok := strings.Cut(kv, "=")
 | 
					 | 
				
			||||||
		if ok && before == key {
 | 
					 | 
				
			||||||
			return after
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return ""
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// valueOr returns the value that v points to
 | 
					// valueOr returns the value that v points to
 | 
				
			||||||
// or a default value if v is nil.
 | 
					// or a default value if v is nil.
 | 
				
			||||||
func valueOr[T any](v *T, or T) T {
 | 
					func valueOr[T any](v *T, or T) T {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,6 +41,7 @@ type dockerSettings struct {
 | 
				
			|||||||
	Command    *cty.Value `cty:"command"`
 | 
						Command    *cty.Value `cty:"command"`
 | 
				
			||||||
	Privileged *bool      `cty:"privileged"`
 | 
						Privileged *bool      `cty:"privileged"`
 | 
				
			||||||
	User       *string    `cty:"user"`
 | 
						User       *string    `cty:"user"`
 | 
				
			||||||
 | 
						UserMap    *cty.Value `cty:"user_map"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Docker is the docker backend. It returns a handler that connects
 | 
					// Docker is the docker backend. It returns a handler that connects
 | 
				
			||||||
@@ -63,6 +64,17 @@ func Docker(route config.Route) router.Handler {
 | 
				
			|||||||
			return errors.New("this route only accepts pty sessions (try adding the -t flag)")
 | 
								return errors.New("this route only accepts pty sessions (try adding the -t flag)")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							if opts.User == nil {
 | 
				
			||||||
 | 
								userMap := ctyObjToStringMap(opts.UserMap)
 | 
				
			||||||
 | 
								user, _ := sshctx.GetUser(sess.Context())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if muser, ok := userMap[user.Name]; ok {
 | 
				
			||||||
 | 
									opts.User = &muser
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									opts.User = &user.Name
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		c, err := client.NewClientWithOpts(
 | 
							c, err := client.NewClientWithOpts(
 | 
				
			||||||
			client.WithHostFromEnv(),
 | 
								client.WithHostFromEnv(),
 | 
				
			||||||
			client.WithVersionFromEnv(),
 | 
								client.WithVersionFromEnv(),
 | 
				
			||||||
@@ -72,11 +84,6 @@ func Docker(route config.Route) router.Handler {
 | 
				
			|||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if opts.User == nil {
 | 
					 | 
				
			||||||
			envUser := sshGetenv(sess.Environ(), "DOCKER_USER")
 | 
					 | 
				
			||||||
			opts.User = &envUser
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		cmd := sess.Command()
 | 
							cmd := sess.Command()
 | 
				
			||||||
		if len(cmd) == 0 {
 | 
							if len(cmd) == 0 {
 | 
				
			||||||
			cmd = ctyTupleToStrings(opts.Command)
 | 
								cmd = ctyTupleToStrings(opts.Command)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,7 +44,7 @@ type proxySettings struct {
 | 
				
			|||||||
	Server      string     `cty:"server"`
 | 
						Server      string     `cty:"server"`
 | 
				
			||||||
	User        *string    `cty:"user"`
 | 
						User        *string    `cty:"user"`
 | 
				
			||||||
	PrivkeyPath *string    `cty:"privkey"`
 | 
						PrivkeyPath *string    `cty:"privkey"`
 | 
				
			||||||
	UserMap     *cty.Value `cty:"userMap"`
 | 
						UserMap     *cty.Value `cty:"user_map"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Proxy is the proxy backend. It returns a handler that establishes a proxy
 | 
					// Proxy is the proxy backend. It returns a handler that establishes a proxy
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user