From e25ade8af3b3e3a4e57377815e0127fe520ca494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=9B=D1=83=D1=85?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2?= Date: Mon, 26 Sep 2022 09:51:30 +0300 Subject: [PATCH] Serve api and published repos simultaneously refs #1017 #975 --- api/router.go | 132 +++++++++++++++++++++++++++----------------------- 1 file changed, 72 insertions(+), 60 deletions(-) diff --git a/api/router.go b/api/router.go index f378c864..8542f9ef 100644 --- a/api/router.go +++ b/api/router.go @@ -51,6 +51,20 @@ func Router(c *ctx.AptlyContext) http.Handler { MetricsCollectorRegistrar.Register(router) } + router.GET("/repos/:storage/*pkgPath", func(c *gin.Context) { + pkgpath := c.Param("pkgPath") + + storage := c.Param("storage") + if storage == "-" { + storage = "" + } + + publicPath := context.GetPublishedStorage("filesystem:" + storage).(aptly.FileSystemPublishedStorage).PublicPath() + + c.FileFromFS(pkgpath, http.Dir(publicPath)) + }) + + api := router.Group("/api") if context.Flags().Lookup("no-lock").Value.Get().(bool) { // We use a goroutine to count the number of // concurrent requests. When no more requests are @@ -59,7 +73,7 @@ func Router(c *ctx.AptlyContext) http.Handler { go acquireDatabase() - router.Use(func(c *gin.Context) { + api.Use(func(c *gin.Context) { var err error errCh := make(chan error) @@ -83,107 +97,105 @@ func Router(c *ctx.AptlyContext) http.Handler { }) } - root := router.Group("/api") - { if c.Config().EnableMetricsEndpoint { - root.GET("/metrics", apiMetricsGet()) + api.GET("/metrics", apiMetricsGet()) } - root.GET("/version", apiVersion) + api.GET("/version", apiVersion) isReady := &atomic.Value{} isReady.Store(false) defer isReady.Store(true) - root.GET("/ready", apiReady(isReady)) - root.GET("/healthy", apiHealthy) + api.GET("/ready", apiReady(isReady)) + api.GET("/healthy", apiHealthy) } { - root.GET("/repos", apiReposList) - root.POST("/repos", apiReposCreate) - root.GET("/repos/:name", apiReposShow) - root.PUT("/repos/:name", apiReposEdit) - root.DELETE("/repos/:name", apiReposDrop) + api.GET("/repos", apiReposList) + api.POST("/repos", apiReposCreate) + api.GET("/repos/:name", apiReposShow) + api.PUT("/repos/:name", apiReposEdit) + api.DELETE("/repos/:name", apiReposDrop) - root.GET("/repos/:name/packages", apiReposPackagesShow) - root.POST("/repos/:name/packages", apiReposPackagesAdd) - root.DELETE("/repos/:name/packages", apiReposPackagesDelete) + api.GET("/repos/:name/packages", apiReposPackagesShow) + api.POST("/repos/:name/packages", apiReposPackagesAdd) + api.DELETE("/repos/:name/packages", apiReposPackagesDelete) - root.POST("/repos/:name/file/:dir/:file", apiReposPackageFromFile) - root.POST("/repos/:name/file/:dir", apiReposPackageFromDir) + api.POST("/repos/:name/file/:dir/:file", apiReposPackageFromFile) + api.POST("/repos/:name/file/:dir", apiReposPackageFromDir) - root.POST("/repos/:name/include/:dir/:file", apiReposIncludePackageFromFile) - root.POST("/repos/:name/include/:dir", apiReposIncludePackageFromDir) + api.POST("/repos/:name/include/:dir/:file", apiReposIncludePackageFromFile) + api.POST("/repos/:name/include/:dir", apiReposIncludePackageFromDir) - root.POST("/repos/:name/snapshots", apiSnapshotsCreateFromRepository) + api.POST("/repos/:name/snapshots", apiSnapshotsCreateFromRepository) } { - root.POST("/mirrors/:name/snapshots", apiSnapshotsCreateFromMirror) + api.POST("/mirrors/:name/snapshots", apiSnapshotsCreateFromMirror) } { - root.GET("/mirrors", apiMirrorsList) - root.GET("/mirrors/:name", apiMirrorsShow) - root.GET("/mirrors/:name/packages", apiMirrorsPackages) - root.POST("/mirrors", apiMirrorsCreate) - root.PUT("/mirrors/:name", apiMirrorsUpdate) - root.DELETE("/mirrors/:name", apiMirrorsDrop) + api.GET("/mirrors", apiMirrorsList) + api.GET("/mirrors/:name", apiMirrorsShow) + api.GET("/mirrors/:name/packages", apiMirrorsPackages) + api.POST("/mirrors", apiMirrorsCreate) + api.PUT("/mirrors/:name", apiMirrorsUpdate) + api.DELETE("/mirrors/:name", apiMirrorsDrop) } { - root.POST("/gpg/key", apiGPGAddKey) + api.POST("/gpg/key", apiGPGAddKey) } { - root.GET("/files", apiFilesListDirs) - root.POST("/files/:dir", apiFilesUpload) - root.GET("/files/:dir", apiFilesListFiles) - root.DELETE("/files/:dir", apiFilesDeleteDir) - root.DELETE("/files/:dir/:name", apiFilesDeleteFile) + api.GET("/files", apiFilesListDirs) + api.POST("/files/:dir", apiFilesUpload) + api.GET("/files/:dir", apiFilesListFiles) + api.DELETE("/files/:dir", apiFilesDeleteDir) + api.DELETE("/files/:dir/:name", apiFilesDeleteFile) } { - root.GET("/publish", apiPublishList) - root.POST("/publish", apiPublishRepoOrSnapshot) - root.POST("/publish/:prefix", apiPublishRepoOrSnapshot) - root.PUT("/publish/:prefix/:distribution", apiPublishUpdateSwitch) - root.DELETE("/publish/:prefix/:distribution", apiPublishDrop) + api.GET("/publish", apiPublishList) + api.POST("/publish", apiPublishRepoOrSnapshot) + api.POST("/publish/:prefix", apiPublishRepoOrSnapshot) + api.PUT("/publish/:prefix/:distribution", apiPublishUpdateSwitch) + api.DELETE("/publish/:prefix/:distribution", apiPublishDrop) } { - root.GET("/snapshots", apiSnapshotsList) - root.POST("/snapshots", apiSnapshotsCreate) - root.PUT("/snapshots/:name", apiSnapshotsUpdate) - root.GET("/snapshots/:name", apiSnapshotsShow) - root.GET("/snapshots/:name/packages", apiSnapshotsSearchPackages) - root.DELETE("/snapshots/:name", apiSnapshotsDrop) - root.GET("/snapshots/:name/diff/:withSnapshot", apiSnapshotsDiff) - root.POST("/snapshots/merge", apiSnapshotsMerge) + api.GET("/snapshots", apiSnapshotsList) + api.POST("/snapshots", apiSnapshotsCreate) + api.PUT("/snapshots/:name", apiSnapshotsUpdate) + api.GET("/snapshots/:name", apiSnapshotsShow) + api.GET("/snapshots/:name/packages", apiSnapshotsSearchPackages) + api.DELETE("/snapshots/:name", apiSnapshotsDrop) + api.GET("/snapshots/:name/diff/:withSnapshot", apiSnapshotsDiff) + api.POST("/snapshots/merge", apiSnapshotsMerge) } { - root.GET("/packages/:key", apiPackagesShow) - root.GET("/packages", apiPackages) + api.GET("/packages/:key", apiPackagesShow) + api.GET("/packages", apiPackages) } { - root.GET("/graph.:ext", apiGraph) + api.GET("/graph.:ext", apiGraph) } { - root.POST("/db/cleanup", apiDbCleanup) + api.POST("/db/cleanup", apiDbCleanup) } { - root.GET("/tasks", apiTasksList) - root.POST("/tasks-clear", apiTasksClear) - root.GET("/tasks-wait", apiTasksWait) - root.GET("/tasks/:id/wait", apiTasksWaitForTaskByID) - root.GET("/tasks/:id/output", apiTasksOutputShow) - root.GET("/tasks/:id/detail", apiTasksDetailShow) - root.GET("/tasks/:id/return_value", apiTasksReturnValueShow) - root.GET("/tasks/:id", apiTasksShow) - root.DELETE("/tasks/:id", apiTasksDelete) - root.POST("/tasks-dummy", apiTasksDummy) + api.GET("/tasks", apiTasksList) + api.POST("/tasks-clear", apiTasksClear) + api.GET("/tasks-wait", apiTasksWait) + api.GET("/tasks/:id/wait", apiTasksWaitForTaskByID) + api.GET("/tasks/:id/output", apiTasksOutputShow) + api.GET("/tasks/:id/detail", apiTasksDetailShow) + api.GET("/tasks/:id/return_value", apiTasksReturnValueShow) + api.GET("/tasks/:id", apiTasksShow) + api.DELETE("/tasks/:id", apiTasksDelete) + api.POST("/tasks-dummy", apiTasksDummy) } return router