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
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:
@@ -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
-1
@@ -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"
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 == "" {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user