refactor: rename models/licenses to models/updateserver
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 2s
Generic: Project CI / Lint & Validate (push) Successful in 40s
Deploy MokoGitea / deploy (push) Successful in 5m29s
Generic: Project CI / Tests (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled

Rename the licensing/update server model package to better reflect
its purpose. All imports updated from licenses_model to updateserver_model.
License key management UI files kept (only imports updated).
This commit is contained in:
Jonathan Miller
2026-06-09 20:29:03 -05:00
parent 857c51e030
commit 549e890cd0
29 changed files with 242 additions and 242 deletions
@@ -1,7 +1,7 @@
// Copyright 2026 Moko Consulting <hello@mokoconsulting.tech>
// SPDX-License-Identifier: GPL-3.0-or-later
package licenses
package updateserver
import (
"context"
@@ -1,7 +1,7 @@
// Copyright 2026 Moko Consulting <hello@mokoconsulting.tech>
// SPDX-License-Identifier: GPL-3.0-or-later
package licenses
package updateserver
import (
"context"
@@ -1,7 +1,7 @@
// Copyright 2026 Moko Consulting <hello@mokoconsulting.tech>
// SPDX-License-Identifier: GPL-3.0-or-later
package licenses
package updateserver
import (
"context"
@@ -1,7 +1,7 @@
// Copyright 2026 Moko Consulting <hello@mokoconsulting.tech>
// SPDX-License-Identifier: GPL-3.0-or-later
package licenses
package updateserver
import (
"context"
@@ -1,7 +1,7 @@
// Copyright 2026 Moko Consulting <hello@mokoconsulting.tech>
// SPDX-License-Identifier: GPL-3.0-or-later
package licenses
package updateserver
import (
"context"
@@ -1,7 +1,7 @@
// Copyright 2026 Moko Consulting <hello@mokoconsulting.tech>
// SPDX-License-Identifier: GPL-3.0-or-later
package licenses
package updateserver
import (
"context"
+44 -44
View File
@@ -7,7 +7,7 @@ import (
"net/http"
"time"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/structs"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/timeutil"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/web"
@@ -16,7 +16,7 @@ import (
// GetLicenseSettings returns the licensing/update stream settings for a repo.
func GetLicenseSettings(ctx *context.APIContext) {
cfg := licenses.GetEffectiveConfig(ctx, ctx.Repo.Repository.OwnerID, ctx.Repo.Repository.ID)
cfg := updateserver_model.GetEffectiveConfig(ctx, ctx.Repo.Repository.OwnerID, ctx.Repo.Repository.ID)
if cfg == nil {
ctx.JSON(http.StatusOK, &structs.LicenseSettings{})
return
@@ -42,7 +42,7 @@ func GetLicenseSettings(ctx *context.APIContext) {
func UpdateLicenseSettings(ctx *context.APIContext) {
form := web.GetForm(ctx).(*structs.LicenseSettings)
cfg := &licenses.UpdateStreamConfig{
cfg := &updateserver_model.UpdateStreamConfig{
OwnerID: ctx.Repo.Repository.OwnerID,
RepoID: ctx.Repo.Repository.ID,
LicensingEnabled: form.LicensingEnabled,
@@ -61,7 +61,7 @@ func UpdateLicenseSettings(ctx *context.APIContext) {
StreamMode: "joomla",
}
if err := licenses.SaveConfig(ctx, cfg); err != nil {
if err := updateserver_model.SaveConfig(ctx, cfg); err != nil {
ctx.APIErrorInternal(err)
return
}
@@ -70,7 +70,7 @@ func UpdateLicenseSettings(ctx *context.APIContext) {
}
// verifyPackageOwnership checks that a package belongs to the current repo's owner.
func verifyPackageOwnership(ctx *context.APIContext, pkg *licenses.LicensePackage) bool {
func verifyPackageOwnership(ctx *context.APIContext, pkg *updateserver_model.LicensePackage) bool {
if pkg.OwnerID != ctx.Repo.Repository.OwnerID {
ctx.APIErrorNotFound(nil)
return false
@@ -79,7 +79,7 @@ func verifyPackageOwnership(ctx *context.APIContext, pkg *licenses.LicensePackag
}
// verifyKeyOwnership checks that a key belongs to the current repo's owner.
func verifyKeyOwnership(ctx *context.APIContext, key *licenses.LicenseKey) bool {
func verifyKeyOwnership(ctx *context.APIContext, key *updateserver_model.LicenseKey) bool {
if key.OwnerID != ctx.Repo.Repository.OwnerID {
ctx.APIErrorNotFound(nil)
return false
@@ -87,7 +87,7 @@ func verifyKeyOwnership(ctx *context.APIContext, key *licenses.LicenseKey) bool
return true
}
func toLicensePackageAPI(pkg *licenses.LicensePackage) *structs.LicensePackage {
func toLicensePackageAPI(pkg *updateserver_model.LicensePackage) *structs.LicensePackage {
return &structs.LicensePackage{
ID: pkg.ID,
OwnerID: pkg.OwnerID,
@@ -103,7 +103,7 @@ func toLicensePackageAPI(pkg *licenses.LicensePackage) *structs.LicensePackage {
}
}
func toLicenseKeyAPI(key *licenses.LicenseKey) *structs.LicenseKey {
func toLicenseKeyAPI(key *updateserver_model.LicenseKey) *structs.LicenseKey {
lk := &structs.LicenseKey{
ID: key.ID,
PackageID: key.PackageID,
@@ -134,7 +134,7 @@ func toLicenseKeyAPI(key *licenses.LicenseKey) *structs.LicenseKey {
// ListLicensePackages lists license packages for the repo owner.
func ListLicensePackages(ctx *context.APIContext) {
pkgs, err := licenses.ListLicensePackages(ctx, ctx.Repo.Repository.OwnerID)
pkgs, err := updateserver_model.ListLicensePackages(ctx, ctx.Repo.Repository.OwnerID)
if err != nil {
ctx.APIErrorInternal(err)
return
@@ -151,7 +151,7 @@ func ListLicensePackages(ctx *context.APIContext) {
func CreateLicensePackage(ctx *context.APIContext) {
form := web.GetForm(ctx).(*structs.CreateLicensePackageOption)
pkg := &licenses.LicensePackage{
pkg := &updateserver_model.LicensePackage{
OwnerID: ctx.Repo.Repository.OwnerID,
Name: form.Name,
Description: form.Description,
@@ -165,7 +165,7 @@ func CreateLicensePackage(ctx *context.APIContext) {
pkg.RepoScope = "all"
}
if err := licenses.CreateLicensePackage(ctx, pkg); err != nil {
if err := updateserver_model.CreateLicensePackage(ctx, pkg); err != nil {
ctx.APIErrorInternal(err)
return
}
@@ -178,7 +178,7 @@ func EditLicensePackage(ctx *context.APIContext) {
form := web.GetForm(ctx).(*structs.EditLicensePackageOption)
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.APIErrorNotFound(err)
return
@@ -187,7 +187,7 @@ func EditLicensePackage(ctx *context.APIContext) {
return
}
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
ctx.APIError(http.StatusForbidden, "master package cannot be edited")
return
}
@@ -214,7 +214,7 @@ func EditLicensePackage(ctx *context.APIContext) {
pkg.IsActive = *form.IsActive
}
if err := licenses.UpdateLicensePackage(ctx, pkg); err != nil {
if err := updateserver_model.UpdateLicensePackage(ctx, pkg); err != nil {
ctx.APIErrorInternal(err)
return
}
@@ -226,7 +226,7 @@ func EditLicensePackage(ctx *context.APIContext) {
func DeleteLicensePackage(ctx *context.APIContext) {
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.APIErrorNotFound(err)
return
@@ -235,12 +235,12 @@ func DeleteLicensePackage(ctx *context.APIContext) {
return
}
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
ctx.APIError(http.StatusForbidden, "master package cannot be deleted")
return
}
if err := licenses.DeleteLicensePackage(ctx, pkgID); err != nil {
if err := updateserver_model.DeleteLicensePackage(ctx, pkgID); err != nil {
ctx.APIErrorInternal(err)
return
}
@@ -252,7 +252,7 @@ func DeleteLicensePackage(ctx *context.APIContext) {
func ArchiveLicensePackage(ctx *context.APIContext) {
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.APIErrorNotFound(err)
return
@@ -261,12 +261,12 @@ func ArchiveLicensePackage(ctx *context.APIContext) {
return
}
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
ctx.APIError(http.StatusForbidden, "master package cannot be archived")
return
}
if err := licenses.ArchiveLicensePackage(ctx, pkgID); err != nil {
if err := updateserver_model.ArchiveLicensePackage(ctx, pkgID); err != nil {
ctx.APIErrorInternal(err)
return
}
@@ -277,7 +277,7 @@ func ArchiveLicensePackage(ctx *context.APIContext) {
// UnarchiveLicensePackage restores an archived license package via API.
func UnarchiveLicensePackage(ctx *context.APIContext) {
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.APIErrorNotFound(err)
return
@@ -285,7 +285,7 @@ func UnarchiveLicensePackage(ctx *context.APIContext) {
if !verifyPackageOwnership(ctx, pkg) {
return
}
if err := licenses.UnarchiveLicensePackage(ctx, pkgID); err != nil {
if err := updateserver_model.UnarchiveLicensePackage(ctx, pkgID); err != nil {
ctx.APIErrorInternal(err)
return
}
@@ -294,7 +294,7 @@ func UnarchiveLicensePackage(ctx *context.APIContext) {
// ListLicenseKeys lists license keys for the repo owner.
func ListLicenseKeys(ctx *context.APIContext) {
keys, err := licenses.ListLicenseKeys(ctx, ctx.Repo.Repository.OwnerID)
keys, err := updateserver_model.ListLicenseKeys(ctx, ctx.Repo.Repository.OwnerID)
if err != nil {
ctx.APIErrorInternal(err)
return
@@ -311,7 +311,7 @@ func ListLicenseKeys(ctx *context.APIContext) {
func CreateLicenseKey(ctx *context.APIContext) {
form := web.GetForm(ctx).(*structs.CreateLicenseKeyOption)
key := &licenses.LicenseKey{
key := &updateserver_model.LicenseKey{
PackageID: form.PackageID,
OwnerID: ctx.Repo.Repository.OwnerID,
LicenseeName: form.LicenseeName,
@@ -329,7 +329,7 @@ func CreateLicenseKey(ctx *context.APIContext) {
key.ExpiresUnix = timeutil.TimeStamp(form.ExpiresAt.Unix())
} else {
// Auto-calculate from package duration.
pkg, err := licenses.GetLicensePackageByID(ctx, form.PackageID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, form.PackageID)
if err != nil {
ctx.APIErrorInternal(err)
return
@@ -344,7 +344,7 @@ func CreateLicenseKey(ctx *context.APIContext) {
}
}
rawKey, err := licenses.CreateLicenseKey(ctx, key)
rawKey, err := updateserver_model.CreateLicenseKey(ctx, key)
if err != nil {
ctx.APIErrorInternal(err)
return
@@ -362,7 +362,7 @@ func EditLicenseKey(ctx *context.APIContext) {
form := web.GetForm(ctx).(*structs.EditLicenseKeyOption)
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.APIErrorNotFound(err)
return
@@ -395,7 +395,7 @@ func EditLicenseKey(ctx *context.APIContext) {
key.ExpiresUnix = timeutil.TimeStamp(form.ExpiresAt.Unix())
}
if err := licenses.UpdateLicenseKey(ctx, key); err != nil {
if err := updateserver_model.UpdateLicenseKey(ctx, key); err != nil {
ctx.APIErrorInternal(err)
return
}
@@ -409,7 +409,7 @@ func PurchaseLicenseKey(ctx *context.APIContext) {
// Idempotency check: if payment_ref already exists, return existing key.
if form.PaymentRef != "" {
existing, err := licenses.GetLicenseKeyByPaymentRef(ctx, form.PaymentRef)
existing, err := updateserver_model.GetLicenseKeyByPaymentRef(ctx, form.PaymentRef)
if err == nil {
resp := &structs.LicenseKeyCreated{
LicenseKey: *toLicenseKeyAPI(existing),
@@ -420,7 +420,7 @@ func PurchaseLicenseKey(ctx *context.APIContext) {
}
}
pkg, err := licenses.GetLicensePackageByID(ctx, form.PackageID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, form.PackageID)
if err != nil {
ctx.APIErrorNotFound(err)
return
@@ -429,7 +429,7 @@ func PurchaseLicenseKey(ctx *context.APIContext) {
return
}
key := &licenses.LicenseKey{
key := &updateserver_model.LicenseKey{
PackageID: form.PackageID,
OwnerID: ctx.Repo.Repository.OwnerID,
LicenseeName: form.LicenseeName,
@@ -444,7 +444,7 @@ func PurchaseLicenseKey(ctx *context.APIContext) {
key.ExpiresUnix = timeutil.TimeStamp(expires.Unix())
}
rawKey, err := licenses.CreateLicenseKey(ctx, key)
rawKey, err := updateserver_model.CreateLicenseKey(ctx, key)
if err != nil {
ctx.APIErrorInternal(err)
return
@@ -460,7 +460,7 @@ func PurchaseLicenseKey(ctx *context.APIContext) {
// RenewLicenseKey extends a key's expiration by its package duration.
func RenewLicenseKey(ctx *context.APIContext) {
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.APIErrorNotFound(err)
return
@@ -469,7 +469,7 @@ func RenewLicenseKey(ctx *context.APIContext) {
return
}
pkg, err := licenses.GetLicensePackageByID(ctx, key.PackageID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, key.PackageID)
if err != nil {
ctx.APIErrorNotFound(err)
return
@@ -480,20 +480,20 @@ func RenewLicenseKey(ctx *context.APIContext) {
days = 365
}
if err := licenses.RenewLicenseKey(ctx, keyID, days); err != nil {
if err := updateserver_model.RenewLicenseKey(ctx, keyID, days); err != nil {
ctx.APIErrorInternal(err)
return
}
// Reload key to get updated fields.
key, _ = licenses.GetLicenseKeyByID(ctx, keyID)
key, _ = updateserver_model.GetLicenseKeyByID(ctx, keyID)
ctx.JSON(http.StatusOK, toLicenseKeyAPI(key))
}
// RevokeLicenseKey deactivates a license key via API.
func RevokeLicenseKey(ctx *context.APIContext) {
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.APIErrorNotFound(err)
return
@@ -503,7 +503,7 @@ func RevokeLicenseKey(ctx *context.APIContext) {
}
key.IsActive = false
if err := licenses.UpdateLicenseKey(ctx, key); err != nil {
if err := updateserver_model.UpdateLicenseKey(ctx, key); err != nil {
ctx.APIErrorInternal(err)
return
}
@@ -514,7 +514,7 @@ func RevokeLicenseKey(ctx *context.APIContext) {
// DeleteLicenseKey deletes a license key.
func DeleteLicenseKey(ctx *context.APIContext) {
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.APIErrorNotFound(err)
return
@@ -522,7 +522,7 @@ func DeleteLicenseKey(ctx *context.APIContext) {
if !verifyKeyOwnership(ctx, key) {
return
}
if err := licenses.DeleteLicenseKey(ctx, keyID); err != nil {
if err := updateserver_model.DeleteLicenseKey(ctx, keyID); err != nil {
ctx.APIErrorInternal(err)
return
}
@@ -533,7 +533,7 @@ func DeleteLicenseKey(ctx *context.APIContext) {
func ValidateLicenseKey(ctx *context.APIContext) {
form := web.GetForm(ctx).(*structs.ValidateLicenseKeyOption)
key, pkg, err := licenses.ValidateLicenseKey(ctx, form.Key, form.Domain)
key, pkg, err := updateserver_model.ValidateLicenseKey(ctx, form.Key, form.Domain)
if err != nil {
ctx.JSON(http.StatusOK, &structs.ValidateLicenseKeyResponse{
Valid: false,
@@ -542,7 +542,7 @@ func ValidateLicenseKey(ctx *context.APIContext) {
return
}
_ = licenses.TouchHeartbeat(ctx, key.ID)
_ = updateserver_model.TouchHeartbeat(ctx, key.ID)
var expiresAt *time.Time
if key.ExpiresUnix > 0 {
@@ -555,7 +555,7 @@ func ValidateLicenseKey(ctx *context.APIContext) {
maxSites = pkg.MaxSites
}
sitesUsed, _ := licenses.CountUniqueDomainsByKey(ctx, key.ID)
sitesUsed, _ := updateserver_model.CountUniqueDomainsByKey(ctx, key.ID)
ctx.JSON(http.StatusOK, &structs.ValidateLicenseKeyResponse{
Valid: true,
@@ -569,7 +569,7 @@ func ValidateLicenseKey(ctx *context.APIContext) {
// GetLicenseKeyUsage returns usage logs for a license key.
func GetLicenseKeyUsage(ctx *context.APIContext) {
usages, err := licenses.GetRecentUsage(ctx, ctx.PathParamInt64("id"), 100)
usages, err := updateserver_model.GetRecentUsage(ctx, ctx.PathParamInt64("id"), 100)
if err != nil {
ctx.APIErrorInternal(err)
return
+3 -3
View File
@@ -9,7 +9,7 @@ import (
"strings"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
licenses_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/organization"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/renderhelper"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
@@ -109,10 +109,10 @@ func home(ctx *context.Context, viewRepositories bool) {
ctx.Data["IsOrganizationMember"] = ctx.Org.IsMember
ctx.Data["IsOrganizationOwner"] = ctx.Org.IsOwner
orgCfg, _ := licenses_model.GetOrgConfig(ctx, ctx.Org.Organization.ID)
orgCfg, _ := updateserver_model.GetOrgConfig(ctx, ctx.Org.Organization.ID)
ctx.Data["OrgLicensingEnabled"] = orgCfg != nil && orgCfg.LicensingEnabled
if orgCfg != nil && orgCfg.LicensingEnabled {
numPkgs, _ := licenses_model.CountOrgPackages(ctx, ctx.Org.Organization.ID)
numPkgs, _ := updateserver_model.CountOrgPackages(ctx, ctx.Org.Organization.ID)
ctx.Data["NumOrgLicensePackages"] = numPkgs
}
ctx.Data["IsPublicMember"] = func(uid int64) bool {
+49 -49
View File
@@ -9,7 +9,7 @@ import (
"strings"
"time"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/perm"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
unit_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/unit"
@@ -27,7 +27,7 @@ type OrgChannelItem struct {
Label string
}
func buildOrgChannelItems(streams []licenses.StreamDef) []OrgChannelItem {
func buildOrgChannelItems(streams []updateserver_model.StreamDef) []OrgChannelItem {
items := make([]OrgChannelItem, 0, len(streams))
for _, s := range streams {
label := s.Name
@@ -62,7 +62,7 @@ func parseOrgAllowedChannels(s string) []string {
// LicensePackageDisplay is used in templates.
type LicensePackageDisplay struct {
*licenses.LicensePackage
*updateserver_model.LicensePackage
KeyCount int64
Created time.Time
}
@@ -79,7 +79,7 @@ func Licenses(ctx *context.Context) {
// Auto-create master key if has write access.
if canWriteLicenses {
newMasterKey, err := licenses.EnsureMasterKey(ctx, ownerID)
newMasterKey, err := updateserver_model.EnsureMasterKey(ctx, ownerID)
if err != nil {
ctx.ServerError("EnsureMasterKey", err)
return
@@ -89,7 +89,7 @@ func Licenses(ctx *context.Context) {
}
}
pkgs, err := licenses.ListLicensePackagesWithAncestors(ctx, ownerID)
pkgs, err := updateserver_model.ListLicensePackagesWithAncestors(ctx, ownerID)
if err != nil {
ctx.ServerError("ListLicensePackages", err)
return
@@ -97,7 +97,7 @@ func Licenses(ctx *context.Context) {
var display []LicensePackageDisplay
for _, pkg := range pkgs {
count, _ := licenses.CountKeysByPackage(ctx, pkg.ID)
count, _ := updateserver_model.CountKeysByPackage(ctx, pkg.ID)
display = append(display, LicensePackageDisplay{
LicensePackage: pkg,
KeyCount: count,
@@ -110,11 +110,11 @@ func Licenses(ctx *context.Context) {
searchQuery := strings.TrimSpace(ctx.FormString("q"))
ctx.Data["SearchQuery"] = searchQuery
var keys []*licenses.LicenseKey
var keys []*updateserver_model.LicenseKey
if searchQuery != "" {
keys, err = licenses.SearchLicenseKeysWithAncestors(ctx, ownerID, searchQuery)
keys, err = updateserver_model.SearchLicenseKeysWithAncestors(ctx, ownerID, searchQuery)
} else {
keys, err = licenses.ListLicenseKeysWithAncestors(ctx, ownerID)
keys, err = updateserver_model.ListLicenseKeysWithAncestors(ctx, ownerID)
}
if err != nil {
ctx.ServerError("ListLicenseKeys", err)
@@ -128,10 +128,10 @@ func Licenses(ctx *context.Context) {
ctx.Data["OrgLicensingEnabled"] = true
// Load archived packages.
archivedPkgs, _ := licenses.ListArchivedLicensePackages(ctx, ownerID)
archivedPkgs, _ := updateserver_model.ListArchivedLicensePackages(ctx, ownerID)
var archivedDisplay []LicensePackageDisplay
for _, pkg := range archivedPkgs {
count, _ := licenses.CountKeysByPackage(ctx, pkg.ID)
count, _ := updateserver_model.CountKeysByPackage(ctx, pkg.ID)
archivedDisplay = append(archivedDisplay, LicensePackageDisplay{
LicensePackage: pkg,
KeyCount: count,
@@ -140,12 +140,12 @@ func Licenses(ctx *context.Context) {
}
ctx.Data["ArchivedPackages"] = archivedDisplay
orgCfg, _ := licenses.GetOrgConfig(ctx, ownerID)
var orgStreams []licenses.StreamDef
orgCfg, _ := updateserver_model.GetOrgConfig(ctx, ownerID)
var orgStreams []updateserver_model.StreamDef
if orgCfg != nil {
orgStreams = orgCfg.GetActiveStreams()
} else {
orgStreams = licenses.DefaultJoomlaStreams()
orgStreams = updateserver_model.DefaultJoomlaStreams()
}
ctx.Data["AvailableStreams"] = orgStreams
ctx.Data["ChannelItems"] = buildOrgChannelItems(orgStreams)
@@ -182,7 +182,7 @@ func LicensesCreatePackage(ctx *context.Context) {
repoScope = "all"
}
pkg := &licenses.LicensePackage{
pkg := &updateserver_model.LicensePackage{
OwnerID: ctx.Org.Organization.ID,
Name: name,
Description: ctx.FormString("description"),
@@ -194,7 +194,7 @@ func LicensesCreatePackage(ctx *context.Context) {
IsActive: true,
}
if err := licenses.CreateLicensePackage(ctx, pkg); err != nil {
if err := updateserver_model.CreateLicensePackage(ctx, pkg); err != nil {
ctx.ServerError("CreateLicensePackage", err)
return
}
@@ -212,13 +212,13 @@ func LicensesGenerateKey(ctx *context.Context) {
return
}
pkg, err := licenses.GetLicensePackageByID(ctx, packageID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, packageID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
}
key := &licenses.LicenseKey{
key := &updateserver_model.LicenseKey{
PackageID: packageID,
OwnerID: ctx.Org.Organization.ID,
IsActive: true,
@@ -233,13 +233,13 @@ func LicensesGenerateKey(ctx *context.Context) {
var rawKey string
customKey := strings.TrimSpace(ctx.FormString("custom_key"))
if customKey != "" && (ctx.IsUserSiteAdmin() || ctx.Org.IsOwner) {
if err := licenses.CreateLicenseKeyCustom(ctx, key, customKey); err != nil {
if err := updateserver_model.CreateLicenseKeyCustom(ctx, key, customKey); err != nil {
ctx.ServerError("CreateLicenseKeyCustom", err)
return
}
rawKey = customKey
} else {
rawKey, err = licenses.CreateLicenseKey(ctx, key)
rawKey, err = updateserver_model.CreateLicenseKey(ctx, key)
if err != nil {
ctx.ServerError("CreateLicenseKey", err)
return
@@ -253,10 +253,10 @@ func LicensesGenerateKey(ctx *context.Context) {
ctx.Data["NewKeyCreated"] = rawKey
ownerID := ctx.Org.Organization.ID
pkgs, _ := licenses.ListLicensePackages(ctx, ownerID)
pkgs, _ := updateserver_model.ListLicensePackages(ctx, ownerID)
var display []LicensePackageDisplay
for _, p := range pkgs {
count, _ := licenses.CountKeysByPackage(ctx, p.ID)
count, _ := updateserver_model.CountKeysByPackage(ctx, p.ID)
display = append(display, LicensePackageDisplay{
LicensePackage: p,
KeyCount: count,
@@ -264,14 +264,14 @@ func LicensesGenerateKey(ctx *context.Context) {
})
}
ctx.Data["LicensePackages"] = display
keys, _ := licenses.ListLicenseKeys(ctx, ownerID)
keys, _ := updateserver_model.ListLicenseKeys(ctx, ownerID)
ctx.Data["LicenseKeys"] = keys
orgCfg, _ := licenses.GetOrgConfig(ctx, ownerID)
orgCfg, _ := updateserver_model.GetOrgConfig(ctx, ownerID)
if orgCfg != nil {
ctx.Data["AvailableStreams"] = orgCfg.GetActiveStreams()
} else {
ctx.Data["AvailableStreams"] = licenses.DefaultJoomlaStreams()
ctx.Data["AvailableStreams"] = updateserver_model.DefaultJoomlaStreams()
}
ctx.HTML(http.StatusOK, tplOrgLicenses)
@@ -283,13 +283,13 @@ const tplOrgLicensesEditKey templates.TplName = "repo/licenses_edit_key"
// LicensesEditPackage shows the edit form for an org license package.
func LicensesEditPackage(ctx *context.Context) {
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
}
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
ctx.Flash.Error("Master package cannot be edited")
ctx.Redirect(ctx.Org.OrgLink + "/-/licenses")
return
@@ -301,12 +301,12 @@ func LicensesEditPackage(ctx *context.Context) {
selectedChannels := parseOrgAllowedChannels(pkg.AllowedChannels)
ctx.Data["SelectedChannels"] = selectedChannels
orgCfg, _ := licenses.GetOrgConfig(ctx, ctx.Org.Organization.ID)
var editStreams []licenses.StreamDef
orgCfg, _ := updateserver_model.GetOrgConfig(ctx, ctx.Org.Organization.ID)
var editStreams []updateserver_model.StreamDef
if orgCfg != nil {
editStreams = orgCfg.GetActiveStreams()
} else {
editStreams = licenses.DefaultJoomlaStreams()
editStreams = updateserver_model.DefaultJoomlaStreams()
}
ctx.Data["AvailableStreams"] = editStreams
ctx.Data["ChannelItems"] = buildOrgChannelItems(editStreams)
@@ -318,13 +318,13 @@ func LicensesEditPackage(ctx *context.Context) {
// LicensesEditPackagePost saves edits to an org license package.
func LicensesEditPackagePost(ctx *context.Context) {
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
}
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
ctx.Flash.Error("Master package cannot be edited")
ctx.Redirect(ctx.Org.OrgLink + "/-/licenses")
return
@@ -349,7 +349,7 @@ func LicensesEditPackagePost(ctx *context.Context) {
pkg.IsActive = ctx.FormString("is_active") == "on"
if err := licenses.UpdateLicensePackage(ctx, pkg); err != nil {
if err := updateserver_model.UpdateLicensePackage(ctx, pkg); err != nil {
ctx.ServerError("UpdateLicensePackage", err)
return
}
@@ -366,17 +366,17 @@ func canOrgDeleteLicenses(ctx *context.Context) bool {
// LicensesArchivePackage archives an org license package.
func LicensesArchivePackage(ctx *context.Context) {
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
}
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
ctx.Flash.Error("Master package cannot be archived")
ctx.Redirect(ctx.Org.OrgLink + "/-/licenses")
return
}
if err := licenses.ArchiveLicensePackage(ctx, pkgID); err != nil {
if err := updateserver_model.ArchiveLicensePackage(ctx, pkgID); err != nil {
ctx.ServerError("ArchiveLicensePackage", err)
return
}
@@ -387,7 +387,7 @@ func LicensesArchivePackage(ctx *context.Context) {
// LicensesUnarchivePackage restores an archived org license package.
func LicensesUnarchivePackage(ctx *context.Context) {
pkgID := ctx.PathParamInt64("id")
if err := licenses.UnarchiveLicensePackage(ctx, pkgID); err != nil {
if err := updateserver_model.UnarchiveLicensePackage(ctx, pkgID); err != nil {
ctx.ServerError("UnarchiveLicensePackage", err)
return
}
@@ -402,17 +402,17 @@ func LicensesDeletePackage(ctx *context.Context) {
return
}
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
}
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
ctx.Flash.Error("Master package cannot be deleted")
ctx.Redirect(ctx.Org.OrgLink + "/-/licenses")
return
}
if err := licenses.DeleteLicensePackage(ctx, pkgID); err != nil {
if err := updateserver_model.DeleteLicensePackage(ctx, pkgID); err != nil {
ctx.ServerError("DeleteLicensePackage", err)
return
}
@@ -424,7 +424,7 @@ func LicensesDeletePackage(ctx *context.Context) {
// LicensesEditKey shows the edit form for an org license key.
func LicensesEditKey(ctx *context.Context) {
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.ServerError("GetLicenseKeyByID", err)
return
@@ -452,7 +452,7 @@ func LicensesEditKey(ctx *context.Context) {
// LicensesEditKeyPost saves edits to an org license key.
func LicensesEditKeyPost(ctx *context.Context) {
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.ServerError("GetLicenseKeyByID", err)
return
@@ -481,7 +481,7 @@ func LicensesEditKeyPost(ctx *context.Context) {
key.ExpiresUnix = 0
}
if err := licenses.UpdateLicenseKey(ctx, key); err != nil {
if err := updateserver_model.UpdateLicenseKey(ctx, key); err != nil {
ctx.ServerError("UpdateLicenseKey", err)
return
}
@@ -493,14 +493,14 @@ func LicensesEditKeyPost(ctx *context.Context) {
// LicensesRevokeKey handles POST to revoke an org license key.
func LicensesRevokeKey(ctx *context.Context) {
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.ServerError("GetLicenseKeyByID", err)
return
}
key.IsActive = false
if err := licenses.UpdateLicenseKey(ctx, key); err != nil {
if err := updateserver_model.UpdateLicenseKey(ctx, key); err != nil {
ctx.ServerError("UpdateLicenseKey", err)
return
}
@@ -512,13 +512,13 @@ func LicensesRevokeKey(ctx *context.Context) {
// LicensesRenewKey extends a license key's expiration by the package's duration.
func LicensesRenewKey(ctx *context.Context) {
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.ServerError("GetLicenseKeyByID", err)
return
}
pkg, err := licenses.GetLicensePackageByID(ctx, key.PackageID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, key.PackageID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
@@ -529,7 +529,7 @@ func LicensesRenewKey(ctx *context.Context) {
days = 365 // default to 1 year for lifetime packages
}
if err := licenses.RenewLicenseKey(ctx, keyID, days); err != nil {
if err := updateserver_model.RenewLicenseKey(ctx, keyID, days); err != nil {
ctx.ServerError("RenewLicenseKey", err)
return
}
@@ -545,7 +545,7 @@ func LicensesDeleteKey(ctx *context.Context) {
return
}
keyID := ctx.PathParamInt64("id")
if err := licenses.DeleteLicenseKey(ctx, keyID); err != nil {
if err := updateserver_model.DeleteLicenseKey(ctx, keyID); err != nil {
ctx.ServerError("DeleteLicenseKey", err)
return
}
+4 -4
View File
@@ -7,7 +7,7 @@ import (
"net/http"
"strings"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/templates"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/services/context"
)
@@ -22,7 +22,7 @@ func SettingsUpdateStreams(ctx *context.Context) {
orgID := ctx.Org.Organization.ID
cfg, err := licenses.GetOrgConfig(ctx, orgID)
cfg, err := updateserver_model.GetOrgConfig(ctx, orgID)
if err != nil {
ctx.ServerError("GetOrgConfig", err)
return
@@ -37,7 +37,7 @@ func SettingsUpdateStreams(ctx *context.Context) {
func SettingsUpdateStreamsPost(ctx *context.Context) {
orgID := ctx.Org.Organization.ID
cfg := &licenses.UpdateStreamConfig{
cfg := &updateserver_model.UpdateStreamConfig{
OwnerID: orgID,
RepoID: 0,
StreamMode: ctx.FormString("stream_mode"),
@@ -64,7 +64,7 @@ func SettingsUpdateStreamsPost(ctx *context.Context) {
cfg.StreamMode = "joomla"
}
if err := licenses.SaveConfig(ctx, cfg); err != nil {
if err := updateserver_model.SaveConfig(ctx, cfg); err != nil {
ctx.ServerError("SaveConfig", err)
return
}
+2 -2
View File
@@ -9,7 +9,7 @@ import (
"net/http"
"strings"
licenses_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/httplib"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/log"
@@ -87,7 +87,7 @@ func CDNHandler(w http.ResponseWriter, req *http.Request) {
// If the release is assigned to an update stream, CDN is disabled -
// the update server handles distribution for streamed releases.
if stream := licenses_model.GetReleaseStream(req.Context(), release.ID); stream != "" {
if stream := updateserver_model.GetReleaseStream(req.Context(), release.ID); stream != "" {
http.Error(w, "Forbidden: release is served via update stream", http.StatusForbidden)
return
}
+2 -2
View File
@@ -10,7 +10,7 @@ import (
"strings"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/services/context"
)
@@ -58,7 +58,7 @@ func ServeChangelogXML(ctx *context.Context) {
}
// Get extension metadata for element name and type.
cfg := licenses.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
cfg := updateserver_model.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
element := strings.ToLower(repo.Name)
extType := "component"
if cfg != nil {
+7 -7
View File
@@ -4,7 +4,7 @@
package repo
import (
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/log"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/services/context"
)
@@ -20,7 +20,7 @@ func CheckDownloadGating(ctx *context.Context, tagName string) bool {
repo := ctx.Repo.Repository
// Check effective config (repo override → org default).
cfg := licenses.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
cfg := updateserver_model.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
if cfg == nil || !cfg.LicensingEnabled {
return true // licensing not enabled — allow all downloads
}
@@ -38,8 +38,8 @@ func CheckDownloadGating(ctx *context.Context, tagName string) bool {
// For prerelease-only gating, check if this is a prerelease tag.
if gating == "prerelease" && tagName != "" {
streams := licenses.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
matched := licenses.MatchStreamFromTag(tagName, false, streams)
streams := updateserver_model.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
matched := updateserver_model.MatchStreamFromTag(tagName, false, streams)
if matched == "stable" {
return true // stable releases are public
}
@@ -60,14 +60,14 @@ func CheckDownloadGating(ctx *context.Context, tagName string) bool {
}
domain := ctx.FormString("domain")
key, _, err := licenses.ValidateLicenseKeyForRepo(ctx, rawKey, domain, repo.ID)
key, _, err := updateserver_model.ValidateLicenseKeyForRepo(ctx, rawKey, domain, repo.ID)
if err != nil {
log.Debug("Download gating: key validation failed: %v", err)
return false
}
// Record heartbeat on successful download validation.
_ = licenses.TouchHeartbeat(ctx, key.ID)
_ = updateserver_model.TouchHeartbeat(ctx, key.ID)
return true
}
@@ -76,7 +76,7 @@ func GetSupportURL(ctx *context.Context) string {
if ctx.Repo == nil || ctx.Repo.Repository == nil {
return ""
}
cfg := licenses.GetEffectiveConfig(ctx, ctx.Repo.Repository.OwnerID, ctx.Repo.Repository.ID)
cfg := updateserver_model.GetEffectiveConfig(ctx, ctx.Repo.Repository.OwnerID, ctx.Repo.Repository.ID)
if cfg != nil && cfg.SupportURL != "" {
return cfg.SupportURL
}
+58 -58
View File
@@ -9,7 +9,7 @@ import (
"strings"
"time"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
unit_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/unit"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/json"
@@ -48,7 +48,7 @@ type ChannelItem struct {
}
// buildChannelItems converts stream definitions into combolist items.
func buildChannelItems(streams []licenses.StreamDef) []ChannelItem {
func buildChannelItems(streams []updateserver_model.StreamDef) []ChannelItem {
items := make([]ChannelItem, 0, len(streams))
for _, s := range streams {
label := s.Name
@@ -62,7 +62,7 @@ func buildChannelItems(streams []licenses.StreamDef) []ChannelItem {
// LicensePackageDisplay is used in templates.
type LicensePackageDisplay struct {
*licenses.LicensePackage
*updateserver_model.LicensePackage
KeyCount int64
Created time.Time
}
@@ -80,7 +80,7 @@ func Licenses(ctx *context.Context) {
// Auto-create master package + key if admin and none exist.
if canWriteLicenses {
newMasterKey, err := licenses.EnsureMasterKey(ctx, ownerID)
newMasterKey, err := updateserver_model.EnsureMasterKey(ctx, ownerID)
if err != nil {
ctx.ServerError("EnsureMasterKey", err)
return
@@ -91,10 +91,10 @@ func Licenses(ctx *context.Context) {
}
// Always load the master key for display (prefix + status).
masterKey, _ := licenses.GetMasterKey(ctx, ownerID)
masterKey, _ := updateserver_model.GetMasterKey(ctx, ownerID)
ctx.Data["MasterKey"] = masterKey
pkgs, err := licenses.ListLicensePackages(ctx, ownerID)
pkgs, err := updateserver_model.ListLicensePackages(ctx, ownerID)
if err != nil {
ctx.ServerError("ListLicensePackages", err)
return
@@ -102,7 +102,7 @@ func Licenses(ctx *context.Context) {
var display []LicensePackageDisplay
for _, pkg := range pkgs {
count, _ := licenses.CountKeysByPackage(ctx, pkg.ID)
count, _ := updateserver_model.CountKeysByPackage(ctx, pkg.ID)
display = append(display, LicensePackageDisplay{
LicensePackage: pkg,
KeyCount: count,
@@ -115,11 +115,11 @@ func Licenses(ctx *context.Context) {
searchQuery := strings.TrimSpace(ctx.FormString("q"))
ctx.Data["SearchQuery"] = searchQuery
var keys []*licenses.LicenseKey
var keys []*updateserver_model.LicenseKey
if searchQuery != "" {
keys, err = licenses.SearchLicenseKeys(ctx, ownerID, searchQuery)
keys, err = updateserver_model.SearchLicenseKeys(ctx, ownerID, searchQuery)
} else {
keys, err = licenses.ListLicenseKeys(ctx, ownerID)
keys, err = updateserver_model.ListLicenseKeys(ctx, ownerID)
}
if err != nil {
ctx.ServerError("ListLicenseKeys", err)
@@ -129,10 +129,10 @@ func Licenses(ctx *context.Context) {
ctx.Data["CanDelete"] = canDeleteLicenses(ctx)
// Load archived packages.
archivedPkgs, _ := licenses.ListArchivedLicensePackages(ctx, ownerID)
archivedPkgs, _ := updateserver_model.ListArchivedLicensePackages(ctx, ownerID)
var archivedDisplay []LicensePackageDisplay
for _, pkg := range archivedPkgs {
count, _ := licenses.CountKeysByPackage(ctx, pkg.ID)
count, _ := updateserver_model.CountKeysByPackage(ctx, pkg.ID)
archivedDisplay = append(archivedDisplay, LicensePackageDisplay{
LicensePackage: pkg,
KeyCount: count,
@@ -142,12 +142,12 @@ func Licenses(ctx *context.Context) {
ctx.Data["ArchivedPackages"] = archivedDisplay
// Load available streams for the channels combolist.
orgCfg, _ := licenses.GetOrgConfig(ctx, ownerID)
var streams []licenses.StreamDef
orgCfg, _ := updateserver_model.GetOrgConfig(ctx, ownerID)
var streams []updateserver_model.StreamDef
if orgCfg != nil {
streams = orgCfg.GetActiveStreams()
} else {
streams = licenses.DefaultJoomlaStreams()
streams = updateserver_model.DefaultJoomlaStreams()
}
ctx.Data["AvailableStreams"] = streams
ctx.Data["ChannelItems"] = buildChannelItems(streams)
@@ -186,7 +186,7 @@ func LicensesCreatePackage(ctx *context.Context) {
repoScope = "all"
}
pkg := &licenses.LicensePackage{
pkg := &updateserver_model.LicensePackage{
OwnerID: ctx.Repo.Repository.OwnerID,
Name: name,
Description: ctx.FormString("description"),
@@ -199,7 +199,7 @@ func LicensesCreatePackage(ctx *context.Context) {
IsActive: true,
}
if err := licenses.CreateLicensePackage(ctx, pkg); err != nil {
if err := updateserver_model.CreateLicensePackage(ctx, pkg); err != nil {
ctx.ServerError("CreateLicensePackage", err)
return
}
@@ -213,21 +213,21 @@ func LicensesRegenerateMasterKey(ctx *context.Context) {
ownerID := ctx.Repo.Repository.OwnerID
// Deactivate the old master key.
oldKey, _ := licenses.GetMasterKey(ctx, ownerID)
oldKey, _ := updateserver_model.GetMasterKey(ctx, ownerID)
if oldKey != nil {
oldKey.IsActive = false
_ = licenses.UpdateLicenseKey(ctx, oldKey)
_ = updateserver_model.UpdateLicenseKey(ctx, oldKey)
}
// Find the master package.
pkgs, err := licenses.ListLicensePackages(ctx, ownerID)
pkgs, err := updateserver_model.ListLicensePackages(ctx, ownerID)
if err != nil {
ctx.ServerError("ListLicensePackages", err)
return
}
var masterPkg *licenses.LicensePackage
var masterPkg *updateserver_model.LicensePackage
for _, pkg := range pkgs {
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
masterPkg = pkg
break
}
@@ -239,13 +239,13 @@ func LicensesRegenerateMasterKey(ctx *context.Context) {
}
// Create a new master key.
newKey := &licenses.LicenseKey{
newKey := &updateserver_model.LicenseKey{
PackageID: masterPkg.ID,
OwnerID: ownerID,
IsInternal: true,
IsActive: true,
}
rawKey, err := licenses.CreateLicenseKey(ctx, newKey)
rawKey, err := updateserver_model.CreateLicenseKey(ctx, newKey)
if err != nil {
ctx.ServerError("CreateLicenseKey", err)
return
@@ -270,7 +270,7 @@ func LicensesGenerateKey(ctx *context.Context) {
return
}
pkg, err := licenses.GetLicensePackageByID(ctx, packageID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, packageID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
@@ -282,7 +282,7 @@ func LicensesGenerateKey(ctx *context.Context) {
domainRestriction = pkg.DomainRestriction
}
key := &licenses.LicenseKey{
key := &updateserver_model.LicenseKey{
PackageID: packageID,
OwnerID: ctx.Repo.Repository.OwnerID,
IsActive: true,
@@ -301,13 +301,13 @@ func LicensesGenerateKey(ctx *context.Context) {
var rawKey string
customKey := strings.TrimSpace(ctx.FormString("custom_key"))
if customKey != "" && (ctx.IsUserSiteAdmin() || ctx.Repo.Permission.IsOwner()) {
if err := licenses.CreateLicenseKeyCustom(ctx, key, customKey); err != nil {
if err := updateserver_model.CreateLicenseKeyCustom(ctx, key, customKey); err != nil {
ctx.ServerError("CreateLicenseKeyCustom", err)
return
}
rawKey = customKey
} else {
rawKey, err = licenses.CreateLicenseKey(ctx, key)
rawKey, err = updateserver_model.CreateLicenseKey(ctx, key)
if err != nil {
ctx.ServerError("CreateLicenseKey", err)
return
@@ -323,10 +323,10 @@ func LicensesGenerateKey(ctx *context.Context) {
// Re-render the page with the new key displayed.
ownerID := ctx.Repo.Repository.OwnerID
pkgs, _ := licenses.ListLicensePackages(ctx, ownerID)
pkgs, _ := updateserver_model.ListLicensePackages(ctx, ownerID)
var display []LicensePackageDisplay
for _, p := range pkgs {
count, _ := licenses.CountKeysByPackage(ctx, p.ID)
count, _ := updateserver_model.CountKeysByPackage(ctx, p.ID)
display = append(display, LicensePackageDisplay{
LicensePackage: p,
KeyCount: count,
@@ -334,15 +334,15 @@ func LicensesGenerateKey(ctx *context.Context) {
})
}
ctx.Data["LicensePackages"] = display
keys, _ := licenses.ListLicenseKeys(ctx, ownerID)
keys, _ := updateserver_model.ListLicenseKeys(ctx, ownerID)
ctx.Data["LicenseKeys"] = keys
orgCfg, _ := licenses.GetOrgConfig(ctx, ownerID)
var genStreams []licenses.StreamDef
orgCfg, _ := updateserver_model.GetOrgConfig(ctx, ownerID)
var genStreams []updateserver_model.StreamDef
if orgCfg != nil {
genStreams = orgCfg.GetActiveStreams()
} else {
genStreams = licenses.DefaultJoomlaStreams()
genStreams = updateserver_model.DefaultJoomlaStreams()
}
ctx.Data["AvailableStreams"] = genStreams
ctx.Data["ChannelItems"] = buildChannelItems(genStreams)
@@ -353,14 +353,14 @@ func LicensesGenerateKey(ctx *context.Context) {
// LicensesRevokeKey handles POST to revoke a license key.
func LicensesRevokeKey(ctx *context.Context) {
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.ServerError("GetLicenseKeyByID", err)
return
}
key.IsActive = false
if err := licenses.UpdateLicenseKey(ctx, key); err != nil {
if err := updateserver_model.UpdateLicenseKey(ctx, key); err != nil {
ctx.ServerError("UpdateLicenseKey", err)
return
}
@@ -375,7 +375,7 @@ const tplLicensesEditKey templates.TplName = "repo/licenses_edit_key"
// LicensesEditKey shows the edit form for a license key.
func LicensesEditKey(ctx *context.Context) {
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.ServerError("GetLicenseKeyByID", err)
return
@@ -404,7 +404,7 @@ func LicensesEditKey(ctx *context.Context) {
// LicensesEditKeyPost saves edits to a license key.
func LicensesEditKeyPost(ctx *context.Context) {
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.ServerError("GetLicenseKeyByID", err)
return
@@ -433,7 +433,7 @@ func LicensesEditKeyPost(ctx *context.Context) {
key.ExpiresUnix = 0
}
if err := licenses.UpdateLicenseKey(ctx, key); err != nil {
if err := updateserver_model.UpdateLicenseKey(ctx, key); err != nil {
ctx.ServerError("UpdateLicenseKey", err)
return
}
@@ -445,13 +445,13 @@ func LicensesEditKeyPost(ctx *context.Context) {
// LicensesEditPackage shows the edit form for a license package.
func LicensesEditPackage(ctx *context.Context) {
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
}
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
ctx.Flash.Error("Master package cannot be edited")
ctx.Redirect(ctx.Repo.RepoLink + "/licenses")
return
@@ -465,12 +465,12 @@ func LicensesEditPackage(ctx *context.Context) {
ctx.Data["SelectedChannels"] = selectedChannels
ownerID := ctx.Repo.Repository.OwnerID
orgCfg, _ := licenses.GetOrgConfig(ctx, ownerID)
var editStreams []licenses.StreamDef
orgCfg, _ := updateserver_model.GetOrgConfig(ctx, ownerID)
var editStreams []updateserver_model.StreamDef
if orgCfg != nil {
editStreams = orgCfg.GetActiveStreams()
} else {
editStreams = licenses.DefaultJoomlaStreams()
editStreams = updateserver_model.DefaultJoomlaStreams()
}
ctx.Data["AvailableStreams"] = editStreams
ctx.Data["ChannelItems"] = buildChannelItems(editStreams)
@@ -482,13 +482,13 @@ func LicensesEditPackage(ctx *context.Context) {
// LicensesEditPackagePost saves edits to a license package.
func LicensesEditPackagePost(ctx *context.Context) {
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
}
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
ctx.Flash.Error("Master package cannot be edited")
ctx.Redirect(ctx.Repo.RepoLink + "/licenses")
return
@@ -518,7 +518,7 @@ func LicensesEditPackagePost(ctx *context.Context) {
pkg.DomainRestriction = strings.TrimSpace(ctx.FormString("domain_restriction"))
pkg.IsActive = ctx.FormString("is_active") == "on"
if err := licenses.UpdateLicensePackage(ctx, pkg); err != nil {
if err := updateserver_model.UpdateLicensePackage(ctx, pkg); err != nil {
ctx.ServerError("UpdateLicensePackage", err)
return
}
@@ -535,17 +535,17 @@ func canDeleteLicenses(ctx *context.Context) bool {
// LicensesArchivePackage archives a license package.
func LicensesArchivePackage(ctx *context.Context) {
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
}
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
ctx.Flash.Error("Master package cannot be archived")
ctx.Redirect(ctx.Repo.RepoLink + "/licenses")
return
}
if err := licenses.ArchiveLicensePackage(ctx, pkgID); err != nil {
if err := updateserver_model.ArchiveLicensePackage(ctx, pkgID); err != nil {
ctx.ServerError("ArchiveLicensePackage", err)
return
}
@@ -556,7 +556,7 @@ func LicensesArchivePackage(ctx *context.Context) {
// LicensesUnarchivePackage removes archive status from a package.
func LicensesUnarchivePackage(ctx *context.Context) {
pkgID := ctx.PathParamInt64("id")
if err := licenses.UnarchiveLicensePackage(ctx, pkgID); err != nil {
if err := updateserver_model.UnarchiveLicensePackage(ctx, pkgID); err != nil {
ctx.ServerError("UnarchiveLicensePackage", err)
return
}
@@ -571,17 +571,17 @@ func LicensesDeletePackage(ctx *context.Context) {
return
}
pkgID := ctx.PathParamInt64("id")
pkg, err := licenses.GetLicensePackageByID(ctx, pkgID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, pkgID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
}
if pkg.Name == licenses.MasterPackageName {
if pkg.Name == updateserver_model.MasterPackageName {
ctx.Flash.Error("Master package cannot be deleted")
ctx.Redirect(ctx.Repo.RepoLink + "/licenses")
return
}
if err := licenses.DeleteLicensePackage(ctx, pkgID); err != nil {
if err := updateserver_model.DeleteLicensePackage(ctx, pkgID); err != nil {
ctx.ServerError("DeleteLicensePackage", err)
return
}
@@ -593,13 +593,13 @@ func LicensesDeletePackage(ctx *context.Context) {
// LicensesRenewKey extends a license key's expiration by the package's duration.
func LicensesRenewKey(ctx *context.Context) {
keyID := ctx.PathParamInt64("id")
key, err := licenses.GetLicenseKeyByID(ctx, keyID)
key, err := updateserver_model.GetLicenseKeyByID(ctx, keyID)
if err != nil {
ctx.ServerError("GetLicenseKeyByID", err)
return
}
pkg, err := licenses.GetLicensePackageByID(ctx, key.PackageID)
pkg, err := updateserver_model.GetLicensePackageByID(ctx, key.PackageID)
if err != nil {
ctx.ServerError("GetLicensePackageByID", err)
return
@@ -610,7 +610,7 @@ func LicensesRenewKey(ctx *context.Context) {
days = 365 // default to 1 year for lifetime packages
}
if err := licenses.RenewLicenseKey(ctx, keyID, days); err != nil {
if err := updateserver_model.RenewLicenseKey(ctx, keyID, days); err != nil {
ctx.ServerError("RenewLicenseKey", err)
return
}
@@ -626,7 +626,7 @@ func LicensesDeleteKey(ctx *context.Context) {
return
}
keyID := ctx.PathParamInt64("id")
if err := licenses.DeleteLicenseKey(ctx, keyID); err != nil {
if err := updateserver_model.DeleteLicenseKey(ctx, keyID); err != nil {
ctx.ServerError("DeleteLicenseKey", err)
return
}
+7 -7
View File
@@ -14,7 +14,7 @@ import (
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
git_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/git"
licenses_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/renderhelper"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/unit"
@@ -359,11 +359,11 @@ func newReleaseCommon(ctx *context.Context) {
// Load available streams for the stream selector (when licensing enabled).
if ctx.Data["LicensingEnabled"] == true {
ownerID := ctx.Repo.Repository.OwnerID
orgCfg, _ := licenses_model.GetOrgConfig(ctx, ownerID)
orgCfg, _ := updateserver_model.GetOrgConfig(ctx, ownerID)
if orgCfg != nil {
ctx.Data["AvailableStreams"] = orgCfg.GetActiveStreams()
} else {
ctx.Data["AvailableStreams"] = licenses_model.DefaultJoomlaStreams()
ctx.Data["AvailableStreams"] = updateserver_model.DefaultJoomlaStreams()
}
}
@@ -534,7 +534,7 @@ func NewReleasePost(ctx *context.Context) {
}
// Save manual stream assignment if specified.
if streamName := form.UpdateStream; streamName != "" {
_ = licenses_model.SetReleaseStream(ctx, rel.ID, rel.RepoID, streamName)
_ = updateserver_model.SetReleaseStream(ctx, rel.ID, rel.RepoID, streamName)
}
ctx.Redirect(ctx.Repo.RepoLink + "/releases")
return
@@ -596,7 +596,7 @@ func EditRelease(ctx *context.Context) {
ctx.Data["content"] = rel.Note
ctx.Data["prerelease"] = rel.IsPrerelease
ctx.Data["IsDraft"] = rel.IsDraft
releaseStream := licenses_model.GetReleaseStream(ctx, rel.ID)
releaseStream := updateserver_model.GetReleaseStream(ctx, rel.ID)
ctx.Data["ReleaseStream"] = releaseStream
ctx.Data["ReleaseHasStream"] = releaseStream != ""
ctx.Data["CDNEnabled"] = setting.CDN.Enabled
@@ -682,9 +682,9 @@ func EditReleasePost(ctx *context.Context) {
}
// Save manual stream assignment.
if streamName := form.UpdateStream; streamName != "" {
_ = licenses_model.SetReleaseStream(ctx, rel.ID, rel.RepoID, streamName)
_ = updateserver_model.SetReleaseStream(ctx, rel.ID, rel.RepoID, streamName)
} else {
_ = licenses_model.DeleteReleaseStream(ctx, rel.ID)
_ = updateserver_model.DeleteReleaseStream(ctx, rel.ID)
}
// Update per-asset CDN visibility flags.
+5 -5
View File
@@ -8,7 +8,7 @@ import (
"fmt"
"net/http"
licenses_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/log"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/templates"
@@ -93,7 +93,7 @@ func ManifestSettings(ctx *context.Context) {
ctx.Data["Manifest"] = manifest
// Load update server / licensing config for the combined page.
repoCfg, _ := licenses_model.GetRepoConfig(ctx, ctx.Repo.Repository.ID)
repoCfg, _ := updateserver_model.GetRepoConfig(ctx, ctx.Repo.Repository.ID)
ctx.Data["RepoUpdateConfig"] = repoCfg
ctx.HTML(http.StatusOK, tplSettingsManifest)
@@ -152,11 +152,11 @@ func saveLicensingSettings(ctx *context.Context) {
enabled := ctx.FormString("enable_licensing") == "on"
if !enabled {
if err := licenses_model.DeleteRepoConfig(ctx, repo.ID); err != nil {
if err := updateserver_model.DeleteRepoConfig(ctx, repo.ID); err != nil {
log.Error("DeleteRepoConfig: %v", err)
}
} else {
updateCfg := &licenses_model.UpdateStreamConfig{
updateCfg := &updateserver_model.UpdateStreamConfig{
OwnerID: repo.OwnerID,
RepoID: repo.ID,
Platform: updatePlatform,
@@ -167,7 +167,7 @@ func saveLicensingSettings(ctx *context.Context) {
StreamMode: "joomla",
}
if err := licenses_model.SaveConfig(ctx, updateCfg); err != nil {
if err := updateserver_model.SaveConfig(ctx, updateCfg); err != nil {
log.Error("SaveConfig: %v", err)
ctx.ServerError("SaveConfig", err)
return
+5 -5
View File
@@ -12,7 +12,7 @@ import (
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/organization"
licenses_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/perm"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
unit_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/unit"
@@ -101,7 +101,7 @@ func SettingsCtxData(ctx *context.Context) {
// Settings show a repository's settings page
func Settings(ctx *context.Context) {
repoCfg, _ := licenses_model.GetRepoConfig(ctx, ctx.Repo.Repository.ID)
repoCfg, _ := updateserver_model.GetRepoConfig(ctx, ctx.Repo.Repository.ID)
ctx.Data["RepoUpdateConfig"] = repoCfg
ctx.HTML(http.StatusOK, tplSettingsOptions)
}
@@ -679,7 +679,7 @@ func handleSettingsPostAdvanced(ctx *context.Context) {
// so it falls through to org defaults cleanly.
if !form.EnableLicensing {
// Remove repo-level override so org config takes effect
if err := licenses_model.DeleteRepoConfig(ctx, repo.ID); err != nil {
if err := updateserver_model.DeleteRepoConfig(ctx, repo.ID); err != nil {
log.Error("DeleteRepoConfig: %v", err)
}
} else {
@@ -687,7 +687,7 @@ func handleSettingsPostAdvanced(ctx *context.Context) {
if updatePlatform == "" {
updatePlatform = "joomla"
}
updateCfg := &licenses_model.UpdateStreamConfig{
updateCfg := &updateserver_model.UpdateStreamConfig{
OwnerID: repo.OwnerID,
RepoID: repo.ID,
Platform: updatePlatform,
@@ -703,7 +703,7 @@ func handleSettingsPostAdvanced(ctx *context.Context) {
PHPMinimum: form.PHPMinimum,
StreamMode: "joomla",
}
if err := licenses_model.SaveConfig(ctx, updateCfg); err != nil {
if err := updateserver_model.SaveConfig(ctx, updateCfg); err != nil {
log.Error("SaveConfig: %v", err)
}
}
+5 -5
View File
@@ -7,7 +7,7 @@ import (
"net/http"
"strings"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/json"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/log"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/services/context"
@@ -33,15 +33,15 @@ func validateUpdateKey(ctx *context.Context) (allowedChannels []string, ok bool,
}
domain := ctx.FormString("domain")
key, pkg, err := licenses.ValidateLicenseKeyForRepo(ctx, rawKey, domain, ctx.Repo.Repository.ID)
key, pkg, err := updateserver_model.ValidateLicenseKeyForRepo(ctx, rawKey, domain, ctx.Repo.Repository.ID)
if err != nil {
log.Debug("License key validation failed: %v", err)
return nil, false, false
}
// Update heartbeat and record usage.
_ = licenses.TouchHeartbeat(ctx, key.ID)
_ = licenses.RecordUsage(ctx, &licenses.LicenseKeyUsage{
_ = updateserver_model.TouchHeartbeat(ctx, key.ID)
_ = updateserver_model.RecordUsage(ctx, &updateserver_model.LicenseKeyUsage{
KeyID: key.ID,
RepoID: ctx.Repo.Repository.ID,
Domain: domain,
@@ -93,7 +93,7 @@ func ServeUpdatesXML(ctx *context.Context) {
return
}
repoCfg, _ := licenses.GetRepoConfig(ctx, ctx.Repo.Repository.ID)
repoCfg, _ := updateserver_model.GetRepoConfig(ctx, ctx.Repo.Repository.ID)
// Show <downloadkey> only when downloads are gated (prerelease or all).
// No gating = no license keys needed = no downloadkey element.
requireKey := repoCfg != nil && repoCfg.DownloadGating != "" && repoCfg.DownloadGating != "none"
+6 -6
View File
@@ -18,7 +18,7 @@ import (
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
git_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/git"
issues_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/issues"
licenses_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
access_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/perm/access"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
unit_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/unit"
@@ -438,8 +438,8 @@ func repoAssignmentLegacy(ctx *Context, data *repoAssignmentPrepareDataStruct) {
// Check if licensing is enabled — licensed repos allow access to
// releases and downloads via license key, even without membership.
orgCfg, _ := licenses_model.GetOrgConfig(ctx, repo.OwnerID)
repoCfg, _ := licenses_model.GetRepoConfig(ctx, repo.ID)
orgCfg, _ := updateserver_model.GetOrgConfig(ctx, repo.OwnerID)
repoCfg, _ := updateserver_model.GetRepoConfig(ctx, repo.ID)
licensingEnabled := (orgCfg != nil && orgCfg.LicensingEnabled) ||
(repoCfg != nil && repoCfg.LicensingEnabled)
@@ -652,12 +652,12 @@ func repoAssignmentPrepareTemplateData(ctx *Context, data *repoAssignmentPrepare
}
// Check if licensing is enabled for this repo/org.
orgCfg, _ := licenses_model.GetOrgConfig(ctx, repo.OwnerID)
repoUpdateCfg, _ := licenses_model.GetRepoConfig(ctx, repo.ID)
orgCfg, _ := updateserver_model.GetOrgConfig(ctx, repo.OwnerID)
repoUpdateCfg, _ := updateserver_model.GetRepoConfig(ctx, repo.ID)
licensingEnabled := (orgCfg != nil && orgCfg.LicensingEnabled) ||
(repoUpdateCfg != nil && repoUpdateCfg.LicensingEnabled)
numLicensePackages, _ := db.Count[licenses_model.LicensePackage](ctx, licenses_model.FindLicensePackageOptions{
numLicensePackages, _ := db.Count[updateserver_model.LicensePackage](ctx, updateserver_model.FindLicensePackageOptions{
OwnerID: repo.OwnerID,
})
ctx.Data["NumLicensePackages"] = numLicensePackages
+2 -2
View File
@@ -4,7 +4,7 @@
package context
import (
licenses_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
user_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/user"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/log"
@@ -43,7 +43,7 @@ func RepoAssignmentPublicFeed() func(ctx *Context) {
ctx.Repo.Repository = repo
// Load update config for platform-aware routing.
repoUpdateCfg, _ := licenses_model.GetRepoConfig(ctx, repo.ID)
repoUpdateCfg, _ := updateserver_model.GetRepoConfig(ctx, repo.ID)
if repoUpdateCfg != nil {
ctx.Data["RepoUpdatePlatform"] = repoUpdateCfg.Platform
} else {
+2 -2
View File
@@ -9,7 +9,7 @@ import (
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models"
git_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/git"
licenses_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
user_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/user"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/webhook"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/git/gitcmd"
@@ -167,7 +167,7 @@ func registerCleanupExpiredLicenseKeys() {
Schedule: "@weekly",
}, func(ctx context.Context, _ *user_model.User, config Config) error {
// Delete non-internal keys that expired more than 365 days ago.
deleted, err := licenses_model.DeleteExpiredKeys(ctx, 365)
deleted, err := updateserver_model.DeleteExpiredKeys(ctx, 365)
if err != nil {
return err
}
+4 -4
View File
@@ -11,7 +11,7 @@ import (
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
git_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/git"
licenses_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
user_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/user"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/container"
@@ -192,8 +192,8 @@ func validateTagAgainstStreams(ctx context.Context, rel *repo_model.Release) err
}
// Check if licensing is enabled at org or repo level.
orgCfg, _ := licenses_model.GetOrgConfig(ctx, repo.OwnerID)
repoCfg, _ := licenses_model.GetRepoConfig(ctx, repo.ID)
orgCfg, _ := updateserver_model.GetOrgConfig(ctx, repo.OwnerID)
repoCfg, _ := updateserver_model.GetRepoConfig(ctx, repo.ID)
licensingEnabled := (orgCfg != nil && orgCfg.LicensingEnabled) ||
(repoCfg != nil && repoCfg.LicensingEnabled)
@@ -203,7 +203,7 @@ func validateTagAgainstStreams(ctx context.Context, rel *repo_model.Release) err
// Check that the tag contains a stream-compatible suffix.
// Any prerelease suffix in the tag must match a configured stream suffix.
streams := licenses_model.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
streams := updateserver_model.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
lower := strings.ToLower(rel.TagName)
for _, s := range streams {
if s.Suffix == "" {
+4 -4
View File
@@ -10,7 +10,7 @@ import (
"time"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/setting"
)
@@ -67,7 +67,7 @@ func GenerateComposerJSON(ctx context.Context, repo *repo_model.Repository, lice
baseURL := strings.TrimSuffix(setting.AppURL, "/")
repoLink := fmt.Sprintf("%s/%s/%s", baseURL, repo.Owner.Name, repo.Name)
cfg := licenses.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
cfg := updateserver_model.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
meta := resolveExtensionMetadata(ctx, repo, cfg)
// Composer package name: vendor/package (override with resolved extension name if set)
@@ -91,7 +91,7 @@ func GenerateComposerJSON(ctx context.Context, repo *repo_model.Repository, lice
phpMin = ">=" + meta.PHPMinimum
}
streams := licenses.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
streams := updateserver_model.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
versions := make(map[string]ComposerVersion)
for _, rel := range releases {
@@ -99,7 +99,7 @@ func GenerateComposerJSON(ctx context.Context, repo *repo_model.Repository, lice
continue
}
ch := licenses.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
ch := updateserver_model.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
if ch != "stable" {
continue // Composer only serves stable versions
}
+3 -3
View File
@@ -10,7 +10,7 @@ import (
"time"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/setting"
)
@@ -59,7 +59,7 @@ func GenerateDolibarrJSON(ctx context.Context, repo *repo_model.Repository, allo
}
// Resolve effective streams.
streams := licenses.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
streams := updateserver_model.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
// Track best release per channel.
bestByChannel := make(map[string]*repo_model.Release)
@@ -67,7 +67,7 @@ func GenerateDolibarrJSON(ctx context.Context, repo *repo_model.Repository, allo
if rel.IsDraft || rel.IsTag {
continue
}
ch := licenses.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
ch := updateserver_model.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
existing, ok := bestByChannel[ch]
if !ok || rel.CreatedUnix > existing.CreatedUnix {
bestByChannel[ch] = rel
+4 -4
View File
@@ -10,7 +10,7 @@ import (
"strings"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/setting"
)
@@ -65,12 +65,12 @@ func GenerateDrupalXML(ctx context.Context, repo *repo_model.Repository, allowed
baseURL := strings.TrimSuffix(setting.AppURL, "/")
repoLink := fmt.Sprintf("%s/%s/%s", baseURL, repo.Owner.Name, repo.Name)
cfg := licenses.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
cfg := updateserver_model.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
meta := resolveExtensionMetadata(ctx, repo, cfg)
shortName := meta.Element
title := meta.DisplayName
streams := licenses.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
streams := updateserver_model.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
channelAllowed := make(map[string]bool)
if len(allowedChannels) > 0 {
@@ -97,7 +97,7 @@ func GenerateDrupalXML(ctx context.Context, repo *repo_model.Repository, allowed
if rel.IsDraft || rel.IsTag {
continue
}
ch := licenses.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
ch := updateserver_model.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
if len(channelAllowed) > 0 && !channelAllowed[ch] {
continue
}
+6 -6
View File
@@ -13,7 +13,7 @@ import (
"time"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/log"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/storage"
@@ -111,7 +111,7 @@ func channelFromTag(tagName string, isPrerelease bool) string {
// isStreamName checks if a string matches any stream name (indicating the tag
// is a stream name, not a version number).
func isStreamName(s string, streams []licenses.StreamDef) bool {
func isStreamName(s string, streams []updateserver_model.StreamDef) bool {
for _, st := range streams {
if strings.EqualFold(st.Name, s) {
return true
@@ -178,7 +178,7 @@ type extensionMetadata struct {
// resolveExtensionMetadata loads extension metadata from the repo manifest API.
// The manifest is the single source of truth for extension identity fields.
// The config table is only used for licensing/gating fields not in the manifest.
func resolveExtensionMetadata(ctx context.Context, repo *repo_model.Repository, cfg *licenses.UpdateStreamConfig) extensionMetadata {
func resolveExtensionMetadata(ctx context.Context, repo *repo_model.Repository, cfg *updateserver_model.UpdateStreamConfig) extensionMetadata {
m := extensionMetadata{
Element: strings.ToLower(repo.Name),
DisplayName: fmt.Sprintf("%s - %s", repo.Owner.Name, repo.Name),
@@ -259,7 +259,7 @@ func GenerateJoomlaXML(ctx context.Context, repo *repo_model.Repository, require
// Load extension metadata with cascading fallback:
// custom fields → config table → repo-derived defaults.
cfg := licenses.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
cfg := updateserver_model.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
meta := resolveExtensionMetadata(ctx, repo, cfg)
element := meta.Element
@@ -280,7 +280,7 @@ func GenerateJoomlaXML(ctx context.Context, repo *repo_model.Repository, require
}
// Resolve effective streams (repo override → org default → Joomla default).
streams := licenses.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
streams := updateserver_model.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
// Track best (latest) release per channel to emit one entry per channel.
bestByChannel := make(map[string]*repo_model.Release)
@@ -288,7 +288,7 @@ func GenerateJoomlaXML(ctx context.Context, repo *repo_model.Repository, require
if rel.IsDraft || rel.IsTag {
continue
}
ch := licenses.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
ch := updateserver_model.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
existing, ok := bestByChannel[ch]
if !ok || rel.CreatedUnix > existing.CreatedUnix {
bestByChannel[ch] = rel
+4 -4
View File
@@ -11,7 +11,7 @@ import (
"time"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/setting"
)
@@ -54,7 +54,7 @@ func GeneratePrestaShopXML(ctx context.Context, repo *repo_model.Repository, all
baseURL := strings.TrimSuffix(setting.AppURL, "/")
repoLink := fmt.Sprintf("%s/%s/%s", baseURL, repo.Owner.Name, repo.Name)
cfg := licenses.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
cfg := updateserver_model.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
meta := resolveExtensionMetadata(ctx, repo, cfg)
moduleName := meta.Element
displayName := meta.DisplayName
@@ -64,7 +64,7 @@ func GeneratePrestaShopXML(ctx context.Context, repo *repo_model.Repository, all
maintainer = cfg.Maintainer
}
streams := licenses.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
streams := updateserver_model.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
// Channel filtering.
channelAllowed := make(map[string]bool)
@@ -80,7 +80,7 @@ func GeneratePrestaShopXML(ctx context.Context, repo *repo_model.Repository, all
if rel.IsDraft || rel.IsTag {
continue
}
ch := licenses.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
ch := updateserver_model.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
existing, ok := bestByChannel[ch]
if !ok || rel.CreatedUnix > existing.CreatedUnix {
bestByChannel[ch] = rel
+4 -4
View File
@@ -10,7 +10,7 @@ import (
"time"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/setting"
)
@@ -49,7 +49,7 @@ func GenerateWHMCSJSON(ctx context.Context, repo *repo_model.Repository, license
baseURL := strings.TrimSuffix(setting.AppURL, "/")
repoLink := fmt.Sprintf("%s/%s/%s", baseURL, repo.Owner.Name, repo.Name)
cfg := licenses.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
cfg := updateserver_model.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
meta := resolveExtensionMetadata(ctx, repo, cfg)
displayName := meta.DisplayName
description := meta.Description
@@ -64,7 +64,7 @@ func GenerateWHMCSJSON(ctx context.Context, repo *repo_model.Repository, license
}
}
streams := licenses.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
streams := updateserver_model.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
// Find latest stable release.
var latestStable *repo_model.Release
@@ -72,7 +72,7 @@ func GenerateWHMCSJSON(ctx context.Context, repo *repo_model.Repository, license
if rel.IsDraft || rel.IsTag {
continue
}
ch := licenses.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
ch := updateserver_model.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
if ch == "stable" {
if latestStable == nil || rel.CreatedUnix > latestStable.CreatedUnix {
latestStable = rel
+6 -6
View File
@@ -11,7 +11,7 @@ import (
"time"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licenses"
updateserver_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/updateserver"
repo_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo"
"code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/setting"
)
@@ -59,7 +59,7 @@ func GenerateWordPressJSON(ctx context.Context, repo *repo_model.Repository, lic
// Load extension metadata with cascading fallback:
// custom fields → config table → repo-derived defaults.
cfg := licenses.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
cfg := updateserver_model.GetEffectiveConfig(ctx, repo.OwnerID, repo.ID)
meta := resolveExtensionMetadata(ctx, repo, cfg)
slug := meta.Element
@@ -84,13 +84,13 @@ func GenerateWordPressJSON(ctx context.Context, repo *repo_model.Repository, lic
}
// Resolve streams and find the latest stable release.
streams := licenses.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
streams := updateserver_model.GetEffectiveStreams(ctx, repo.OwnerID, repo.ID)
var latestStable *repo_model.Release
for _, rel := range releases {
if rel.IsDraft || rel.IsTag {
continue
}
ch := licenses.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
ch := updateserver_model.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
if ch == "stable" {
if latestStable == nil || rel.CreatedUnix > latestStable.CreatedUnix {
latestStable = rel
@@ -171,14 +171,14 @@ func GenerateWordPressJSON(ctx context.Context, repo *repo_model.Repository, lic
}
// buildWordPressChangelog builds an HTML changelog from multiple releases.
func buildWordPressChangelog(ctx context.Context, releases []*repo_model.Release, streams []licenses.StreamDef) string {
func buildWordPressChangelog(ctx context.Context, releases []*repo_model.Release, streams []updateserver_model.StreamDef) string {
var b strings.Builder
count := 0
for _, rel := range releases {
if rel.IsDraft || rel.IsTag || rel.Note == "" {
continue
}
ch := licenses.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
ch := updateserver_model.ResolveReleaseStream(ctx, rel.ID, rel.TagName, rel.IsPrerelease, streams)
if ch != "stable" {
continue
}