···11-package main22-33-import (44- "fmt"55-)66-77-func formatKeyData(repoguardPath, gitDir, logPath, endpoint string, data []map[string]interface{}) string {88- var result string99- 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 result1515-}
-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 git44-// AuthorizedKeysCommand /keyfetch -internal-api http://localhost:5444 -repoguard-path /home/git/repoguard55-// AuthorizedKeysCommandUser nobody66-//77-// The command and its parent directories must be owned by root and set to 0755. Hence, the ideal location for this is88-// somewhere already owned by root so you don't have to mess with directory perms.99-1010-package main1111-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-}