···11-package main
22-33-import (
44- "fmt"
55-)
66-77-func formatKeyData(repoguardPath, gitDir, logPath, endpoint string, data []map[string]interface{}) string {
88- var result string
99- for _, entry := range data {
1010- result += fmt.Sprintf(
1111- `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",
1212- repoguardPath, gitDir, entry["did"], logPath, endpoint, entry["key"])
1313- }
1414- return result
1515-}
-46
cmd/keyfetch/main.go
···11-// This program must be configured to run as the sshd AuthorizedKeysCommand.
22-// The format looks something like this:
33-// Match User git
44-// AuthorizedKeysCommand /keyfetch -internal-api http://localhost:5444 -repoguard-path /home/git/repoguard
55-// AuthorizedKeysCommandUser nobody
66-//
77-// The command and its parent directories must be owned by root and set to 0755. Hence, the ideal location for this is
88-// somewhere already owned by root so you don't have to mess with directory perms.
99-1010-package main
1111-1212-import (
1313- "encoding/json"
1414- "flag"
1515- "fmt"
1616- "io"
1717- "log"
1818- "net/http"
1919-)
2020-2121-func main() {
2222- endpoint := flag.String("internal-api", "http://localhost:5444", "Internal API endpoint")
2323- repoguardPath := flag.String("repoguard-path", "/home/git/repoguard", "Path to the repoguard binary")
2424- gitDir := flag.String("git-dir", "/home/git", "Path to the git directory")
2525- logPath := flag.String("log-path", "/home/git/log", "Path to log file")
2626- flag.Parse()
2727-2828- resp, err := http.Get(*endpoint + "/keys")
2929- if err != nil {
3030- log.Fatalf("error fetching keys: %v", err)
3131- }
3232- defer resp.Body.Close()
3333-3434- body, err := io.ReadAll(resp.Body)
3535- if err != nil {
3636- log.Fatalf("error reading response body: %v", err)
3737- }
3838-3939- var data []map[string]interface{}
4040- err = json.Unmarshal(body, &data)
4141- if err != nil {
4242- log.Fatalf("error unmarshalling response body: %v", err)
4343- }
4444-4545- fmt.Print(formatKeyData(*repoguardPath, *gitDir, *logPath, *endpoint, data))
4646-}