From 02db68a6f7d59edea8e94476e8242c824b2aac4c Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Tue, 17 Nov 2020 13:35:27 +0100 Subject: [PATCH] Serve and list older versions as well (priority is most recent version) --- .../GiteaRepoLatestReleaseController.ts | 22 ++++++++----- views/list-files.njk | 31 ++++++++++++++++--- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/controllers/GiteaRepoLatestReleaseController.ts b/src/controllers/GiteaRepoLatestReleaseController.ts index d284677..62dabb6 100644 --- a/src/controllers/GiteaRepoLatestReleaseController.ts +++ b/src/controllers/GiteaRepoLatestReleaseController.ts @@ -3,6 +3,7 @@ import {NextFunction, Request, Response} from "express"; import * as https from "https"; import config from "config"; import {log} from "swaf/Logger"; +import {NotFoundHttpError} from "swaf/HttpError"; export default class GiteaRepoLatestReleaseController extends Controller { public routes(): void { @@ -14,7 +15,7 @@ export default class GiteaRepoLatestReleaseController extends Controller { const {owner, name, file} = req.params; if (!owner || !name) return next(); - https.get(`${config.get('gitea_instance_url')}/api/v1/repos/${owner}/${name}/releases?limit=1`, { + https.get(`${config.get('gitea_instance_url')}/api/v1/repos/${owner}/${name}/releases`, { headers: { 'Accept': 'application/json', }, @@ -25,18 +26,25 @@ export default class GiteaRepoLatestReleaseController extends Controller { }); r.on('end', () => { try { - const assets = JSON.parse(data)[0].assets; + const releases = JSON.parse(data); if (file) { - for (const asset of assets) { - if (asset.name === file) { - log.debug('Redirect to', asset.browser_download_url); - return res.redirect(302, asset.browser_download_url); + for (const release of releases) { + for (const asset of release.assets) { + if (asset.name === file) { + log.debug('Redirect to', asset.browser_download_url); + return res.redirect(302, asset.browser_download_url); + } } } + throw new NotFoundHttpError('Asset', req.url); } else { log.debug('List files'); - return res.render('list-files', {assets: assets}); + return res.render('list-files', { + owner: owner, + name: name, + releases: releases, + }); } } catch (e) { return next(e); diff --git a/views/list-files.njk b/views/list-files.njk index d1ab4b0..9f8a98c 100644 --- a/views/list-files.njk +++ b/views/list-files.njk @@ -1,5 +1,26 @@ - + + + + + {{ owner }}/{{ name }} - releases + + + +
+

{{ owner }}/{{ name }} - releases

+ + {% for release in releases %} +
+

{{ release.name }}

+
    + {% for asset in release.assets %} +
  • #{{ asset.id }} - {{ asset.name }} + ({{ asset.size }}, {{ asset.download_count }}, {{ asset.uuid }}) +
  • + {% endfor %} +
+
+ {% endfor %} +
+ +