making <version>.info work

This commit is contained in:
Aaron Schlesinger
2018-02-25 15:30:36 -08:00
parent 5aa7cb9d58
commit fb607d3577
7 changed files with 69 additions and 9 deletions
+8 -5
View File
@@ -32,7 +32,10 @@ func init() {
log.Fatalf("GOPATH is not set!")
}
gopath = g
storageReader = &memory.Lister{}
storageReader = storage.Reader{
Lister: &memory.Lister{},
Versioner: &memory.Versioner{},
}
storageWriter = &memory.Saver{}
}
@@ -76,10 +79,10 @@ func App() *buffalo.App {
app.GET("/all", allHandler(storageReader))
app.GET("/{base_url:.+}/{module}/@v/list", listHandler(storageReader))
app.GET("/{base_url:.+}/{module}/@v/{ver}.info", versionInfoHandler)
app.GET("/{base_url:.+}/{module}/@v/{ver}.mod", versionModuleHandler)
app.GET("/{base_url:.+}/{module}/@v/{ver}.zip", versionZipHandler)
app.POST("/admin/upload/{base_url:[a-zA-Z./]+}/{module}/{ver}", uploadHandler(storageWriter))
app.GET("/{base_url:.+}/{module}/@v/{version}.info", versionInfoHandler(storageReader))
app.GET("/{base_url:.+}/{module}/@v/{version}.mod", versionModuleHandler)
app.GET("/{base_url:.+}/{module}/@v/{version}.zip", versionZipHandler)
app.POST("/admin/upload/{base_url:[a-zA-Z./]+}/{module}/{version}", uploadHandler(storageWriter))
// serve files from the public directory:
app.ServeFiles("/", assetsBox)
+1 -1
View File
@@ -15,7 +15,7 @@ func uploadHandler(store storage.Saver) func(c buffalo.Context) error {
if err != nil {
return errors.WithStack(err)
}
version := c.Param("ver")
version := c.Param("version")
payload := new(payloads.Upload)
if c.Bind(payload); err != nil {
return errors.WithStack(err)
+20 -2
View File
@@ -1,9 +1,27 @@
package actions
import (
"fmt"
"net/http"
"github.com/arschles/vgoprox/pkg/storage"
"github.com/gobuffalo/buffalo"
)
func versionInfoHandler(c buffalo.Context) error {
return nil
func versionInfoHandler(versioner storage.Versioner) func(c buffalo.Context) error {
return func(c buffalo.Context) error {
stdParams, err := getStandardParams(c)
if err != nil {
return err
}
version := c.Param("version")
if version == "" {
return fmt.Errorf("version not found")
}
revInfo, err := versioner.Info(stdParams.baseURL, stdParams.module, version)
if err != nil {
return err
}
return c.Render(http.StatusOK, r.JSON(revInfo))
}
}
+27
View File
@@ -0,0 +1,27 @@
package memory
import (
"github.com/arschles/vgoprox/pkg/storage"
)
type Versioner struct{}
func (v *Versioner) Info(baseURL, module, vsn string) (*storage.RevInfo, error) {
entries.RLock()
defer entries.RUnlock()
key := entries.key(baseURL, module)
versions := entries.versions[key]
for _, version := range versions {
if version.info.Version == vsn {
return &version.info, nil
}
}
return nil, &storage.ErrVersionNotFound{
NotFoundErr: storage.NotFoundErr{
BasePath: baseURL,
Module: module,
},
Version: vsn,
}
}
+5
View File
@@ -9,6 +9,11 @@ type NotFoundErr struct {
Module string
}
type ErrVersionNotFound struct {
NotFoundErr
Version string
}
func (n NotFoundErr) Error() string {
return fmt.Sprintf("%s/%s not found", n.BasePath, n.Module)
}
+2 -1
View File
@@ -1,5 +1,6 @@
package storage
type Reader interface {
type Reader struct {
Lister
Versioner
}
+6
View File
@@ -0,0 +1,6 @@
package storage
type Versioner interface {
// must return NotFoundErr if the coordinates are not found
Info(baseURL, module, version string) (*RevInfo, error)
}