2020-11-16 16:55:04 +01:00
|
|
|
import Controller from "swaf/Controller";
|
|
|
|
import {NextFunction, Request, Response} from "express";
|
|
|
|
import * as https from "https";
|
|
|
|
import config from "config";
|
|
|
|
import {log} from "swaf/Logger";
|
|
|
|
|
|
|
|
export default class GiteaRepoLatestReleaseController extends Controller {
|
|
|
|
public routes(): void {
|
|
|
|
this.get('/:owner/:name/:file?', this.getFile, 'get-repo-release-file');
|
|
|
|
}
|
|
|
|
|
|
|
|
protected async getFile(req: Request, res: Response, next: NextFunction): Promise<void> {
|
|
|
|
log.info('Serving ' + req.path + ' ...');
|
|
|
|
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`, {
|
|
|
|
headers: {
|
|
|
|
'Accept': 'application/json',
|
|
|
|
},
|
|
|
|
}, r => {
|
|
|
|
let data = '';
|
|
|
|
r.on('data', c => {
|
|
|
|
data += c;
|
|
|
|
});
|
|
|
|
r.on('end', () => {
|
2020-11-16 17:19:36 +01:00
|
|
|
try {
|
|
|
|
const assets = JSON.parse(data)[0].assets;
|
2020-11-16 16:55:04 +01:00
|
|
|
|
2020-11-16 17:19:36 +01:00
|
|
|
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);
|
|
|
|
}
|
2020-11-16 16:55:04 +01:00
|
|
|
}
|
2020-11-16 17:19:36 +01:00
|
|
|
} else {
|
|
|
|
log.debug('List files');
|
|
|
|
return res.render('list-files', {assets: assets});
|
2020-11-16 16:55:04 +01:00
|
|
|
}
|
2020-11-16 17:19:36 +01:00
|
|
|
} catch (e) {
|
|
|
|
return next(e);
|
2020-11-16 16:55:04 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}).on('error', err => {
|
|
|
|
log.error(err);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|