Skip to content

Commit

Permalink
making path levels dynamic
Browse files Browse the repository at this point in the history
  • Loading branch information
tigranbs committed Oct 17, 2023
1 parent 3d6e92c commit 1cd1eda
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 25 deletions.
3 changes: 3 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ var (
const (
StorageS3 = "s3"
StorageFileSystem = "filesystem"

// NumberOfPkgNameLevels PkgName Levels (e.g. /npm/@username/package-name)
NumberOfPkgNameLevels = 2
)

func init() {
Expand Down
31 changes: 20 additions & 11 deletions router/container.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package router

import (
"fmt"
"github.com/alin-io/pkgstore/config"
"github.com/alin-io/pkgstore/services/container"
"github.com/alin-io/pkgstore/storage"
"github.com/gin-gonic/gin"
Expand All @@ -13,17 +15,24 @@ func initContainerRoutes(r *gin.Engine, storageBackend storage.BaseStorageBacken
containerRoutes.GET("/", func(context *gin.Context) {
context.JSON(200, gin.H{"status": "ok"})
})
// Upload Process
containerRoutes.GET(":name/blobs/uploads/:uuid", containerService.GetUploadProgressHandler)
containerRoutes.HEAD(":name/blobs/:sha256", containerService.CheckBlobExistenceHandler)
containerRoutes.POST(":name/blobs/uploads/", containerService.StartLayerUploadHandler)
containerRoutes.PATCH(":name/blobs/uploads/:uuid", containerService.ChunkUploadHandler)
containerRoutes.PUT(":name/blobs/uploads/:uuid", containerService.UploadHandler)
containerRoutes.PUT(":name/manifests/:reference", containerService.ManifestUploadHandler)

// Download Process
containerRoutes.GET(":name/manifests/:reference", containerService.MetadataHandler)
containerRoutes.HEAD(":name/manifests/:reference", containerService.CheckMetadataHandler)
containerRoutes.GET(":name/blobs/:sha256", containerService.DownloadHandler)
pkgNameParam := ""

for i := 0; i < config.NumberOfPkgNameLevels; i++ {
pkgNameParam += fmt.Sprintf("/:name%d", i)

// Upload Process
containerRoutes.GET(pkgNameParam+"/blobs/uploads/:uuid", containerService.GetUploadProgressHandler)
containerRoutes.HEAD(pkgNameParam+"/blobs/:sha256", containerService.CheckBlobExistenceHandler)
containerRoutes.POST(pkgNameParam+"/blobs/uploads/", containerService.StartLayerUploadHandler)
containerRoutes.PATCH(pkgNameParam+"/blobs/uploads/:uuid", containerService.ChunkUploadHandler)
containerRoutes.PUT(pkgNameParam+"/blobs/uploads/:uuid", containerService.UploadHandler)
containerRoutes.PUT(pkgNameParam+"/manifests/:reference", containerService.ManifestUploadHandler)

// Download Process
containerRoutes.GET(pkgNameParam+"/manifests/:reference", containerService.MetadataHandler)
containerRoutes.HEAD(pkgNameParam+"/manifests/:reference", containerService.CheckMetadataHandler)
containerRoutes.GET(pkgNameParam+"/blobs/:sha256", containerService.DownloadHandler)
}
}
}
19 changes: 12 additions & 7 deletions router/npm.go
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
package router

import (
"fmt"
"github.com/alin-io/pkgstore/config"
"github.com/alin-io/pkgstore/services/npm"
"github.com/alin-io/pkgstore/storage"
"github.com/gin-gonic/gin"
)

func initNpmRoutes(r *gin.Engine, storageBackend storage.BaseStorageBackend) {
npmService := npm.NewService(storageBackend)
npmRoutes := r.Group("/npm/:name")

npmRoutes := r.Group("/npm")
{
npmRoutes.GET("", npmService.MetadataHandler)
npmRoutes.GET("/-/:filename", npmService.DownloadHandler)
npmRoutes.GET(":name2", npmService.MetadataHandler)
npmRoutes.GET(":name2/-/:filename", npmService.DownloadHandler)
pkgNameParam := ""
for i := 0; i < config.NumberOfPkgNameLevels; i++ {
pkgNameParam += fmt.Sprintf("/:name%d", i)

npmRoutes.GET(pkgNameParam, npmService.MetadataHandler)
npmRoutes.GET(pkgNameParam+"/-/:filename", npmService.DownloadHandler)

npmRoutes.PUT("", npmService.UploadHandler)
npmRoutes.PUT(":name2", npmService.UploadHandler)
npmRoutes.PUT(pkgNameParam, npmService.UploadHandler)
}
}
}
9 changes: 7 additions & 2 deletions router/pypi.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package router

import (
"fmt"
"github.com/alin-io/pkgstore/config"
"github.com/alin-io/pkgstore/services/pypi"
"github.com/alin-io/pkgstore/storage"
"github.com/gin-gonic/gin"
Expand All @@ -10,8 +12,11 @@ func initPypiRoutes(r *gin.Engine, storageBackend storage.BaseStorageBackend) {
pypiService := pypi.NewService(storageBackend)
pypiRoutes := r.Group("/pypi")
{
pypiRoutes.GET("/simple/:name", pypiService.MetadataHandler)
pypiRoutes.GET("/simple/:name/:name2", pypiService.MetadataHandler)
pkgNameParam := ""
for i := 0; i < config.NumberOfPkgNameLevels; i++ {
pkgNameParam += fmt.Sprintf("/:name%d", i)
pypiRoutes.GET("/simple/"+pkgNameParam, pypiService.MetadataHandler)
}

pypiRoutes.GET("/files/:sha256/:filename", pypiService.DownloadHandler)

Expand Down
13 changes: 8 additions & 5 deletions services/packageService.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"crypto/sha256"
"encoding/hex"
"fmt"
"github.com/alin-io/pkgstore/config"
"github.com/alin-io/pkgstore/storage"
"github.com/gin-gonic/gin"
"io"
Expand Down Expand Up @@ -61,12 +62,14 @@ func (s *BasePackageService) ChecksumReader(r io.Reader) (checksum string, size
}

func (s *BasePackageService) ConstructFullPkgName(c *gin.Context) string {
pkgName := c.Param("name")
pkgName2 := c.Param("name2")
if len(pkgName2) > 0 {
pkgName = fmt.Sprintf("%s/%s", pkgName, pkgName2)
pkgName := ""
for i := 0; i < config.NumberOfPkgNameLevels; i++ {
pkgParam := c.Param(fmt.Sprintf("name%d", i))
if len(pkgParam) > 0 {
pkgName = fmt.Sprintf("%s/%s", pkgName, pkgParam)
}
}
return pkgName
return pkgName[1:]
}

func (s *BasePackageService) ProxyToPublicRegistry(c *gin.Context) {
Expand Down

0 comments on commit 1cd1eda

Please sign in to comment.