feat: enhance repository metadata resolution and build URL for plugin licenses

This commit is contained in:
2026-02-01 04:20:35 +00:00
parent d406e34b2f
commit f1ed790cab

View File

@@ -34,6 +34,52 @@ try {
process.exit(1); process.exit(1);
} }
function buildRepoUrl(repoEntry) {
if (!repoEntry) return null;
if (repoEntry.provider === "gitea") {
const base = (repoEntry.baseUrl || "").replace(/\/$/, "");
return base && repoEntry.repo ? `${base}/${repoEntry.repo}` : null;
}
return `https://github.com/${repoEntry.repo}`;
}
async function resolveRepoMetaFromRequest(body = {}) {
const owner = typeof body.owner === "string" ? body.owner.trim() : "";
const repository = typeof body.repository === "string" ? body.repository.trim() : "";
if (!owner || !repository) {
return null;
}
const provider = (body.provider || body.repoProvider || "github").toLowerCase();
const baseUrl = body.baseUrl || body.repoBaseUrl || (provider === "github" ? "https://github.com" : null);
const repoEntry = normalizeRepoInput(
{ repo: `${owner}/${repository}`, provider, baseUrl },
{ repo: `${owner}/${repository}`, provider, baseUrl }
);
if (!repoEntry) {
return null;
}
try {
const info = await fetchRepo(repoEntry);
const manifest = await fetchManifest(repoEntry, info.defaultBranch).catch(() => null);
const releases = await fetchReleases(repoEntry).catch(() => []);
const latestRelease = releases[0];
const version = manifest?.version || latestRelease?.tag || latestRelease?.name || info.defaultBranch || null;
const pluginName = manifest?.plugin_name || info.name || repository;
return {
repoEntry,
pluginName,
version
};
} catch (error) {
return null;
}
}
app.post("/api/auth/register", async (req, res) => { app.post("/api/auth/register", async (req, res) => {
try { try {
const { username, name, email, password } = req.body || {}; const { username, name, email, password } = req.body || {};
@@ -388,7 +434,20 @@ app.post("/api/licenses/verify", async (req, res) => {
} }
const license = await findLicenseByKey(String(key).trim()); const license = await findLicenseByKey(String(key).trim());
if (!license) { if (!license) {
return res.status(404).json({ valid: false, error: "Licentie niet gevonden." }); const repoMeta = await resolveRepoMetaFromRequest(req.body);
const fallbackPayload = repoMeta
? {
pluginVersion: repoMeta.version,
license: {
pluginName: repoMeta.pluginName,
pluginVersion: repoMeta.version,
repoFullName: repoMeta.repoEntry.repo,
repoUrl: buildRepoUrl(repoMeta.repoEntry),
repo: repoMeta.repoEntry
}
}
: {};
return res.status(404).json({ valid: false, error: "Licentie niet gevonden.", ...fallbackPayload });
} }
const rawVersion = req.body?.currentVersion ?? req.body?.pluginVersion ?? null; const rawVersion = req.body?.currentVersion ?? req.body?.pluginVersion ?? null;