ff65f14966a733b97a43831e6099a3b2ce2c6271
- Author
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Committer
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Date
Message
Diff
This diff is truncated to protect this page.
1diff --git a/server/middleware/git/git.go b/server/middleware/git/git.go
2index e136528131d5cab68e533f7b2d977b02082cb27d..36bf065b177b4d13d3fe600ca8da86f1aaf574ca 100644
3--- a/server/middleware/git/git.go
4+++ b/server/middleware/git/git.go
5@@ -13,46 +13,14 @@ import (
6 "github.com/gliderlabs/ssh"
7 )
8
9-func Middleware(repoDir, authorizedKeys, authorizedKeysFile string) middleware.Middleware {
10- authedKeys := make([]ssh.PublicKey, 0)
11- hasAuth, err := fileExists(authorizedKeysFile)
12- if err != nil {
13- log.Fatal(err)
14- }
15- if hasAuth || authorizedKeys != "" {
16- var scanner *bufio.Scanner
17- if authorizedKeys == "" {
18- log.Printf("Importing authorized keys from file: %s", authorizedKeysFile)
19- f, err := os.Open(authorizedKeysFile)
20- if err != nil {
21- log.Fatal(err)
22- }
23- defer f.Close()
24- scanner = bufio.NewScanner(f)
25- } else {
26- log.Printf("Importing authorized keys from environment")
27- scanner = bufio.NewScanner(strings.NewReader(authorizedKeys))
28- }
29- for scanner.Scan() {
30- pt := scanner.Text()
31- log.Printf("Adding authorized key: %s", pt)
32- pk, _, _, _, err := ssh.ParseAuthorizedKey([]byte(pt))
33- if err != nil {
34- log.Fatal(err)
35- }
36- authedKeys = append(authedKeys, pk)
37- }
38- if err := scanner.Err(); err != nil {
39- log.Fatal(err)
40- }
41- }
42+func gitMiddleware(repoDir string, authedKeys []ssh.PublicKey) middleware.Middleware {
43 return func(sh ssh.Handler) ssh.Handler {
44 return func(s ssh.Session) {
45 cmd := s.Command()
46 if len(cmd) == 2 {
47 switch cmd[0] {
48 case "git-upload-pack", "git-upload-archive", "git-receive-pack":
49- if hasAuth && cmd[0] == "git-receive-pack" {
50+ if len(authedKeys) > 0 && cmd[0] == "git-receive-pack" {
51 authed := false
52 for _, pk := range authedKeys {
53 if ssh.KeysEqual(pk, s.PublicKey()) {
54@@ -88,6 +56,74 @@ func Middleware(repoDir, authorizedKeys, authorizedKeysFile string) middleware.M
55 }
56 }
57
58+func Middleware(repoDir, authorizedKeys, authorizedKeysFile string) middleware.Middleware {
59+ ak1, err := parseKeysFromString(authorizedKeys)
60+ if err != nil {
61+ log.Fatal(err)
62+ }
63+ ak2, err := parseKeysFromFile(authorizedKeysFile)
64+ if err != nil {
65+ log.Fatal(err)
66+ }
67+ authedKeys := append(ak1, ak2...)
68+ return gitMiddleware(repoDir, authedKeys)
69+}
70+
71+func MiddlewareWithKeys(repoDir, authorizedKeys string) middleware.Middleware {
72+ return Middleware(repoDir, authorizedKeys, "")
73+}
74+
75+func MiddlewareWithKeyPath(repoDir, authorizedKeysFile string) middleware.Middleware {
76+ return Middleware(repoDir, "", authorizedKeysFile)
77+}
78+
79+func parseKeysFromFile(path string) ([]ssh.PublicKey, error) {
80+ authedKeys := make([]ssh.PublicKey, 0)
81+ hasAuth, err := fileExists(path)
82+ if err != nil {
83+ return nil, err
84+ }
85+ if hasAuth {
86+ f, err := os.Open(path)
87+ if err != nil {
88+ log.Fatal(err)
89+ }
90+ defer f.Close()
91+ scanner := bufio.NewScanner(f)
92+ err = addKeys(scanner, &authedKeys)
93+ if err != nil {
94+ return nil, err
95+ }
96+ }
97+ return authedKeys, nil
98+}
99+
100+func parseKeysFromString(keys string) ([]ssh.PublicKey, error) {
101+ authedKeys := make([]ssh.PublicKey, 0)
102+ scanner := bufio.NewScanner(strings.NewReader(keys))
103+ err := addKeys(scanner, &authedKeys)
104+ if err != nil {