6d7752b4b381658ff5f497054532047d1ebea0a2

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

Import auth keys from env vars

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)