Change summary
Dockerfile | 1 +
main.go | 5 +++--
server/middleware/git/git.go | 24 ++++++++++++++++--------
3 files changed, 20 insertions(+), 10 deletions(-)
Detailed changes
@@ -11,6 +11,7 @@ VOLUME /smoothie
# Environment variables
ENV SMOOTHIE_KEY_PATH "/smoothie/ssh/smoothie_server_ed25519"
+ENV SMOOTHIE_REPO_KEYS ""
ENV SMOOTHIE_REPO_KEYS_PATH "/smoothie/ssh/smoothie_git_authorized_keys"
ENV SMOOTHIE_REPO_PATH "/smoothie/repos"
@@ -15,7 +15,8 @@ import (
type Config struct {
Port int `env:"SMOOTHIE_PORT" default:"23231"`
KeyPath string `env:"SMOOTHIE_KEY_PATH" default:".ssh/smoothie_server_ed25519"`
- RepoAuthPath string `env:"SMOOTHIE_REPO_KEYS_PATH" default:".ssh/smoothie_git_authorized_keys"`
+ RepoAuth string `env:"SMOOTHIE_REPO_KEYS" default:""`
+ RepoAuthFile string `env:"SMOOTHIE_REPO_KEYS_PATH" default:".ssh/smoothie_git_authorized_keys"`
RepoPath string `env:"SMOOTHIE_REPO_PATH" default:".repos"`
}
@@ -29,7 +30,7 @@ func main() {
cfg.Port,
cfg.KeyPath,
bm.Middleware(tui.SessionHandler(cfg.RepoPath, time.Second*5)),
- gm.Middleware(cfg.RepoPath, cfg.RepoAuthPath),
+ gm.Middleware(cfg.RepoPath, cfg.RepoAuth, cfg.RepoAuthFile),
lm.Middleware(),
)
if err != nil {
@@ -8,23 +8,31 @@ import (
"os"
"os/exec"
"smoothie/server/middleware"
+ "strings"
"github.com/gliderlabs/ssh"
)
-func Middleware(repoDir string, authorizedKeysPath string) middleware.Middleware {
+func Middleware(repoDir, authorizedKeys, authorizedKeysFile string) middleware.Middleware {
authedKeys := make([]ssh.PublicKey, 0)
- hasAuth, err := fileExists(authorizedKeysPath)
+ hasAuth, err := fileExists(authorizedKeysFile)
if err != nil {
log.Fatal(err)
}
- if hasAuth {
- f, err := os.Open(authorizedKeysPath)
- if err != nil {
- log.Fatal(err)
+ if hasAuth || authorizedKeys != "" {
+ var scanner *bufio.Scanner
+ if authorizedKeys == "" {
+ log.Printf("Importing authorized keys from file: %s", authorizedKeysFile)
+ f, err := os.Open(authorizedKeysFile)
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer f.Close()
+ scanner = bufio.NewScanner(f)
+ } else {
+ log.Printf("Importing authorized keys from environment")
+ scanner = bufio.NewScanner(strings.NewReader(authorizedKeys))
}
- defer f.Close()
- scanner := bufio.NewScanner(f)
for scanner.Scan() {
pt := scanner.Text()
log.Printf("Adding authorized key: %s", pt)