what the heck is a cors amiright

This commit is contained in:
Bhavnoor Singh Saroya 2025-07-10 16:59:51 -07:00
commit f1465f8c53
5 changed files with 187 additions and 0 deletions

57
index.html Normal file
View file

@ -0,0 +1,57 @@
<!DOCTYPE html>
<html lang="en">
<!-- This is a simple HTML page that embeds a Python trinket using an iframe for testing -->
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Byte Camp</title>
<style>
/* Base dark mode styling */
body {
background-color: #121212;
color: #f0f0f0;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
margin: 0;
padding: 0;
}
header {
background-color: #1e1e1e;
padding: 1rem 2rem;
text-align: center;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
}
header h1 {
margin: 0;
font-size: 2rem;
color: #00d8ff;
}
main {
padding: 2rem;
}
iframe {
border: none;
width: 100%;
height: 600px;
border-radius: 8px;
background-color: #1e1e1e;
}
</style>
</head>
<body>
<header>
<h1>Byte Camp</h1>
</header>
<main>
<iframe src="https://trinket-proxy.fly.dev/embed/python/4d53507eddfe" width="100%" height="600" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>
</main>
</body>
</html>

39
trinket-proxy/Dockerfile Normal file
View file

@ -0,0 +1,39 @@
# syntax = docker/dockerfile:1
# Adjust NODE_VERSION as desired
ARG NODE_VERSION=22.13.1
FROM node:${NODE_VERSION}-slim AS base
LABEL fly_launch_runtime="Node.js"
# Node.js app lives here
WORKDIR /app
# Set production environment
ENV NODE_ENV="production"
# Throw-away build stage to reduce size of final image
FROM base AS build
# Install packages needed to build node modules
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3
# Install node modules
COPY package-lock.json package.json ./
RUN npm ci
# Copy application code
COPY . .
# Final stage for app image
FROM base
# Copy built application
COPY --from=build /app /app
# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD [ "node", "index.js" ]

22
trinket-proxy/fly.toml Normal file
View file

@ -0,0 +1,22 @@
# fly.toml app configuration file generated for trinket-proxy on 2025-07-10T16:44:50-07:00
#
# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
#
app = 'trinket-proxy'
primary_region = 'sea'
[build]
[http_service]
internal_port = 3000
force_https = true
auto_stop_machines = 'suspend'
auto_start_machines = true
min_machines_running = 0
processes = ['app']
[[vm]]
memory = '1gb'
cpu_kind = 'shared'
cpus = 1

50
trinket-proxy/index.js Normal file
View file

@ -0,0 +1,50 @@
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const https = require('https');
const app = express();
localTesting = false; // Set to true for testing, false for production
const proxyServerUrl = localTesting ? 'https://trinket-proxy.fly.dev' : 'http://localhost:3000';
const modifyHtml = (html) => {
return html
// Style injection for dark mode
.replace(
/<div id="outputContainer" class="withoutTabs">/g,
'<div id="outputContainer" class="withoutTabs" style="background-color:black; color:white">'
)
// Rewrite absolute URLs
.replace(/https:\/\/trinket\.io/g, proxyServerUrl)
.replace(/\/\/trinket\.io/g, proxyServerUrl);
};
app.use('/', async (req, res, next) => {
const targetUrl = `https://trinket.io${req.originalUrl}`;
// Only modify HTML pages (embed endpoints)
if (req.originalUrl.startsWith('/embed')) {
https.get(targetUrl, (proxyRes) => {
let body = '';
proxyRes.on('data', (chunk) => body += chunk);
proxyRes.on('end', () => {
res.set('Content-Type', 'text/html');
res.send(modifyHtml(body));
});
}).on('error', (err) => {
console.error('Proxy error:', err);
res.sendStatus(500);
});
} else {
// Static content (JS, CSS, images, etc.)
createProxyMiddleware({
target: 'https://trinket.io',
changeOrigin: true,
selfHandleResponse: false,
})(req, res, next);
}
});
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Trinket proxy running at http://localhost:${PORT}`);
});

View file

@ -0,0 +1,19 @@
{
"name": "trinket-proxy",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"express": "^5.1.0",
"http-proxy-middleware": "^2.0.6"
},
"devDependencies": {
"@flydotio/dockerfile": "^0.7.10"
}
}