mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-10-31 02:10:05 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
| import express from 'express';
 | |
| import * as icons from 'simple-icons';
 | |
| import sharp from 'sharp';
 | |
| 
 | |
| const app = express();
 | |
| const port = {{ container_port }};
 | |
| 
 | |
| // Helper: convert 'nextcloud' → 'siNextcloud'
 | |
| function getExportName(slug) {
 | |
|   return 'si' + slug
 | |
|     .split('-')
 | |
|     .map(part => part[0].toUpperCase() + part.slice(1))
 | |
|     .join('');
 | |
| }
 | |
| 
 | |
| // Root: redirect to your documentation
 | |
| app.get('/', (req, res) => {
 | |
|   res.redirect('{{ domains | get_url('web-app-sphinx', WEB_PROTOCOL) }}/{{ application_id | rel_role_path_by_application_id }}/README.html');
 | |
| });
 | |
| 
 | |
| // GET /:slug.svg
 | |
| app.get('/:slug.svg', (req, res) => {
 | |
|   const slug = req.params.slug.toLowerCase();
 | |
|   const exportName = getExportName(slug);
 | |
|   const icon = icons[exportName];
 | |
| 
 | |
|   if (!icon) {
 | |
|     return res.status(404).send('Icon not found');
 | |
|   }
 | |
| 
 | |
|   res.type('image/svg+xml');
 | |
|   res.send(icon.svg);
 | |
| });
 | |
| 
 | |
| // GET /:slug.png?size=...
 | |
| app.get('/:slug.png', async (req, res) => {
 | |
|   const slug = req.params.slug.toLowerCase();
 | |
|   const size = parseInt(req.query.size, 10) || 128;
 | |
|   const exportName = getExportName(slug);
 | |
|   const icon = icons[exportName];
 | |
| 
 | |
|   if (!icon) {
 | |
|     return res.status(404).send('Icon not found');
 | |
|   }
 | |
| 
 | |
|   try {
 | |
|     const pngBuffer = await sharp(Buffer.from(icon.svg))
 | |
|       .resize(size, size)
 | |
|       .png()
 | |
|       .toBuffer();
 | |
| 
 | |
|     res.type('image/png');
 | |
|     res.send(pngBuffer);
 | |
|   } catch (err) {
 | |
|     console.error('PNG generation error:', err);
 | |
|     res.status(500).send('PNG generation error');
 | |
|   }
 | |
| });
 | |
| 
 | |
| app.listen(port, () => {
 | |
|   console.log(`Simple-Icons server listening at http://0.0.0.0:${port}`);
 | |
| });
 |