Diff
1diff --git a/Dockerfile b/Dockerfile
2index de9075197226fecb0d272217e36e2667315efc2c..dfed51d2242994d08c4d94ac655fd57b4381f24b 100644
3--- a/Dockerfile
4+++ b/Dockerfile
5@@ -11,6 +11,7 @@ VOLUME /smoothie
6
7 # Environment variables
8 ENV SMOOTHIE_KEY_PATH "/smoothie/ssh/smoothie_server_ed25519"
9+ENV SMOOTHIE_REPO_KEYS ""
10 ENV SMOOTHIE_REPO_KEYS_PATH "/smoothie/ssh/smoothie_git_authorized_keys"
11 ENV SMOOTHIE_REPO_PATH "/smoothie/repos"
12
13diff --git a/main.go b/main.go
14index fae768a156c2b39d21e290129740bbc017f19615..1ffd170988ff5f78a0c1df9d8d34cd1412acef41 100644
15--- a/main.go
16+++ b/main.go
17@@ -15,7 +15,8 @@ import (
18 type Config struct {
19 Port int `env:"SMOOTHIE_PORT" default:"23231"`
20 KeyPath string `env:"SMOOTHIE_KEY_PATH" default:".ssh/smoothie_server_ed25519"`
21- RepoAuthPath string `env:"SMOOTHIE_REPO_KEYS_PATH" default:".ssh/smoothie_git_authorized_keys"`
22+ RepoAuth string `env:"SMOOTHIE_REPO_KEYS" default:""`
23+ RepoAuthFile string `env:"SMOOTHIE_REPO_KEYS_PATH" default:".ssh/smoothie_git_authorized_keys"`
24 RepoPath string `env:"SMOOTHIE_REPO_PATH" default:".repos"`
25 }
26
27@@ -29,7 +30,7 @@ func main() {
28 cfg.Port,
29 cfg.KeyPath,
30 bm.Middleware(tui.SessionHandler(cfg.RepoPath, time.Second*5)),
31- gm.Middleware(cfg.RepoPath, cfg.RepoAuthPath),
32+ gm.Middleware(cfg.RepoPath, cfg.RepoAuth, cfg.RepoAuthFile),
33 lm.Middleware(),
34 )
35 if err != nil {
36diff --git a/server/middleware/git/git.go b/server/middleware/git/git.go
37index d098a62bb6a1bd4d68da089fc2a3e2888f96b755..e136528131d5cab68e533f7b2d977b02082cb27d 100644
38--- a/server/middleware/git/git.go
39+++ b/server/middleware/git/git.go
40@@ -8,23 +8,31 @@ import (
41 "os"
42 "os/exec"
43 "smoothie/server/middleware"
44+ "strings"
45
46 "github.com/gliderlabs/ssh"
47 )
48
49-func Middleware(repoDir string, authorizedKeysPath string) middleware.Middleware {
50+func Middleware(repoDir, authorizedKeys, authorizedKeysFile string) middleware.Middleware {
51 authedKeys := make([]ssh.PublicKey, 0)
52- hasAuth, err := fileExists(authorizedKeysPath)
53+ hasAuth, err := fileExists(authorizedKeysFile)
54 if err != nil {
55 log.Fatal(err)
56 }
57- if hasAuth {
58- f, err := os.Open(authorizedKeysPath)
59- if err != nil {
60- log.Fatal(err)
61+ if hasAuth || authorizedKeys != "" {
62+ var scanner *bufio.Scanner
63+ if authorizedKeys == "" {
64+ log.Printf("Importing authorized keys from file: %s", authorizedKeysFile)
65+ f, err := os.Open(authorizedKeysFile)
66+ if err != nil {
67+ log.Fatal(err)
68+ }
69+ defer f.Close()
70+ scanner = bufio.NewScanner(f)
71+ } else {
72+ log.Printf("Importing authorized keys from environment")
73+ scanner = bufio.NewScanner(strings.NewReader(authorizedKeys))
74 }
75- defer f.Close()
76- scanner := bufio.NewScanner(f)
77 for scanner.Scan() {
78 pt := scanner.Text()
79 log.Printf("Adding authorized key: %s", pt)