diff --git a/options/locale/locale_en-US.json b/options/locale/locale_en-US.json index eb8eee22d6..85ac417fa7 100644 --- a/options/locale/locale_en-US.json +++ b/options/locale/locale_en-US.json @@ -2646,6 +2646,10 @@ "repo.licenses.key_created": "License Key Created", "repo.licenses.key_created_copy": "Copy this key now. It will not be shown again.", "repo.licenses.revoke": "Revoke", + "repo.licenses.edit_package": "Edit License Package", + "repo.licenses.delete_package": "Delete Package", + "repo.licenses.package_updated": "License package updated.", + "repo.licenses.package_deleted": "License package deleted.", "repo.licenses.key_revoked": "License key revoked.", "repo.licenses.master_key_created": "Master License Key Created", "repo.licenses.master_key_created_copy": "This is your organization master key with unlimited access to all update channels. Copy it now — it will not be shown again.", diff --git a/routers/web/repo/licenses.go b/routers/web/repo/licenses.go index 3013c2e9b9..b08499e99b 100644 --- a/routers/web/repo/licenses.go +++ b/routers/web/repo/licenses.go @@ -179,3 +179,60 @@ func LicensesRevokeKey(ctx *context.Context) { ctx.Flash.Success(ctx.Tr("repo.licenses.key_revoked")) ctx.Redirect(ctx.Repo.RepoLink + "/licenses") } + +const tplLicensesEditPackage templates.TplName = "repo/licenses_edit_package" + +// LicensesEditPackage shows the edit form for a license package. +func LicensesEditPackage(ctx *context.Context) { + pkgID := ctx.PathParamInt64("id") + pkg, err := licenses.GetLicensePackageByID(ctx, pkgID) + if err != nil { + ctx.ServerError("GetLicensePackageByID", err) + return + } + + ctx.Data["Title"] = ctx.Tr("repo.licenses.edit_package") + ctx.Data["PageIsLicenses"] = true + ctx.Data["IsLicensesPage"] = true + ctx.Data["Package"] = pkg + ctx.HTML(http.StatusOK, tplLicensesEditPackage) +} + +// LicensesEditPackagePost saves edits to a license package. +func LicensesEditPackagePost(ctx *context.Context) { + pkgID := ctx.PathParamInt64("id") + pkg, err := licenses.GetLicensePackageByID(ctx, pkgID) + if err != nil { + ctx.ServerError("GetLicensePackageByID", err) + return + } + + pkg.Name = ctx.FormString("name") + pkg.Description = ctx.FormString("description") + durationDays, _ := strconv.Atoi(ctx.FormString("duration_days")) + pkg.DurationDays = durationDays + maxSites, _ := strconv.Atoi(ctx.FormString("max_sites")) + pkg.MaxSites = maxSites + pkg.AllowedChannels = ctx.FormString("allowed_channels") + pkg.IsActive = ctx.FormString("is_active") == "on" + + if err := licenses.UpdateLicensePackage(ctx, pkg); err != nil { + ctx.ServerError("UpdateLicensePackage", err) + return + } + + ctx.Flash.Success(ctx.Tr("repo.licenses.package_updated")) + ctx.Redirect(ctx.Repo.RepoLink + "/licenses") +} + +// LicensesDeletePackage deletes a license package. +func LicensesDeletePackage(ctx *context.Context) { + pkgID := ctx.PathParamInt64("id") + if err := licenses.DeleteLicensePackage(ctx, pkgID); err != nil { + ctx.ServerError("DeleteLicensePackage", err) + return + } + + ctx.Flash.Success(ctx.Tr("repo.licenses.package_deleted")) + ctx.Redirect(ctx.Repo.RepoLink + "/licenses") +} diff --git a/routers/web/web.go b/routers/web/web.go index d0867755fd..d368748520 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -1512,6 +1512,9 @@ func registerWebRoutes(m *web.Router, webAuth *AuthMiddleware) { m.Group("/{username}/{reponame}/licenses", func() { m.Get("", repo.Licenses) m.Post("/packages", repo.LicensesCreatePackage) + m.Get("/packages/{id}/edit", repo.LicensesEditPackage) + m.Post("/packages/{id}/edit", repo.LicensesEditPackagePost) + m.Post("/packages/{id}/delete", repo.LicensesDeletePackage) m.Post("/keys/generate", repo.LicensesGenerateKey) m.Post("/keys/{id}/revoke", repo.LicensesRevokeKey) }, optSignIn, context.RepoAssignment) diff --git a/templates/repo/licenses.tmpl b/templates/repo/licenses.tmpl index df23cf5d4b..5f66a0eef0 100644 --- a/templates/repo/licenses.tmpl +++ b/templates/repo/licenses.tmpl @@ -45,12 +45,21 @@