mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-11-04 04:08:15 +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}`);
 | 
						|
});
 |