func BlockPackagePost(ctx *middleware.Context) { ctx.Data["PageIsBlocks"] = true ctx.Data["PageIsBlocksList"] = true keys, err := models.BlockPackage(ctx.Query("import_path"), ctx.Query("note")) if err != nil { if err == models.ErrPackageNotExist { ctx.RenderWithErr(err.Error(), "blocks/new", nil) } else { ctx.Handle(500, "BlockPackage", err) } return } if setting.ProdMode { for _, k := range keys { log.Trace("Deleting archive: %s", k) if err = qiniu.DeleteArchive(k); err != nil { log.Error(4, "Fail to delete archive(%s): %v", k, err) } log.Info("Archive deleted: %s", k) } } ctx.Flash.Success("New package has been blocked!") ctx.Redirect("/admin/blocks") }
func Auth(ctx *middleware.Context) { if len(setting.AccessToken) == 0 || ctx.GetCookie("access_token") != setting.AccessToken { ctx.Data["PageIsAuth"] = true ctx.HTML(200, "auth") } }
func LargeRevisions(ctx *middleware.Context) { ctx.Data["PageIsPackages"] = true ctx.Data["PageIsPackagesLarges"] = true models.GetLocalRevisions() ctx.HTML(200, "packages/larges") }
func BlockRules(ctx *middleware.Context) { ctx.Data["PageIsBlocks"] = true ctx.Data["PageIsBlocksRules"] = true rules, err := models.ListBlockRules(0) if err != nil { ctx.Handle(500, "ListBlockRules", err) return } ctx.Data["Rules"] = rules ctx.HTML(200, "blocks/rules") }
func Blocks(ctx *middleware.Context) { ctx.Data["PageIsBlocks"] = true ctx.Data["PageIsBlocksList"] = true blocks, err := models.ListBlockedPackages(0) if err != nil { ctx.Handle(500, "ListBlockedPackages", err) return } ctx.Data["Blocks"] = blocks ctx.HTML(200, "blocks/list") }
func Search(ctx *middleware.Context) { ctx.Data["Title"] = ctx.Locale.Tr("search") ctx.Data["SearchKeyword"] = ctx.Query("q") pkgs, err := models.SearchPackages(ctx.Query("q")) if err != nil { ctx.Handle(500, "SearchPackages", err) return } ctx.Data["ResultPackages"] = pkgs ctx.HTML(200, "search") }
func Badge(ctx *middleware.Context) { importPath := ctx.Params("*") pkg, err := models.GetPakcageByPath(importPath) if err != nil { if err == models.ErrPackageNotExist { ctx.Error(404) } else { ctx.Handle(500, "Badge", err) } return } ctx.Redirect(fmt.Sprintf("http://img.shields.io/badge/downloads-%d_total-blue.svg?style=flat", pkg.DownloadCount)) }
func GetRevision(ctx *middleware.Context) { importPath := archive.GetRootPath(ctx.Query("pkgname")) rev := ctx.Query("revision") n := archive.NewNode(importPath, rev) if err := n.GetRevision(); err != nil { ctx.JSON(422, map[string]interface{}{ "error": err.Error(), }) return } ctx.JSON(200, map[string]interface{}{ "sha": n.Revision, }) }
func Package(ctx *middleware.Context) { importPath := ctx.Params("*") _, err := models.GetPakcageByPath(importPath) if err != nil { if err == models.ErrPackageNotExist { ctx.Handle(404, "Package", nil) } else { ctx.Handle(500, "Package", err) } return } ctx.Data["Title"] = importPath ctx.Data["ImportPath"] = importPath ctx.HTML(200, "package") }
func DeleteBlockRule(ctx *middleware.Context) { ctx.Data["PageIsBlocks"] = true ctx.Data["PageIsBlocksRules"] = true if err := models.DeleteBlockRule(ctx.ParamsInt64(":id")); err != nil { ctx.Handle(500, "DeleteBlockRule", err) return } ctx.Flash.Success("Block rule has been deleted!") ctx.Redirect("/admin/blocks/rules") }
func UnblockPackage(ctx *middleware.Context) { ctx.Data["PageIsBlocks"] = true ctx.Data["PageIsBlocksList"] = true if err := models.UnblockPackage(ctx.ParamsInt64(":id")); err != nil { ctx.Handle(500, "UnblockPackage", err) return } ctx.Flash.Success("Package has been unblocked!") ctx.Redirect("/admin/blocks") }
func NewBlockRulePost(ctx *middleware.Context) { ctx.Data["PageIsBlocks"] = true ctx.Data["PageIsBlocksRules"] = true r := &models.BlockRule{ Rule: ctx.Query("rule"), Note: ctx.Query("note"), } if err := models.NewBlockRule(r); err != nil { ctx.Handle(500, "NewBlockRule", err) return } ctx.Flash.Success("New block rule has been added!") ctx.Redirect("/admin/blocks/rules") }
func RunRule(ctx *middleware.Context) { ctx.Data["PageIsBlocks"] = true ctx.Data["PageIsBlocksRules"] = true rid := ctx.ParamsInt64(":id") count, keys, err := models.RunBlockRule(rid) if err != nil { ctx.Handle(500, "RunBlockRule", err) return } if setting.ProdMode { for _, k := range keys { log.Trace("Deleting archive: %s", k) if err = qiniu.DeleteArchive(k); err != nil { log.Error(4, "Fail to delete archive(%s): %v", k, err) } log.Info("Archive deleted: %s", k) } } ctx.Flash.Success(fmt.Sprintf("%d packages are blocked by rule ID: %d.", count, rid)) ctx.Redirect("/admin/blocks/rules") }
func AuthPost(ctx *middleware.Context) { ctx.SetCookie("access_token", ctx.Query("token")) ctx.Redirect("/admin") }
func NewBlockRule(ctx *middleware.Context) { ctx.Data["PageIsBlocks"] = true ctx.Data["PageIsBlocksRules"] = true ctx.HTML(200, "blocks/rules_new") }
func Download(ctx *middleware.Context) { ctx.Data["Title"] = ctx.Tr("download") ctx.Data["PageIsDownload"] = true importPath := archive.GetRootPath(ctx.Query("pkgname")) if ctx.Req.Method == "POST" { rev := ctx.Query("revision") r, err := models.CheckPkg(importPath, rev) if err != nil { ctx.Data["pkgname"] = importPath ctx.Data["revision"] = rev errMsg := err.Error() if err == archive.ErrNotMatchAnyService { ctx.Data["Err_PkgName"] = true errMsg = ctx.Tr("download.err_not_match_service") } else if _, ok := err.(*models.BlockError); ok { errMsg = ctx.Tr("download.err_package_blocked", err.Error()) } ctx.RenderWithErr(errMsg, "download", nil) return } if err = models.IncreasePackageDownloadCount(importPath); err != nil { ctx.Handle(500, "IncreasePackageDownloadCount", err) return } else if err = models.AddDownloader(ctx.RemoteAddr()); err != nil { ctx.Handle(500, "AddDownloader", err) return } ext := archive.GetExtension(importPath) serveName := path.Base(importPath) + "-" + base.ShortSha(r.Revision) + ext switch r.Storage { case models.LOCAL: ctx.ServeFile(path.Join(setting.ArchivePath, importPath, r.Revision+ext), serveName) case models.QINIU: ctx.Redirect("http://" + setting.BucketUrl + "/" + importPath + "-" + r.Revision + ext) } return } ctx.Data["pkgname"] = importPath ctx.HTML(200, "download") }
func ListLargeRevisions(ctx *middleware.Context) { revs, err := models.GetLocalRevisions() if err != nil { ctx.JSON(500, map[string]string{ "error": fmt.Sprintf("fail to get local revisions: %v", err), }) return } largeRevs := make([]*ApiRevesion, 0, len(revs)/2) for _, rev := range revs { pkg, err := models.GetPakcageById(rev.PkgId) if err != nil { ctx.JSON(500, map[string]string{ "error": fmt.Sprintf("fail to get package by ID(%d): %v", rev.PkgId, err), }) return } ext := archive.GetExtension(pkg.ImportPath) localPath := path.Join(pkg.ImportPath, rev.Revision) fpath := path.Join(setting.ArchivePath, localPath+ext) if !com.IsFile(fpath) { continue } // Check archive size. f, err := os.Open(fpath) if err != nil { ctx.JSON(500, map[string]string{ "error": fmt.Sprintf("fail to open file(%s): %v", fpath, err), }) return } fi, err := f.Stat() if err != nil { ctx.JSON(500, map[string]string{ "error": fmt.Sprintf("fail to get file info(%s): %v", fpath, err), }) return } // Greater then MAX_UPLOAD_SIZE. if fi.Size() > setting.MaxUploadSize<<20 { largeRevs = append(largeRevs, &ApiRevesion{ Id: rev.Id, Package: &ApiPackage{ Id: pkg.Id, ImportPath: pkg.ImportPath, Created: pkg.Created, }, Revision: rev.Revision, Size: fi.Size(), Updated: rev.Updated, }) continue } } ctx.JSON(200, map[string]interface{}{ "revisions": &largeRevs, }) }
func BlockPackage(ctx *middleware.Context) { ctx.Data["PageIsBlocks"] = true ctx.Data["PageIsBlocksList"] = true ctx.HTML(200, "blocks/new") }
func NotFound(ctx *middleware.Context) { ctx.Data["Title"] = ctx.Tr("status.page_not_found") ctx.Handle(404, "home.NotFound", nil) }
func About(ctx *middleware.Context) { ctx.Data["Title"] = ctx.Locale.Tr("about_lower") ctx.Data["PageIsAbout"] = true ctx.HTML(200, "about") }
func Home(ctx *middleware.Context) { ctx.Data["Title"] = ctx.Tr("app_title") ctx.Data["PageIsHome"] = true ctx.Data["Stats"] = models.Statistic ctx.HTML(200, "home") }
func BlockPackage(ctx *middleware.Context) { id := ctx.QueryInt64("id") pkg, err := models.GetPakcageById(id) if err != nil { if err == models.ErrPackageNotExist { ctx.JSON(404, map[string]string{ "error": err.Error(), }) } else { ctx.JSON(500, map[string]string{ "error": fmt.Sprintf("fail to get package by ID(%d): %v", id, err), }) } return } revs, err := pkg.GetRevisions() if err != nil { ctx.JSON(500, map[string]string{ "error": fmt.Sprintf("fail to get package revisions by ID(%d): %v", id, err), }) return } // Delete package archives. ext := archive.GetExtension(pkg.ImportPath) for _, rev := range revs { switch rev.Storage { case models.QINIU: key := pkg.ImportPath + "-" + rev.Revision + ext if err = qiniu.DeleteArchive(key); err != nil { ctx.JSON(500, map[string]string{ "error": fmt.Sprintf("fail to delete archive(%s): %v", key, err), }) return } } } os.RemoveAll(path.Join(setting.ArchivePath, pkg.ImportPath)) if err = models.BlockPackage(pkg, revs, ctx.Query("note")); err != nil { ctx.JSON(500, map[string]string{ "error": fmt.Sprintf("fail to block package by ID(%d): %v", id, err), }) return } ctx.JSON(200, map[string]interface{}{ "ok": true, }) }
func Download(ctx *middleware.Context) { importPath := archive.GetRootPath(ctx.Query("pkgname")) rev := ctx.Query("revision") r, err := models.CheckPkg(importPath, rev) if err != nil { ctx.JSON(422, map[string]interface{}{ "error": err.Error(), }) return } if err = models.IncreasePackageDownloadCount(importPath); err != nil { ctx.JSON(500, map[string]interface{}{ "error": err.Error(), }) return } else if err = models.AddDownloader(ctx.RemoteAddr()); err != nil { ctx.JSON(500, map[string]interface{}{ "error": err.Error(), }) return } ext := archive.GetExtension(importPath) serveName := path.Base(importPath) + "-" + base.ShortSha(r.Revision) + ext switch r.Storage { case models.LOCAL: ctx.ServeFile(path.Join(setting.ArchivePath, importPath, r.Revision+ext), serveName) case models.QINIU: ctx.Redirect("http://" + setting.BucketUrl + "/" + importPath + "-" + r.Revision + ext) } }
func Dashboard(ctx *middleware.Context) { ctx.Data["PageIsDashboard"] = true ctx.HTML(200, "dashboard") }
func Revisions(ctx *middleware.Context) { ctx.Data["PageIsPackages"] = true ctx.Data["PageIsPackagesList"] = true ctx.HTML(200, "packages/list") }