Stanislav N. aka pztrn
9e5f98a413
All checks were successful
continuous-integration/drone/push Build is passing
51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
package serverv1
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/labstack/echo"
|
|
"go.dev.pztrn.name/giredore/internal/configuration"
|
|
"go.dev.pztrn.name/giredore/internal/structs"
|
|
)
|
|
|
|
func throwGoImports(ectx echo.Context) error {
|
|
// Getting real path. This might be the package itself, or namespace
|
|
// to list available packages.
|
|
// For now only package itself is supported, all other features in ToDo.
|
|
packageNameRaw := ectx.Request().URL.Path
|
|
|
|
pkgs, errs := configuration.Cfg.GetPackagesInfo([]string{packageNameRaw})
|
|
|
|
if errs != nil {
|
|
log.Error().Str("package", packageNameRaw).Msgf("Failed to get package information: %+v", errs)
|
|
|
|
// nolint:exhaustruct,wrapcheck
|
|
return ectx.JSON(http.StatusBadRequest, &structs.Reply{Status: structs.StatusFailure, Errors: errs})
|
|
}
|
|
|
|
if len(pkgs) == 0 {
|
|
// nolint:exhaustruct,wrapcheck
|
|
return ectx.JSON(http.StatusBadRequest, &structs.Reply{Status: structs.StatusFailure, Errors: []structs.Error{structs.ErrNoPackagesFound}})
|
|
}
|
|
|
|
pkg, found := pkgs[packageNameRaw]
|
|
if !found {
|
|
// nolint:exhaustruct,wrapcheck
|
|
return ectx.JSON(http.StatusBadRequest, &structs.Reply{Status: structs.StatusFailure, Errors: []structs.Error{structs.ErrNoPackagesFound}})
|
|
}
|
|
|
|
// We should compose package name using our domain under which giredore
|
|
// is working.
|
|
domain := ectx.Request().Host
|
|
packageName := domain + packageNameRaw
|
|
|
|
tmpl := singlePackageTemplate
|
|
tmpl = strings.Replace(tmpl, "{PKGNAME}", packageName, -1)
|
|
tmpl = strings.Replace(tmpl, "{VCS}", pkg.VCS, 1)
|
|
tmpl = strings.Replace(tmpl, "{REPOPATH}", pkg.RealPath, 1)
|
|
|
|
// nolint:wrapcheck
|
|
return ectx.HTML(http.StatusOK, tmpl)
|
|
}
|