initial import
This commit is contained in:
parent
91c50a294c
commit
45cf18ff46
3 changed files with 97 additions and 7 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
*swp
|
91
main.go
91
main.go
|
@ -1,4 +1,93 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
func main() {
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// {{{ Package Struct
|
||||||
|
type Package struct {
|
||||||
|
Repo string
|
||||||
|
Path string
|
||||||
|
Packages []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p Package) GetRoutes() (ret []string) {
|
||||||
|
ret = append(ret, p.Path)
|
||||||
|
for _, pkg := range p.Packages {
|
||||||
|
ret = append(ret, p.Path+"/"+pkg)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// }}}
|
||||||
|
|
||||||
|
// {{{ JSON Functions
|
||||||
|
|
||||||
|
func writePage(w http.ResponseWriter, data string, code int) error {
|
||||||
|
w.Header().Set("Content-Type", "text/html; charset=UTF-8")
|
||||||
|
w.WriteHeader(code)
|
||||||
|
w.Write([]byte(data))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func writePageError(w http.ResponseWriter, message string, code int) error {
|
||||||
|
return writePage(w, message, code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func writePageGo(w http.ResponseWriter, path string, pkg *Package, code int) error {
|
||||||
|
return writePage(w, fmt.Sprintf(`<!DOCTYPE html><html>
|
||||||
|
<head><meta charset="utf-8"><title>%s</title><meta name="go-import" content="%s %s %s"></head>
|
||||||
|
<body>%s</body>
|
||||||
|
</html>`, "Package!", path, "git", pkg.Repo, "Package!"), code)
|
||||||
|
}
|
||||||
|
|
||||||
|
// }}}
|
||||||
|
|
||||||
|
// {{{ Config Functions
|
||||||
|
|
||||||
|
func loadConfig() (ret []Package, err error) {
|
||||||
|
content, err := ioutil.ReadFile("packages.json")
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(content, &ret)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadRoutes(packages []Package) (routes map[string]*Package) {
|
||||||
|
routes = map[string]*Package{}
|
||||||
|
|
||||||
|
for _, pkg := range packages {
|
||||||
|
for _, route := range pkg.GetRoutes() {
|
||||||
|
routes[route] = &pkg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// }}}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
mux := http.NewServeMux()
|
||||||
|
packages, err := loadConfig()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Errorf("%s\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
routes := loadRoutes(packages)
|
||||||
|
|
||||||
|
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
|
||||||
|
route := req.URL.Path
|
||||||
|
if val, ok := routes[route]; ok {
|
||||||
|
writePageGo(w, req.Host+route, val, 200)
|
||||||
|
} else {
|
||||||
|
writePageError(w, ":(", 401)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
http.ListenAndServe(":8000", mux)
|
||||||
|
}
|
||||||
|
|
||||||
|
// vim: foldmethod=marker
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
[
|
[
|
||||||
{"repo": "git://github.com/paultag/go-debian",
|
{"Repo": "git://github.com/paultag/go-debian",
|
||||||
"path": "/go/debian",
|
"Path": "/go/debian",
|
||||||
"packages": ["control", "dependency", "version"]},
|
"Packages": ["control", "dependency", "version"]},
|
||||||
|
|
||||||
{"repo": "git://github.com/paultag/go-topsort",
|
{"Repo": "git://github.com/paultag/go-topsort",
|
||||||
"path": "/go/topsort",
|
"Path": "/go/topsort",
|
||||||
"packages": []}
|
"Packages": []}
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue