/
main.go
82 lines (72 loc) · 2.29 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Copyright (C) 2014 JT Olds
// See LICENSE for copying information
package main
import (
"flag"
"io/ioutil"
"net/http"
"github.com/jtolds/gitserve/repo"
"github.com/spacemonkeygo/flagfile"
"github.com/spacemonkeygo/spacelog"
"github.com/spacemonkeygo/spacelog/setup"
"golang.org/x/crypto/ssh"
"gopkg.in/spacemonkeygo/monkit.v2"
"gopkg.in/spacemonkeygo/monkit.v2/environment"
"gopkg.in/spacemonkeygo/monkit.v2/present"
)
var (
addr = flag.String("addr", ":7022", "address to listen on for ssh")
privateKey = flag.String("private_key", "",
"path to server private key. If not provided, one will be generated")
shellError = flag.String("shell_error",
"Sorry, no interactive shell available.",
"the message to display to interactive users")
motd = flag.String("motd",
"Welcome to the gitserve git-hostd code hosting tool!\r\n"+
"Please see https://github.com/jtolds/gitserve for more info.\r\n",
"the motd banner")
repoBase = flag.String("repo_base", "",
"If set, the folder to serve git repos out of. Ignored if --repo is set.")
repoPath = flag.String("repo", "",
"If set, the repo to serve. Overrides --repo_base. If neither "+
"--repo_base or --repo are set, the current directory is used")
authorizedKeys = flag.String("authorized_keys", "",
"the authorized key file")
debugAddr = flag.String("debug_addr", "127.0.0.1:0",
"address to listen on for debug http endpoints")
logger = spacelog.GetLogger()
mon = monkit.Package()
)
func main() {
flagfile.Load()
setup.MustSetup("git-hostd")
environment.Register(monkit.Default)
go http.ListenAndServe(*debugAddr, present.HTTP(monkit.Default))
rh := &repo.RepoHosting{
ShellError: *shellError + "\r\n",
MOTD: *motd + "\r\n",
RepoBase: *repoBase,
Repo: *repoPath}
if *privateKey != "" {
logger.Noticef("Using %#v as server's private key", *privateKey)
private_bytes, err := ioutil.ReadFile(*privateKey)
if err != nil {
panic(err)
}
rh.PrivateKey, err = ssh.ParsePrivateKey(private_bytes)
if err != nil {
panic(err)
}
}
if *authorizedKeys != "" {
authorized_bytes, err := ioutil.ReadFile(*authorizedKeys)
if err != nil {
panic(err)
}
rh.AuthorizedKeys, err = repo.LoadAuthorizedKeys(authorized_bytes)
if err != nil {
panic(err)
}
}
panic(rh.ListenAndServe("tcp", *addr))
}