Skip to content

Instantly share code, notes, and snippets.

@jRiest
Last active January 19, 2022 13:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jRiest/7893cf10c550057ce1ff53f270683e1c to your computer and use it in GitHub Desktop.
Save jRiest/7893cf10c550057ce1ff53f270683e1c to your computer and use it in GitHub Desktop.
Cloudflare worker and terraform config for partyparrot.business. Inspired by https://github.com/shrugs/partyparrot
provider "cloudflare" {}
variable "zone" {
default = "partyparrot.business"
}
resource "cloudflare_worker_script" "main_script" {
zone = "${var.zone}"
content = "${file("party_parrot_worker.js")}"
}
resource "cloudflare_worker_route" "catch_all_route" {
zone = "${var.zone}"
pattern = "*${var.zone}/*"
enabled = true
depends_on = ["cloudflare_worker_script.main_script"]
}
/*
Copyright (c) 2018, Cloudflare. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
function render(opts) {
const {grid} = opts;
const colCount = grid[0].length;
const maxSize = 30;
return `<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Party Parrot</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
height: 100%;
}
body {
min-height: 100%;
position: relative;
padding: 20px 0 40px;
font-family: sans-serif;
}
.fill {
background-repeat: no-repeat;
background-position: center center;
background-size: contain;
}
/* images from https://www.reddit.com/r/PartyParrot/wiki/hdpartyparrots */
.p0 {
/* https://i.redd.it/o0e6ehe0ay3y.gif */
background-image: url(data:image/gif;base64,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);
}
.p1 {
/* https://i.redd.it/qaufs16x9y3y.gif */
background-image: url(data:image/gif;base64,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);
}
.wrapper {
min-height: ${maxSize * 5}px;
margin: 0 20px;
}
.char {
height: 0;
padding-top: calc((1/${colCount}) * 100%);
max-width: calc((1/${colCount}) * 100%);
width: ${maxSize}px;
}
.chars {
display: flex;
align-items: center;
flex-direction: column;
}
.row {
display: flex;
max-width: 100%;
}
form {
display: flex;
margin: 100px auto 20px;
max-width: 400px;
padding: 0 20px;
}
input {
display: block;
width: 100%;
flex: 1 1 auto;
border: 1px solid #7272E9;
border-radius: 0;
border-right-width: 0;
border-top-left-radius: 6px;
border-bottom-left-radius: 6px;
font-size: 14px;
padding: 4px 12px;
}
button {
display: block;
flex: 0 0 auto;
background: #7272E9;
border: 0;
color: #fff;
padding: 15px;
border-top-right-radius: 6px;
border-bottom-right-radius: 6px;
}
.credit {
position: absolute;
bottom: 0;
right: 0;
padding: 20px;
}
a, a:visited, a:hover, a:active {
color: #7272E9;
text-decoration: none;
}
a:hover, a:active {
text-decoration: underline;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="chars">
${grid
.map(row => {
return (
'<div class="row">' +
row
.map(
(fill, colIndex) =>
// alternate between left (p0) and right (p1) parrot for every character
`<div class="char${fill ? ` fill p${Math.floor(colIndex / 6) % 2}` : ''}"></div>`,
)
.join('') +
'</div>'
);
})
.join('')}
</div>
</div>
<form action="/" method="get">
<input placeholder="custom message" name="say" autocomplete="off">
<button>Go</button>
</form>
<p class="credit">Party Parrot images from <a href="https://www.reddit.com/r/PartyParrot/wiki/hdpartyparrots">Reddit</a></p>
</body>
</html>`;
}
// Combine all characters into one grid
function getGrid(text) {
const grid = [[], [], [], [], []];
const chars = text.split('');
if (text.length > 200) {
throw new Error('Text is too long, maximum length is 200 characters');
}
chars.forEach((char, charIndex) => {
const charGrid = ALL_CHARACTERS[char];
if (!charGrid) {
throw new Error(
`Unsupported character: "${char}" only the letters A-Z, digits 0-9, and spaces are supported.`,
);
}
// add space between characters
if (charIndex > 0) {
for (const row of grid) {
row.push(0);
}
}
charGrid.forEach((row, rowIndex) => {
row.forEach((shouldFill, colIndex) => {
const gridCol = colIndex + charIndex * 6;
grid[rowIndex][gridCol] = shouldFill;
});
});
});
return grid;
}
async function handleRequest(request) {
const url = new URL(request.url);
if (url.pathname !== '/') {
return new Response('Not Found', {
status: 404,
headers: {
'content-type': 'text/plain',
},
});
}
const text = (url.searchParams.get('say') || 'hello').toLowerCase().replace(/\s+/g, ' ');
let grid;
try {
grid = getGrid(text);
} catch (e) {
return new Response(e.message, {
status: 400,
headers: {
'content-type': 'text/plain',
},
});
}
const html = render({grid});
return new Response(html, {
headers: {
'content-type': 'text/html',
},
});
}
// Character mappings from https://github.com/shrugs/partyparrot/blob/d7b1992fc2096ecbb519f80aed35c94f9ad6d1de/all_characters.py#L1
/*
Copyright (c) 2015 Matt Condon
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
const ALL_CHARACTERS = {
' ': [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]],
a: [[0, 1, 1, 1, 0], [1, 0, 0, 0, 1], [1, 1, 1, 1, 1], [1, 0, 0, 0, 1], [1, 0, 0, 0, 1]],
b: [[1, 1, 1, 1, 0], [1, 0, 0, 0, 1], [1, 1, 1, 1, 0], [1, 0, 0, 0, 1], [1, 1, 1, 1, 0]],
c: [[0, 1, 1, 1, 1], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [0, 1, 1, 1, 1]],
d: [[1, 1, 1, 1, 0], [1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [1, 1, 1, 1, 0]],
e: [[1, 1, 1, 1, 1], [1, 0, 0, 0, 0], [1, 1, 1, 1, 1], [1, 0, 0, 0, 0], [1, 1, 1, 1, 1]],
f: [[1, 1, 1, 1, 1], [1, 0, 0, 0, 0], [1, 1, 1, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]],
g: [[0, 1, 1, 1, 1], [1, 0, 0, 0, 0], [1, 0, 1, 1, 1], [1, 0, 0, 0, 1], [0, 1, 1, 1, 1]],
h: [[1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [1, 1, 1, 1, 1], [1, 0, 0, 0, 1], [1, 0, 0, 0, 1]],
i: [[0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0]],
j: [[0, 0, 1, 1, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1], [1, 0, 0, 0, 1], [0, 1, 1, 1, 0]],
k: [[1, 0, 0, 1, 0], [1, 0, 1, 0, 0], [1, 1, 1, 1, 0], [1, 0, 0, 0, 1], [1, 0, 0, 0, 1]],
l: [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 1, 1, 1, 1]],
m: [[1, 0, 0, 0, 1], [1, 1, 0, 1, 1], [1, 0, 1, 0, 1], [1, 0, 0, 0, 1], [1, 0, 0, 0, 1]],
n: [[1, 1, 0, 0, 1], [1, 0, 1, 0, 1], [1, 0, 1, 0, 1], [1, 0, 1, 0, 1], [1, 0, 0, 1, 1]],
o: [[0, 1, 1, 1, 0], [1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [0, 1, 1, 1, 0]],
p: [[1, 1, 1, 1, 0], [1, 0, 0, 0, 1], [1, 1, 1, 1, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]],
q: [[0, 1, 1, 0, 0], [1, 0, 0, 1, 0], [1, 0, 0, 1, 0], [1, 0, 0, 1, 0], [0, 1, 1, 1, 1]],
r: [[1, 1, 1, 1, 0], [1, 0, 0, 0, 1], [1, 1, 1, 1, 0], [1, 0, 0, 1, 0], [1, 0, 0, 0, 1]],
s: [[0, 1, 1, 1, 1], [1, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 1], [1, 1, 1, 1, 0]],
t: [[1, 1, 1, 1, 1], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0]],
u: [[1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [0, 1, 1, 1, 0]],
v: [[1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [0, 1, 0, 1, 0], [0, 1, 0, 1, 0], [0, 0, 1, 0, 0]],
w: [[1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [1, 0, 1, 0, 1], [1, 1, 0, 1, 1], [1, 0, 0, 0, 1]],
x: [[1, 0, 0, 0, 1], [0, 1, 0, 1, 0], [0, 0, 1, 0, 0], [0, 1, 0, 1, 0], [1, 0, 0, 0, 1]],
y: [[1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [0, 1, 1, 1, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0]],
z: [[1, 1, 1, 1, 1], [0, 0, 0, 0, 1], [0, 1, 1, 1, 0], [1, 0, 0, 0, 0], [1, 1, 1, 1, 1]],
'0': [[0, 1, 1, 1, 0], [1, 0, 0, 1, 1], [1, 0, 1, 0, 1], [1, 1, 0, 0, 1], [0, 1, 1, 1, 0]],
'1': [[0, 0, 0, 1, 0], [0, 0, 1, 1, 0], [0, 0, 0, 1, 0], [0, 0, 0, 1, 0], [1, 1, 1, 1, 1]],
'2': [[1, 1, 1, 1, 1], [0, 0, 0, 0, 1], [1, 1, 1, 1, 1], [1, 0, 0, 0, 0], [1, 1, 1, 1, 1]],
'3': [[1, 1, 1, 1, 1], [0, 0, 0, 0, 1], [0, 1, 1, 1, 1], [0, 0, 0, 0, 1], [1, 1, 1, 1, 1]],
'4': [[1, 0, 0, 0, 1], [1, 0, 0, 0, 1], [1, 1, 1, 1, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1]],
'5': [[1, 1, 1, 1, 1], [1, 0, 0, 0, 0], [1, 1, 1, 1, 0], [0, 0, 0, 0, 1], [1, 1, 1, 1, 0]],
'6': [[0, 0, 1, 1, 1], [0, 1, 0, 0, 0], [1, 1, 1, 1, 0], [1, 0, 0, 0, 1], [0, 1, 1, 1, 0]],
'7': [[1, 1, 1, 1, 1], [0, 0, 0, 0, 1], [0, 0, 0, 1, 0], [0, 0, 1, 0, 0], [0, 1, 0, 0, 0]],
'8': [[1, 1, 1, 1, 1], [1, 0, 0, 0, 1], [1, 1, 1, 1, 1], [1, 0, 0, 0, 1], [1, 1, 1, 1, 1]],
'9': [[1, 1, 1, 1, 1], [1, 0, 0, 0, 1], [1, 1, 1, 1, 1], [0, 0, 0, 0, 1], [0, 0, 0, 0, 1]],
};
@lpappone
Copy link

Could you point me toward some documentation on setting up Zones? I can't find much, and when I try to run terraform apply with the above config, I get the error: cloudflare_worker_script.main_script: error finding zone "partyparrot.business": Zone could not be found

@maxsap
Copy link

maxsap commented Nov 25, 2019

Not sure if you have already checked this -> https://blog.cloudflare.com/deploy-workers-using-terraform/

@davidfernandezm
Copy link

Has anyone tried running this with mjs instead of vanilla JS? it gives error:

Error: error creating worker script: HTTP status 400: Uncaught SyntaxError: Unexpected token 'export'
  at line 285

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment