Compare commits

...

8 Commits

11 changed files with 296 additions and 80 deletions

29
collectd/gitea-collectd.lua Executable file
View File

@ -0,0 +1,29 @@
#!/usr/bin/env lua
local gitdir = "/home/git/gitea-repositories/"
local socket = require "socket"
local fs = require "lfs"
local hostname = os.getenv("COLLECTD_HOSTNAME") or os.getenv("HOSTNAME") or "lain.church"
local interval = os.getenv("COLLECTD_INTERVAL") or 60
while true do
local users, repos, gopherholes = 0, 0, 0
for user in fs.dir(gitdir) do
if user:sub(1,1) ~= "." then
users = users + 1
for repo in fs.dir(gitdir..user) do
if repo:sub(1,1) ~= "." then
repos = repos + 1
if repo == "gopherhole.git" then
gopherholes = gopherholes + 1
end
end
end
end
end
socket.sleep(interval)
print(string.format("PUTVAL %s/exec-gitea/gitea_active_users interval=%d N:%d",hostname,interval,users))
print(string.format("PUTVAL %s/exec-gitea/gitea_repositories interval=%d N:%d",hostname,interval,repos))
print(string.format("PUTVAL %s/exec-gitea/gitea_gopherholes interval=%d N:%d",hostname,interval,gopherholes))
end

17
collectd/prosody-collectd.lua Executable file
View File

@ -0,0 +1,17 @@
#!/usr/bin/env lua
local rquri = "http://localhost:5280/serverinfo"
local http = require "socket.http"
local socket = require "socket"
local hostname = os.getenv("COLLECTD_HOSTNAME") or os.getenv("HOSTNAME") or "lain.church"
local interval = os.getenv("COLLECTD_INTERVAL") or 60
while true do
socket.sleep(interval)
local request = {http.request(rquri)}
local online,registered = request[1]:match('{"connected":(%d+),"registered":(%d+)}')
online,registered = tonumber(online),tonumber(registered)
print(string.format("PUTVAL %s/exec-prosody/prosody_connected interval=%d N:%d",hostname,interval,online))
print(string.format("PUTVAL %s/exec-prosody/prosody_registered interval=%d N:%d",hostname,interval,registered))
end

5
collectd/types.custom.db Normal file
View File

@ -0,0 +1,5 @@
prosody_registered value:ABSOLUTE:0:U
prosody_connected value:ABSOLUTE:0:U
gitea_active_users value:ABSOLUTE:0:U
gitea_repositories value:ABSOLUTE:0:U
gitea_gopherholes value:ABSOLUTE:0:U

View File

@ -79,6 +79,8 @@
<p>lain.church exists to provide <a href="/services.html">services not provided by other entities</a> to lainons and the like.</p> <p>lain.church exists to provide <a href="/services.html">services not provided by other entities</a> to lainons and the like.</p>
<p>The hope is that said services will be reasonably secure, provide the users with their <a href="https://www.gnu.org/philosophy/free-sw.html">four essential freedoms</a> where applicable, and further development of technology that respects the user.</p> <p>The hope is that said services will be reasonably secure, provide the users with their <a href="https://www.gnu.org/philosophy/free-sw.html">four essential freedoms</a> where applicable, and further development of technology that respects the user.</p>
<p>There is an emphasis on decentralised and federated platforms where individuals and small groups can control parts, rather than everything being owned by one entity.</p> <p>There is an emphasis on decentralised and federated platforms where individuals and small groups can control parts, rather than everything being owned by one entity.</p>
<br>
<p>Additionally, the <a href="https://git.lain.church/lain.church/lain.church-fe">source code for this site</a> can be found on GitLain.
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,25 +0,0 @@
<head>
<meta charset="UTF-8">
<style>
body {
background-image: url(/img/sun.png);
background-repeat: repeat;
}
</style>
<link rel="stylesheet" href="/css/columns.css">
<link rel="stylesheet" href="/css/haiku.css">
</head>
<body>
<div style="display: inline-block;">
<b class="twrapper"><a class="dtitle" href="redeem.html"><img class="wbutton wlbutton" src="/img/dclose.png">Redeem invite code<img class="wbutton wrbutton" src="/img/dminimise.png"></a><a class="dtitle" href="gencode.html"><img class="wbutton wlbutton" src="/img/dclose.png">Generate invite code<img class="wbutton wrbutton" src="/img/dminimise.png"></a><a class="title" href="changepass.html"><img class="wbutton wlbutton" src="/img/close.png">Change password<img class="wbutton wrbutton" src="/img/minimise.png"></a></b>
<div class="wrapper">
<div id="changepass">
<form action="/changepass.cgi" method="post" accept-charset="UTF-8">
Username <input type="text" name="username"><br>
Password <input type="password" name="password"><br>
New Password <input type="password" name="newpass"><br>
<br><input type="submit" value="Change password">
</form>
</div>
</div>
</body>

View File

@ -1,5 +1,5 @@
body { body {
font-family: sans-serif; font-family: "Fira Sans",sans-serif;
} }
.title { .title {
border-top: 1px solid #9d9d9d; border-top: 1px solid #9d9d9d;

View File

@ -1,24 +0,0 @@
<head>
<meta charset="UTF-8">
<style>
body {
background-image: url(/img/leaves.png);
background-repeat: repeat;
}
</style>
<link rel="stylesheet" href="/css/columns.css">
<link rel="stylesheet" href="/css/haiku.css">
</head>
<body>
<div style="display: inline-block;">
<b class="twrapper"><a class="dtitle" href="redeem.html"><img class="wbutton wlbutton" src="/img/dclose.png">Redeem invite code<img class="wbutton wrbutton" src="/img/dminimise.png"></a><a class="title" href="gencode.html"><img class="wbutton wlbutton" src="/img/close.png">Generate invite code<img class="wbutton wrbutton" src="/img/minimise.png"></a><a class="dtitle" href="changepass.html"><img class="wbutton wlbutton" src="/img/dclose.png">Change password<img class="wbutton wrbutton" src="/img/dminimise.png"></a></b>
<div class="wrapper">
<div id="gencode">
<form action="/gencode.cgi" method="post" accept-charset="UTF-8">
Username <input type="text" name="username"><br>
Password <input type="password" name="password"><br>
<br><input type="submit" value="Generate code">
</form>
</div>
</div>
</body>

42
static/img/rss.svg Normal file
View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg version="1.1" width="64" height="64" color-interpolation="linearRGB"
xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg">
<g>
<path style="fill:#010101; fill-opacity:0.5019"
d="M36 61H41L64 30L58 27L59 31L36 61z"
/>
<path style="fill:none; stroke:#010000; stroke-width:4"
d="M2 28V41L36 59L58 30V17L25 5L2 28z"
/>
<linearGradient id="gradient0" gradientUnits="userSpaceOnUse" x1="13.84" y1="-38.14" x2="58.34" y2="-27.7">
<stop offset="0" stop-color="#ffe2ba"/>
<stop offset="1" stop-color="#ff9500"/>
</linearGradient>
<path style="fill:url(#gradient0)"
d="M2 28L36 43L58 17L25 5L2 28z"
/>
<linearGradient id="gradient1" gradientUnits="userSpaceOnUse" x1="44.72" y1="-7.9" x2="86.1" y2="10.51">
<stop offset="0" stop-color="#992600"/>
<stop offset="1" stop-color="#bf5000"/>
</linearGradient>
<path style="fill:url(#gradient1)"
d="M36 43V59L58 30V17L36 43z"
/>
<linearGradient id="gradient2" gradientUnits="userSpaceOnUse" x1="22.97" y1="92.59" x2="-14.6" y2="67.29">
<stop offset="0" stop-color="#bf5000"/>
<stop offset="1" stop-color="#f2a100"/>
</linearGradient>
<path style="fill:url(#gradient2)"
d="M2 28V41L36 59V43L2 28z"
/>
<linearGradient id="gradient3" gradientUnits="userSpaceOnUse" x1="13.84" y1="-38.14" x2="58.34" y2="-27.7">
<stop offset="0" stop-color="#ffffff"/>
<stop offset="1" stop-color="#e7e7e7"/>
</linearGradient>
<path style="fill:url(#gradient3)"
d="M21 31C26 25 34 25 40 28L44 25C36 21 24 21 17 29L21 31z
M13 28L9 26C20 14 38 13 51 19L47 22C36 17 22 18 13 28z
M31.5 29C29.01 29 27 30.34 27 32C27 33.65 29.01 35 31.5 35C33.98 35 36 33.65 36 32C36 30.34 33.98 29 31.5 29z"
/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

196
static/img/social.svg Normal file
View File

@ -0,0 +1,196 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg version="1.1" width="64" height="64" color-interpolation="linearRGB"
xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg">
<g>
<path style="fill:#010101; fill-opacity:0.4235"
d="M34 64C34 64 40 64 45 64C50 64 51 63 56 62C63.84 60.43 63 58 60 56C56.56 53.71 62.56 54.13 61 51C60 49 52 47 52 47L42 56L34 64z"
/>
<path style="fill:none; stroke:#000000; stroke-width:4"
d="M22 21V38L24 40V57L28 59L30 59L30 60L34 62L40 56V42L42 40V23L29 17L22 21z"
transform="matrix(1,0,0,1,10,-6)"
/>
<linearGradient id="gradient0" gradientUnits="userSpaceOnUse" x1="96.6" y1="-47.07" x2="124.61" y2="-15.05">
<stop offset="0" stop-color="#ee9bb0"/>
<stop offset="1" stop-color="#cc5876"/>
</linearGradient>
<path style="fill:url(#gradient0)"
d="M22 21V37L24 40V57L28 59L30 59L30 60L34 62V45H36V27L22 21z"
transform="matrix(1,0,0,1,10,-6)"
/>
<linearGradient id="gradient1" gradientUnits="userSpaceOnUse" x1="-37.97" y1="-32.98" x2="-18.83" y2="-50.95">
<stop offset="0" stop-color="#ffe3ea"/>
<stop offset="0.9962" stop-color="#f0a8bb"/>
</linearGradient>
<path style="fill:url(#gradient1)"
d="M22 21L36 27L42 23L32 22L35.99 19.99L29 17L22 21z"
transform="matrix(1,0,0,1,10,-6)"
/>
<linearGradient id="gradient2" gradientUnits="userSpaceOnUse" x1="57.23" y1="-50.61" x2="78.84" y2="-43.97">
<stop offset="0" stop-color="#a02646"/>
<stop offset="1" stop-color="#d53961"/>
</linearGradient>
<path style="fill:url(#gradient2)"
d="M36 45H34V62L40 56V42L42 40V23L36 27V45z"
transform="matrix(1,0,0,1,10,-6)"
/>
<path style="fill:#71152d"
d="M34 45V51L40 42L36 45H34z"
transform="matrix(1,0,0,1,10,-6)"
/>
<linearGradient id="gradient3" gradientUnits="userSpaceOnUse" x1="30.92" y1="-67" x2="41.07" y2="-67">
<stop offset="0" stop-color="#ab123a"/>
<stop offset="1" stop-color="#dd718d"/>
</linearGradient>
<path style="fill:url(#gradient3)"
d="M32 22L42 23L36 20L32 22z"
transform="matrix(1,0,0,1,10,-6)"
/>
<path style="fill:none; stroke:#000000; stroke-width:4"
d="M32 8C29 8 26 11 26 14C26 17 29 20 32 20C35 20 38 17 38 14C38 11 35 8 32 8z"
transform="matrix(1,0,0,1,12,-6)"
/>
<radialGradient id="gradient4" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="64" gradientTransform="matrix(0.2957,0,0,0.2631,28.5529,8.4743)">
<stop offset="0" stop-color="#f2f2f2"/>
<stop offset="0.8992" stop-color="#e4dc06"/>
</radialGradient>
<path style="fill:url(#gradient4)"
d="M32 8C29 8 26 11 26 14C26 17 29 20 32 20C35 20 38 17 38 14C38 11 35 8 32 8z"
transform="matrix(1,0,0,1,12,-6)"
/>
<path style="fill:none; stroke:#000000; stroke-width:4"
d="M22 21V38L24 40V57L28 59L30 59L30 60L34 62L40 56V42L42 40V23L29 17L22 21z"
transform="matrix(1,0,0,1,-16,-6)"
/>
<linearGradient id="gradient5" gradientUnits="userSpaceOnUse" x1="85.74" y1="-57.07" x2="128.61" y2="-8.05">
<stop offset="0" stop-color="#d5dcff"/>
<stop offset="1" stop-color="#9d9bd5"/>
</linearGradient>
<path style="fill:url(#gradient5)"
d="M22 21V37L24 40V57L28 59L30 59L30 60L34 62V45H36V27L22 21z"
transform="matrix(1,0,0,1,-16,-6)"
/>
<linearGradient id="gradient6" gradientUnits="userSpaceOnUse" x1="-37.97" y1="-32.98" x2="-18.83" y2="-50.95">
<stop offset="0" stop-color="#ffffff"/>
<stop offset="0.9962" stop-color="#a4a3d7"/>
</linearGradient>
<path style="fill:url(#gradient6)"
d="M22 21L36 27L42 23L32 22L35.99 19.99L29 17L22 21z"
transform="matrix(1,0,0,1,-16,-6)"
/>
<linearGradient id="gradient7" gradientUnits="userSpaceOnUse" x1="56.23" y1="-51.61" x2="77.84" y2="-44.97">
<stop offset="0" stop-color="#373583"/>
<stop offset="1" stop-color="#6967c0"/>
</linearGradient>
<path style="fill:url(#gradient7)"
d="M36 45H34V62L40 56V42L42 40V23L36 27V45z"
transform="matrix(1,0,0,1,-16,-6)"
/>
<path style="fill:#252382"
d="M34 45V51L40 42L36 45H34z"
transform="matrix(1,0,0,1,-16,-6)"
/>
<linearGradient id="gradient8" gradientUnits="userSpaceOnUse" x1="30.92" y1="-66" x2="41.07" y2="-66">
<stop offset="0" stop-color="#33318c"/>
<stop offset="1" stop-color="#a4a3d7"/>
</linearGradient>
<path style="fill:url(#gradient8)"
d="M32 22L42 23L36 20L32 22z"
transform="matrix(1,0,0,1,-16,-6)"
/>
<path style="fill:none; stroke:#000000; stroke-width:4"
d="M32 8C29 8 26 11 26 14C26 17 29 20 32 20C35 20 38 17 38 14C38 11 35 8 32 8z"
transform="matrix(1,0,0,1,-16,-6)"
/>
<radialGradient id="gradient9" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="64" gradientTransform="matrix(0.2957,0,0,0.2631,28.5529,8.4743)">
<stop offset="0" stop-color="#f2f2f2"/>
<stop offset="0.8992" stop-color="#e4dc06"/>
</radialGradient>
<path style="fill:url(#gradient9)"
d="M32 8C29 8 26 11 26 14C26 17 29 20 32 20C35 20 38 17 38 14C38 11 35 8 32 8z"
transform="matrix(1,0,0,1,-16,-6)"
/>
<path style="fill:none; stroke:#000000; stroke-width:2"
d="M28 13H30
M28 9H30"
transform="matrix(1,0,0,1,12,-4)"
/>
<path style="fill:none; stroke:#000000; stroke-width:1"
d="M44.5 11V5.5C44.5 5.5 47.5 5.21 47.5 7C47.5 8.84 45 8.5 45 8.5"
/>
<linearGradient id="gradient10" gradientUnits="userSpaceOnUse" x1="56.23" y1="-51.61" x2="77.84" y2="-44.97">
<stop offset="0" stop-color="#373583"/>
<stop offset="1" stop-color="#6967c0"/>
</linearGradient>
<path style="fill:url(#gradient10)"
d="M28 59H30V45L28 44V59z"
transform="matrix(1,0,0,1,-16,-6)"
/>
<path style="fill:none; stroke:#000000; stroke-width:4"
d="M22 21V38L24 40V57L28 59L30 59L30 60L34 62L40 56V42L42 40V23L29 17L22 21z"
/>
<linearGradient id="gradient11" gradientUnits="userSpaceOnUse" x1="85.74" y1="-57.07" x2="128.61" y2="-8.05">
<stop offset="0" stop-color="#ffdb97"/>
<stop offset="1" stop-color="#fcaf29"/>
</linearGradient>
<path style="fill:url(#gradient11)"
d="M22 21V37L24 40V57L28 59L30 59L30 60L34 62V45H36V27L22 21z"
/>
<linearGradient id="gradient12" gradientUnits="userSpaceOnUse" x1="-37.97" y1="-32.98" x2="-18.83" y2="-50.95">
<stop offset="0" stop-color="#fff7ea"/>
<stop offset="0.9962" stop-color="#fdd17b"/>
</linearGradient>
<path style="fill:url(#gradient12)"
d="M22 21L36 27L42 23L32 22L35.99 19.99L29 17L22 21z"
/>
<linearGradient id="gradient13" gradientUnits="userSpaceOnUse" x1="55.23" y1="-51.61" x2="76.84" y2="-44.97">
<stop offset="0" stop-color="#c85805"/>
<stop offset="1" stop-color="#f06306"/>
</linearGradient>
<path style="fill:url(#gradient13)"
d="M36 45H34V62L40 56V42L42 40V23L36 27V45z"
/>
<path style="fill:#a32904"
d="M34 45V51L40 42L36 45H34z"
/>
<linearGradient id="gradient14" gradientUnits="userSpaceOnUse" x1="29.92" y1="-66" x2="40.07" y2="-66">
<stop offset="0" stop-color="#c85804"/>
<stop offset="1" stop-color="#dc952f"/>
</linearGradient>
<path style="fill:url(#gradient14)"
d="M32 22L42 23L36 20L32 22z"
/>
<path style="fill:none; stroke:#000000; stroke-width:4"
d="M32 4C28 4 24 8 24 12C24 16 28 20 32 20C36 20 40 16 40 12C40 8 36 4 32 4z"
/>
<radialGradient id="gradient15" gradientUnits="userSpaceOnUse" cx="0" cy="0" r="64" gradientTransform="matrix(0.2957,0,0,0.2631,28.5529,8.4743)">
<stop offset="0" stop-color="#f2f2f2"/>
<stop offset="0.8992" stop-color="#e4dc06"/>
</radialGradient>
<path style="fill:url(#gradient15)"
d="M32 4C28 4 24 8 24 12C24 16 28 20 32 20C36 20 40 16 40 12C40 8 36 4 32 4z"
/>
<linearGradient id="gradient16" gradientUnits="userSpaceOnUse" x1="55.23" y1="-51.61" x2="76.84" y2="-44.97">
<stop offset="0" stop-color="#c85805"/>
<stop offset="1" stop-color="#f06306"/>
</linearGradient>
<path style="fill:url(#gradient16)"
d="M28 59H30V45L28 44V59z"
/>
<path style="fill:none; stroke:#000000; stroke-width:2"
d="M28 13H30
M28 9H30"
/>
<path style="fill:none; stroke:#000000; stroke-width:2"
d="M28 9H30"
transform="matrix(1,0,0,1,-16,-4)"
/>
<path style="fill:#000000"
d="M32 7C32 7 36 8 36 12C36 16 32 17 32 17C32 17 34 14 34 12C34 10 32 7 32 7z
M30.09 10.56C30.09 10.56 29.66 12.91 29.2 13.83C28.67 14.9 27.71 16.06 27.71 16.06V10.56H30.09z"
transform="matrix(0.9375,0,0,0.7375,-14,-0.7875)"
/>
<path style="fill:#000000"
d="M32 7C32 7 36 8 36 12C36 16 32 17 32 17C32 17 34 14 34 12C34 10 32 7 32 7z"
/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@ -34,15 +34,15 @@
<body bgcolor="#336698"> <body bgcolor="#336698">
<a href="https://git.lain.church"><div class="btncontainer"><img class="btnimg" src="/img/gitlain.svg"></img><br>GitLain</div></a> <a href="https://git.lain.church"><div class="btncontainer"><img class="btnimg" src="/img/gitlain.svg"></img><br>GitLain</div></a>
<a href="/about.html"><div class="btncontainer"><img class="btnimg" src="/img/txt.svg"></img><br>about</div></a> <a href="/about.html"><div class="btncontainer"><img class="btnimg" src="/img/txt.svg"></img><br>about</div></a>
<a href="/redeem.html"><div class="btncontainer"><img class="btnimg" src="/img/user.svg"></img><br>Users</div></a> <a href="https://welovela.in/users/lainchurch"><div class="btncontainer"><img class="btnimg" src="/img/rss.svg"></img><br>News</div></a>
<a href="/graphs"><div class="btncontainer"><img class="btnimg" src="/img/graphs.svg"></img><br>Stats</div></a> <a href="/graphs"><div class="btncontainer"><img class="btnimg" src="/img/graphs.svg"></img><br>Stats</div></a>
<a href="/services.html"><div class="btncontainer"><img class="btnimg" src="/img/services.svg"></img><br>Services</div></a> <a href="/services.html"><div class="btncontainer"><img class="btnimg" src="/img/services.svg"></img><br>Services</div></a>
<a href="/xmpp.html"><div class="btncontainer"><img class="btnimg" src="/img/xmpp.svg"></img><br>XMPP</div></a> <a href="/xmpp/conversejs"><div class="btncontainer"><img class="btnimg" src="/img/xmpp.svg"></img><br>XMPP</div></a>
<a href="https://lainon.life"><div class="btncontainer"><img class="btnimg" src="/img/radio.svg"></img><br>lainon.life</div></a> <a href="https://lainon.life"><div class="btncontainer"><img class="btnimg" src="/img/radio.svg"></img><br>lainon.life</div></a>
<a href="https://allsprk.tv"><div class="btncontainer"><img class="btnimg" src="/img/projector.svg"></img><br>allsprk.tv</div></a> <a href="https://allsprk.tv"><div class="btncontainer"><img class="btnimg" src="/img/projector.svg"></img><br>allsprk.tv</div></a>
<a href="https://lainchan.org"><div class="btncontainer"><img class="btnimg" src="/img/lainchan.png"></img><br>Lainchan</div></a> <a href="https://lainchan.org"><div class="btncontainer"><img class="btnimg" src="/img/lainchan.png"></img><br>Lainchan</div></a>
<a href="https://gopher.lain.church"><div class="btncontainer"><img class="btnimg" src="/img/folder.svg"></img><br>Gopherholes</div></a> <a href="https://gopher.lain.church"><div class="btncontainer"><img class="btnimg" src="/img/folder.svg"></img><br>Gopher</div></a>
<a href="https://welovela.in"><div class="btncontainer"><img class="btnimg" src="/img/fedi.svg"></img><br>WLL Pleroma</div></a> <a href="https://welovela.in"><div class="btncontainer"><img class="btnimg" src="/img/wll.png"></img><br>Pleroma</div></a>
<img class="cpugraph" src="/graphs/cpu-fp.png"></img> <img class="cpugraph" src="/graphs/cpu-fp.png"></img>
<img class="logo" src="/img/copland.svg"></img> <img class="logo" src="/img/copland.svg"></img>
</body> </body>

View File

@ -1,26 +0,0 @@
<head>
<meta charset="UTF-8">
<style>
body {
background-image: url(/img/dolphins.png);
background-repeat: repeat;
}
</style>
<link rel="stylesheet" href="/css/columns.css">
<link rel="stylesheet" href="/css/haiku.css">
</head>
<body>
<div style="display: inline-block;">
<b class="twrapper"><a class="title" href="redeem.html"><img class="wbutton wlbutton" src="/img/close.png">Redeem invite code<img class="wbutton wrbutton" src="/img/minimise.png"></a><a class="dtitle" href="gencode.html"><img class="wbutton wlbutton" src="/img/dclose.png">Generate invite code<img class="wbutton wrbutton" src="/img/dminimise.png"></a><a class="dtitle" href="changepass.html"><img class="wbutton wlbutton" src="/img/dclose.png">Change password<img class="wbutton wrbutton" src="/img/dminimise.png"></a></b>
<div class="wrapper">
<div id="redeem" >
<form action="/redeemcode.cgi" method="post" accept-charset="UTF-8">
Invite code <input type="text" name="key"><br>
Username <input type="text" name="username"><br>
Password <input type="password" name="password"><br>
Email <input type="text" name="email"><br>
<br><input type="submit" value="Redeem">
</form>
</div>
</div>
</body>