module go.cypherpunks.ru/gocheese/v3
-go 1.12
+go 1.16
require (
go.cypherpunks.ru/recfile v0.4.3
--- /dev/null
+`<!DOCTYPE html>
+<html>
+ <head>
+ <title>{{.Version}}: package {{.PkgName}}</title>
+ </head>
+ <body>
+ <dl>
+ {{with .Info.Name}}<dt>Name</dt><dd>{{.}}</dd>{{end}}
+ {{with .Info.Version}}<dt>Version</dt><dd>{{.}}</dd>{{end}}
+
+ {{with .Info.Platform}}<dt>Platform</dt><dd><ul>
+ {{range .}}<li>{{.}}</li>
+ {{end}}</ul></dd>{{end}}
+
+ {{with .Info.SupportedPlatform}}<dt>SupportedPlatform</dt><dd><ul>
+ {{range .}}<li>{{.}}</li>
+ {{end}}</ul></dd>{{end}}
+
+ <dt>Summary</dt><dd>{{.Info.Summary}}</dd>
+ <dt>Description</dt><dd><pre>
+{{.Info.Description}}
+ </pre></dd>
+
+ {{with .Info.DescriptionContentType}}<dt>DescriptionContentType</dt><dd>{{.}}</dd>{{end}}
+ {{with .Info.Keywords}}<dt>Keywords</dt><dd>{{.}}</dd>{{end}}
+ {{with .Info.HomePage}}<dt>HomePage</dt><dd>{{.}}</dd>{{end}}
+ {{with .Info.Author}}<dt>Author</dt><dd>{{.}}</dd>{{end}}
+ {{with .Info.AuthorEmail}}<dt>AuthorEmail</dt><dd>{{.}}</dd>{{end}}
+ {{with .Info.Maintainer}}<dt>Maintainer</dt><dd>{{.}}</dd>{{end}}
+ {{with .Info.MaintainerEmail}}<dt>MaintainerEmail</dt><dd>{{.}}</dd>{{end}}
+ {{with .Info.License}}<dt>License</dt><dd>{{.}}</dd>{{end}}
+
+ {{with .Info.Classifier}}<dt>Classifier</dt><dd><ul>
+ {{range .}}<li>{{.}}</li>
+ {{end}}</ul></dd>{{end}}
+
+ {{with .Info.RequiresDist}}<dt>RequiresDist</dt><dd><ul>
+ {{range .}}<li>{{.}}</li>
+ {{end}}</ul></dd>{{end}}
+
+ {{with .Info.RequiresPython}}<dt>RequiresPython</dt><dd>{{.}}</dd>{{end}}
+
+ {{with .Info.RequiresExternal}}<dt>RequiresExternal</dt><dd><ul>
+ {{range .}}<li>{{.}}</li>
+ {{end}}</ul></dd>{{end}}
+
+ {{with .Info.ProjectURL}}<dt>ProjectURL</dt><dd><ul>
+ {{range .}}<li>{{.}}</li>
+ {{end}}</ul></dd>{{end}}
+
+ {{with .Info.ProvidesExtra}}<dt>ProvidesExtra</dt><dd><ul>
+ {{range .}}<li>{{.}}</li>
+ {{end}}</ul></dd>{{end}}
+ </dl>
+
+ <h2>Releases</h2>
+ <table border=1>
+ <tr>
+ <th>Filename</th>
+ <th>Version</th>
+ <th>Uploaded</th>
+ <th>Size</th>
+ <th>Digests</th>
+ </tr>
+ {{range .Releases}}{{if .Size}}
+ <tr>
+ <td>{{.Filename}}</th>
+ <td>{{.Version}}</th>
+ <td>{{.UploadTimeISO8601}}</th>
+ <td>{{.Size}}</th>
+ <td><ul>{{range $a, $d := .Digests}}
+ <li>{{$a}}: <tt>{{$d}}</tt></li>
+ {{end}}</ul></td>
+ </tr>{{end}}{{end}}
+ </table>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>{{.Version}}: packages</title>
+ </head>
+ <body>
+ <ul>{{range .Packages}}
+ <li><a href="/hr/{{.}}/">{{.}}</a></li>
+{{- end}}
+ </ul>
+ </body>
+</html>
import (
"bytes"
+ _ "embed"
"html/template"
"io/ioutil"
"log"
)
var (
- HRRootTmpl = template.Must(template.New("hr-root").Parse(`<!DOCTYPE html>
-<html>
- <head>
- <title>{{.Version}}: packages</title>
- </head>
- <body>
- <ul>{{range .Packages}}
- <li><a href="/hr/{{.}}/">{{.}}</a></li>
-{{- end}}
- </ul>
- </body>
-</html>
-`))
- HRPkgTmpl = template.Must(template.New("hr-pkg").Parse(`<!DOCTYPE html>
-<html>
- <head>
- <title>{{.Version}}: package {{.PkgName}}</title>
- </head>
- <body>
- <dl>
- {{with .Info.Name}}<dt>Name</dt><dd>{{.}}</dd>{{end}}
- {{with .Info.Version}}<dt>Version</dt><dd>{{.}}</dd>{{end}}
+ //go:embed hr-root.tmpl
+ HRRootTmplRaw string
+ HRRootTmpl = template.Must(template.New("hr-root").Parse(HRRootTmplRaw))
- {{with .Info.Platform}}<dt>Platform</dt><dd><ul>
- {{range .}}<li>{{.}}</li>
- {{end}}</ul></dd>{{end}}
-
- {{with .Info.SupportedPlatform}}<dt>SupportedPlatform</dt><dd><ul>
- {{range .}}<li>{{.}}</li>
- {{end}}</ul></dd>{{end}}
-
- <dt>Summary</dt><dd>{{.Info.Summary}}</dd>
- <dt>Description</dt><dd><pre>
-{{.Info.Description}}
- </pre></dd>
-
- {{with .Info.DescriptionContentType}}<dt>DescriptionContentType</dt><dd>{{.}}</dd>{{end}}
- {{with .Info.Keywords}}<dt>Keywords</dt><dd>{{.}}</dd>{{end}}
- {{with .Info.HomePage}}<dt>HomePage</dt><dd>{{.}}</dd>{{end}}
- {{with .Info.Author}}<dt>Author</dt><dd>{{.}}</dd>{{end}}
- {{with .Info.AuthorEmail}}<dt>AuthorEmail</dt><dd>{{.}}</dd>{{end}}
- {{with .Info.Maintainer}}<dt>Maintainer</dt><dd>{{.}}</dd>{{end}}
- {{with .Info.MaintainerEmail}}<dt>MaintainerEmail</dt><dd>{{.}}</dd>{{end}}
- {{with .Info.License}}<dt>License</dt><dd>{{.}}</dd>{{end}}
-
- {{with .Info.Classifier}}<dt>Classifier</dt><dd><ul>
- {{range .}}<li>{{.}}</li>
- {{end}}</ul></dd>{{end}}
-
- {{with .Info.RequiresDist}}<dt>RequiresDist</dt><dd><ul>
- {{range .}}<li>{{.}}</li>
- {{end}}</ul></dd>{{end}}
-
- {{with .Info.RequiresPython}}<dt>RequiresPython</dt><dd>{{.}}</dd>{{end}}
-
- {{with .Info.RequiresExternal}}<dt>RequiresExternal</dt><dd><ul>
- {{range .}}<li>{{.}}</li>
- {{end}}</ul></dd>{{end}}
-
- {{with .Info.ProjectURL}}<dt>ProjectURL</dt><dd><ul>
- {{range .}}<li>{{.}}</li>
- {{end}}</ul></dd>{{end}}
-
- {{with .Info.ProvidesExtra}}<dt>ProvidesExtra</dt><dd><ul>
- {{range .}}<li>{{.}}</li>
- {{end}}</ul></dd>{{end}}
- </dl>
-
- <h2>Releases</h2>
- <table border=1>
- <tr>
- <th>Filename</th>
- <th>Version</th>
- <th>Uploaded</th>
- <th>Size</th>
- <th>Digests</th>
- </tr>
- {{range .Releases}}{{if .Size}}
- <tr>
- <td>{{.Filename}}</th>
- <td>{{.Version}}</th>
- <td>{{.UploadTimeISO8601}}</th>
- <td>{{.Size}}</th>
- <td><ul>{{range $a, $d := .Digests}}
- <li>{{$a}}: <tt>{{$d}}</tt></li>
- {{end}}</ul></td>
- </tr>{{end}}{{end}}
- </table>
- </body>
-</html>
-`))
+ //go:embed hr-pkg.tmpl
+ HRPkgTmplRaw string
+ HRPkgTmpl = template.Must(template.New("hr-pkg").Parse(HRPkgTmplRaw))
)
func serveHRRoot(w http.ResponseWriter, r *http.Request) {
import (
"bytes"
+ _ "embed"
"encoding/hex"
"errors"
"fmt"
// https://warehouse.pypa.io/api-reference/legacy.html
var (
- HTMLRootTmpl = template.Must(template.New("root").Parse(`<!DOCTYPE html>
-<html>
- <head>
- <meta name="pypi:repository-version" content="1.0">
- <title>Simple index</title>
- </head>
- <body>{{$Refresh := .RefreshURLPath}}{{range .Packages}}
- <a href="{{$Refresh}}{{.}}/">{{.}}</a><br/>
-{{- end}}
- </body>
-</html>
-`))
- HTMLReleasesTmpl = template.Must(template.New("list").Parse(`<!DOCTYPE html>
-<html>
- <head>
- <meta name="pypi:repository-version" content="1.0">
- <title>Links for {{.PkgName}}</title>
- </head>
- <body>{{$Refresh := .RefreshURLPath}}{{$PkgName := .PkgName}}{{range .Releases}}
- <a href="{{$Refresh}}{{$PkgName}}/{{.Filename -}}
- #{{range $a, $d := .Digests}}{{$a}}={{$d}}{{end -}}
- {{with .HasSig}} data-gpg-sig=true{{end}}">{{.Filename}}</a><br/>
-{{- end}}
- </body>
-</html>
-`))
- KnownExts = []string{".tar.bz2", ".tar.gz", ".whl", ".zip", ".egg",
+ //go:embed root.tmpl
+ HTMLRootTmplRaw string
+ HTMLRootTmpl = template.Must(template.New("root").Parse(HTMLRootTmplRaw))
+
+ //go:embed list.tmpl
+ HTMLReleasesTmplRaw string
+ HTMLReleasesTmpl = template.Must(template.New("list").Parse(HTMLReleasesTmplRaw))
+ KnownExts = []string{".tar.bz2", ".tar.gz", ".whl", ".zip", ".egg",
".exe", ".dmg", ".msi", ".rpm", ".deb", ".tgz"}
)
--- /dev/null
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta name="pypi:repository-version" content="1.0">
+ <title>Links for {{.PkgName}}</title>
+ </head>
+ <body>{{$Refresh := .RefreshURLPath}}{{$PkgName := .PkgName}}{{range .Releases}}
+ <a href="{{$Refresh}}{{$PkgName}}/{{.Filename -}}
+ #{{range $a, $d := .Digests}}{{$a}}={{$d}}{{end -}}
+ {{with .HasSig}} data-gpg-sig=true{{end}}">{{.Filename}}</a><br/>
+{{- end}}
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta name="pypi:repository-version" content="1.0">
+ <title>Simple index</title>
+ </head>
+ <body>{{$Refresh := .RefreshURLPath}}{{range .Packages}}
+ <a href="{{$Refresh}}{{.}}/">{{.}}</a><br/>
+{{- end}}
+ </body>
+</html>