···1-package main
2-3-import (
4- "fmt"
5-)
6-7-func formatKeyData(repoguardPath, gitDir, logPath, endpoint string, data []map[string]interface{}) string {
8- var result string
9- for _, entry := range data {
10- result += fmt.Sprintf(
11- `command="%s -base-dir %s -user %s -log-path %s -internal-api %s",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty %s`+"\n",
12- repoguardPath, gitDir, entry["did"], logPath, endpoint, entry["key"])
13- }
14- return result
15-}
···000000000000000
-46
cmd/keyfetch/main.go
···1-// This program must be configured to run as the sshd AuthorizedKeysCommand.
2-// The format looks something like this:
3-// Match User git
4-// AuthorizedKeysCommand /keyfetch -internal-api http://localhost:5444 -repoguard-path /home/git/repoguard
5-// AuthorizedKeysCommandUser nobody
6-//
7-// The command and its parent directories must be owned by root and set to 0755. Hence, the ideal location for this is
8-// somewhere already owned by root so you don't have to mess with directory perms.
9-10-package main
11-12-import (
13- "encoding/json"
14- "flag"
15- "fmt"
16- "io"
17- "log"
18- "net/http"
19-)
20-21-func main() {
22- endpoint := flag.String("internal-api", "http://localhost:5444", "Internal API endpoint")
23- repoguardPath := flag.String("repoguard-path", "/home/git/repoguard", "Path to the repoguard binary")
24- gitDir := flag.String("git-dir", "/home/git", "Path to the git directory")
25- logPath := flag.String("log-path", "/home/git/log", "Path to log file")
26- flag.Parse()
27-28- resp, err := http.Get(*endpoint + "/keys")
29- if err != nil {
30- log.Fatalf("error fetching keys: %v", err)
31- }
32- defer resp.Body.Close()
33-34- body, err := io.ReadAll(resp.Body)
35- if err != nil {
36- log.Fatalf("error reading response body: %v", err)
37- }
38-39- var data []map[string]interface{}
40- err = json.Unmarshal(body, &data)
41- if err != nil {
42- log.Fatalf("error unmarshalling response body: %v", err)
43- }
44-45- fmt.Print(formatKeyData(*repoguardPath, *gitDir, *logPath, *endpoint, data))
46-}