|
|
@ -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); |
|
|
|