This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
Warranty = `This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
)
var (
- root = flag.String("root", "./packages", "Path to packages directory")
- bind = flag.String("bind", "[::]:8080", "Address to bind to")
- simpleURLPath = flag.String("simple", "/simple/", "/simple/ URL path")
- refreshURLPath = flag.String("refresh", "/refresh/", "Auto-refreshing URL path")
- pypiURL = flag.String("pypi", "https://pypi.org/simple/", "Upstream PyPI URL")
- auth = flag.String("auth", "spam:foo", "login:password,...")
- fsck = flag.Bool("fsck", false, "Check integrity of all packages")
- version = flag.Bool("version", false, "Print version information")
- warranty = flag.Bool("warranty", false, "Print warranty information")
+ root = flag.String("root", "./packages", "Path to packages directory")
+ bind = flag.String("bind", "[::]:8080", "Address to bind to")
+ norefreshURLPath = flag.String("norefresh", "/norefresh/", "Non-refreshing URL path")
+ refreshURLPath = flag.String("refresh", "/simple/", "Auto-refreshing URL path")
+ pypiURL = flag.String("pypi", "https://pypi.org/simple/", "Upstream PyPI URL")
+ auth = flag.String("auth", "passwd", "Path to file with login:password lines")
+ fsck = flag.Bool("fsck", false, "Check integrity of all packages")
+ version = flag.Bool("version", false, "Print version information")
+ warranty = flag.Bool("warranty", false, "Print warranty information")
pkgPyPI = regexp.MustCompile(`^.*<a href="([^"]+)"[^>]*>(.+)</a><br/>.*$`)
Version string = "UNKNOWN"
if file.Mode().IsDir() {
w.Write([]byte(fmt.Sprintf(
HTMLElement,
- *simpleURLPath+file.Name()+"/",
+ *refreshURLPath+file.Name()+"/",
file.Name(),
)))
}
w.Write([]byte(fmt.Sprintf(
HTMLElement,
strings.Join([]string{
- *simpleURLPath, dir, "/",
+ *refreshURLPath, dir, "/",
filenameClean, "#", SHA256Prefix, string(data),
}, ""),
filenameClean,
if r.Method == "GET" {
var path string
var autorefresh bool
- if strings.HasPrefix(r.URL.Path, *simpleURLPath) {
- path = strings.TrimPrefix(r.URL.Path, *simpleURLPath)
+ if strings.HasPrefix(r.URL.Path, *norefreshURLPath) {
+ path = strings.TrimPrefix(r.URL.Path, *norefreshURLPath)
autorefresh = false
} else {
path = strings.TrimPrefix(r.URL.Path, *refreshURLPath)
}
return
}
- for _, credentials := range strings.Split(*auth, ",") {
+ auth, err := ioutil.ReadFile(*auth)
+ if err != nil {
+ log.Fatal(err)
+ }
+ for _, credentials := range strings.Split(strings.TrimRight(string(auth), "\n"), "\n") {
splitted := strings.Split(credentials, ":")
if len(splitted) != 2 {
log.Fatal("Wrong auth format")
passwords[splitted[0]] = splitted[1]
}
log.Println("root:", *root, "bind:", *bind)
- http.HandleFunc(*simpleURLPath, handler)
+ http.HandleFunc(*norefreshURLPath, handler)
http.HandleFunc(*refreshURLPath, handler)
log.Fatal(http.ListenAndServe(*bind, nil))
}