forked from 3wordchant/capsul-flask
Load YOLOCOLO templates from a "theme" folder..
..configurable using the THEME env var. Defaults to normal Capsul theme.
This commit is contained in:
parent
bcc3f20b27
commit
40aa3bccd3
@ -2,6 +2,7 @@ import logging
|
|||||||
from logging.config import dictConfig as logging_dict_config
|
from logging.config import dictConfig as logging_dict_config
|
||||||
|
|
||||||
import atexit
|
import atexit
|
||||||
|
import jinja2
|
||||||
import os
|
import os
|
||||||
import hashlib
|
import hashlib
|
||||||
import requests
|
import requests
|
||||||
@ -71,7 +72,9 @@ app.config.from_mapping(
|
|||||||
#STRIPE_WEBHOOK_SECRET=os.environ.get("STRIPE_WEBHOOK_SECRET", default="")
|
#STRIPE_WEBHOOK_SECRET=os.environ.get("STRIPE_WEBHOOK_SECRET", default="")
|
||||||
|
|
||||||
BTCPAY_PRIVATE_KEY=os.environ.get("BTCPAY_PRIVATE_KEY", default="").replace("\\n", "\n"),
|
BTCPAY_PRIVATE_KEY=os.environ.get("BTCPAY_PRIVATE_KEY", default="").replace("\\n", "\n"),
|
||||||
BTCPAY_URL=os.environ.get("BTCPAY_URL", default="")
|
BTCPAY_URL=os.environ.get("BTCPAY_URL", default=""),
|
||||||
|
|
||||||
|
THEME=os.environ.get("THEME", default="")
|
||||||
)
|
)
|
||||||
|
|
||||||
app.config['HUB_URL'] = os.environ.get("HUB_URL", default=app.config['BASE_URL'])
|
app.config['HUB_URL'] = os.environ.get("HUB_URL", default=app.config['BASE_URL'])
|
||||||
@ -154,6 +157,15 @@ is_running_server = ('flask run' in command_line) or ('gunicorn' in command_line
|
|||||||
|
|
||||||
app.logger.info(f"is_running_server: {is_running_server}")
|
app.logger.info(f"is_running_server: {is_running_server}")
|
||||||
|
|
||||||
|
if app.config['THEME'] != "":
|
||||||
|
my_loader = jinja2.ChoiceLoader([
|
||||||
|
app.jinja_loader,
|
||||||
|
jinja2.FileSystemLoader(
|
||||||
|
[os.path.join('capsulflask', 'themes', app.config['THEME']),
|
||||||
|
'capsulflask/templates']),
|
||||||
|
])
|
||||||
|
app.jinja_loader = my_loader
|
||||||
|
|
||||||
if app.config['HUB_MODE_ENABLED']:
|
if app.config['HUB_MODE_ENABLED']:
|
||||||
|
|
||||||
if app.config['HUB_MODEL'] == "capsul-flask":
|
if app.config['HUB_MODEL'] == "capsul-flask":
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
html {
|
html {
|
||||||
color: #241e1e;
|
color: #bdc7b8;
|
||||||
font: calc(0.40rem + 1vmin) monospace;
|
font: calc(0.40rem + 1vmin) monospace;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
background-color: #bdc7b8;
|
background-color: #241e1e;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@ -19,8 +19,8 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color:#00517a;
|
color:#6CF;
|
||||||
text-shadow: 1px 1px 0px #eee;
|
text-shadow: 1px 1px 0px #000c;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.no-shadow {
|
a.no-shadow {
|
||||||
@ -28,7 +28,7 @@ a.no-shadow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
a:hover, a:active, a:visited {
|
a:hover, a:active, a:visited {
|
||||||
color: #323417;
|
color: #b5bd68;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-links a {
|
.nav-links a {
|
||||||
@ -59,11 +59,11 @@ h1, h2, h3, h4, h5 {
|
|||||||
margin: initial;
|
margin: initial;
|
||||||
padding: initial;
|
padding: initial;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
text-shadow: 2px 2px 0px #eee;
|
text-shadow: 2px 2px 0px #0007;
|
||||||
}
|
}
|
||||||
|
|
||||||
main {
|
main {
|
||||||
border: 1px dashed #241e1e;
|
border: 1px dashed #bdc7b8;
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
margin-bottom: 2em;
|
margin-bottom: 2em;
|
||||||
|
|
||||||
@ -143,7 +143,7 @@ input, textarea, select, label {
|
|||||||
input, select, textarea {
|
input, select, textarea {
|
||||||
outline: 0;
|
outline: 0;
|
||||||
padding: 0.25em 0.5em;
|
padding: 0.25em 0.5em;
|
||||||
color: #241e1e;
|
color: #bdc7b8;
|
||||||
background-color: #bdc7b805;
|
background-color: #bdc7b805;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,7 +277,7 @@ td.metrics img {
|
|||||||
width: 4.3em;
|
width: 4.3em;
|
||||||
}
|
}
|
||||||
th {
|
th {
|
||||||
border-right: 1px solid #eee;
|
border-right: 4px solid #241e1e;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
td {
|
td {
|
||||||
|
30
capsulflask/static/style.yolocolo.css
Normal file
30
capsulflask/static/style.yolocolo.css
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
html {
|
||||||
|
color: #241e1e;
|
||||||
|
background-color: #bdc7b8;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color:#00517a;
|
||||||
|
text-shadow: 1px 1px 0px #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover, a:active, a:visited {
|
||||||
|
color: #323417;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-links a {
|
||||||
|
text-shadow: 2px 2px 0px #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
border: 1px dashed #241e1e;
|
||||||
|
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
color: #241e1e;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
border-right: 1px solid #eee;
|
||||||
|
text-align: left;
|
||||||
|
}
|
@ -49,6 +49,8 @@
|
|||||||
{% if btcpay_enabled %}
|
{% if btcpay_enabled %}
|
||||||
<li><a href="/payment/btcpay">Add funds with Bitcoin/Litecoin/Monero (btcpay)</a></li>
|
<li><a href="/payment/btcpay">Add funds with Bitcoin/Litecoin/Monero (btcpay)</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
<li>Cash: email <a href="mailto:treasurer@cyberia.club">treasurer@cyberia.club</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<nav>
|
<nav>
|
||||||
<div class="row justify-space-between half-margin">
|
<div class="row justify-space-between half-margin">
|
||||||
<div>
|
<div>
|
||||||
🦉 <a href="/"><b>YOLOCOLO</b></a>
|
<a href="/"><b>Capsul</b></a>💊
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@ -27,6 +27,7 @@
|
|||||||
<div class="row justify-center half-margin wrap nav-links">
|
<div class="row justify-center half-margin wrap nav-links">
|
||||||
<a href="/pricing">Pricing</a>
|
<a href="/pricing">Pricing</a>
|
||||||
<a href="/faq">FAQ</a>
|
<a href="/faq">FAQ</a>
|
||||||
|
<a href="/changelog">Changelog</a>
|
||||||
|
|
||||||
{% if session["account"] %}
|
{% if session["account"] %}
|
||||||
<a href="/console">Capsuls</a>
|
<a href="/console">Capsuls</a>
|
||||||
@ -46,12 +47,11 @@
|
|||||||
</main>
|
</main>
|
||||||
{% block subcontent %}{% endblock %}
|
{% block subcontent %}{% endblock %}
|
||||||
<footer>
|
<footer>
|
||||||
This server runs <a
|
(c) Attribution-ShareAlike 4.0 International <br/>
|
||||||
href="https://giit.cyberia.club/~forest/capsul-flask">capsul-flask</a> by
|
A service by Cyberia Computer Club 2020-<span class="bigtext">∞</span> <br/>
|
||||||
Cyberia Computer Club, available under the <a
|
<br/>
|
||||||
href="https://creativecommons.org/licenses/by-sa/4.0/">Attribution-ShareAlike
|
<br/>
|
||||||
4.0 International</a> licence.<br/><br/>
|
<a href="https://giit.cyberia.club/~forest/capsul-flask/tree/master/capsulflask{% block pagesource %}{% endblock %}">View page source</a>
|
||||||
<a href="https://git.autonomic.zone/3wordchant/capsul-flask/src/branch/yolocolo/capsulflask{% block pagesource %}{% endblock %}">View page source</a>
|
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -10,32 +10,82 @@
|
|||||||
<p>
|
<p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
What is this?
|
Which instance type should I buy?
|
||||||
<p>
|
<p>There are no hard rules for this sort of thing, but here are some guidelines:</p>
|
||||||
This is a <strong>technical demo</strong> of <a
|
<p>f1-xs: blog, vpn, bot, cgit</p>
|
||||||
href="https://giit.cyberia.club/~forest/capsul-flask">Capsul</a>, for the
|
<p>f1-s: a bot, owncloud, gitea, popular blog</p>
|
||||||
as-yet-untitled <a href="https://coops.tech">Cotech</a> server hosting
|
<p>f1-m: docker host, build system</p>
|
||||||
initiative, which you can <a
|
<p>f1-l: large webservice, rotund java app</p>
|
||||||
href="https://community.coops.tech/t/call-for-input-v2-co-op-vps-survey/2802/9">read
|
<p>f1-x: gitlab (wow such memory very devops</p>
|
||||||
about on the Cotech forum</a>.
|
<p>f1-xx: something gargantuan</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
How do I log in?
|
||||||
|
<p>ssh to the ip provided to you using the cyberian user.</p>
|
||||||
|
<pre class='code'>$ ssh cyberian@1.2.3.4</pre>
|
||||||
|
<p>For more information, see <a href="/about-ssh">Understanding the Secure Shell Protocol (SSH)</a>.</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
How do I change to the root user?
|
||||||
|
<p>The cyberian user has passwordless sudo access by default. This should work:</p>
|
||||||
|
<pre class='code'>
|
||||||
|
# Linux
|
||||||
|
$ sudo su -
|
||||||
|
|
||||||
|
# OpenBSD
|
||||||
|
$ doas su -</pre>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Do you offer reverse DNS?
|
||||||
|
<p>We do, but right now it's a manual process. Shoot us an email and we'll get it done.</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
What if I don't pay / don't maintain my payments?
|
||||||
|
<p>Your VM will eventually be deleted.
|
||||||
|
Capsul will send you a few inoffensive reminders as that termination date approaches.
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
What do you mean, "technical demo"?
|
Besides my virtual machines and payments, what information do you keep about me?
|
||||||
<p>No backups</p>
|
<p>We associate an email address with every VM so that we can track payment and respond to support requests.</p>
|
||||||
<p>No service level agreement</p>
|
<p>If you pay with a credit card, Stripe stores some additional details about you that we literally cannot delete.</p>
|
||||||
<p>"Best effort" support</p>
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Where can I get this, but, more reliable?
|
What can I do with my VM?
|
||||||
<p>Cyberia, the authors of this platform, run the canonical instance, <a
|
<p>Make it into a mailserver, a tor relay, a VPN host, whatever you'd like - we do have one small request, though.</p>
|
||||||
href="https://capsul.org">Capsul.org</a>, on hardware they own. Please
|
<p>Crypto mining on capsul is currently considered obnoxious behavior, because the hashrates on our CPUs is so low and because mining crypto consumes entire processor cores that could have otherwise been shared between many dozens of other users.</p>
|
||||||
send them your money! (cash, crypto, or card accepted).</p>
|
<p>In the future, if we have plentiful CPU resources, we may come out with a tier more suitable for mining - maybe a high cpu tier or similar, where each VM gets a full dedicated core and sharing them is not anticipated.</p>
|
||||||
|
<p>We will never snoop on your traffic or inspect what's going on inside of our customer virtual machines - we don't want to. We hope that you'll extend us a similar courtesy and try not to use too much of our shared CPU resources. Capsul is currently a shared (resource-wise) world, and we all must live in it together!</p>
|
||||||
|
<p>Also, mandatory: our systems exist within the USA, and as such those systems are bound by US law.</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
How do I use this system?
|
Can you recover my passwords/insert new keys?
|
||||||
<p>Please see <a href="https://capsul.org/faq">the official Capsul FAQ
|
<p>Can we? Technically yes. Will we? No, never. It would violate the trust that our users have in us.
|
||||||
page</a>.</p>
|
We have no interest in touching client VMs after they're running.
|
||||||
|
We promise to keep your machines running smoothly.
|
||||||
|
If you lose access to your VM, that's on you.</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Do you offer refunds?
|
||||||
|
<p>Not now, but email us and we can probably figure something out.</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Where do the VMs run? Is it on a machine that you guys own/control?
|
||||||
|
<p>Capsul runs on a server named Baikal which Cyberia built from scratch & mailed to a datacenter
|
||||||
|
in Georgia called CyberWurx. CyberWurx staff installed it for us in a rack space that
|
||||||
|
Cyberia pays for. </p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Do you offer support?
|
||||||
|
<p>Yep, see <a href="/support">our support page</a>.</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Do you have an SLA?
|
||||||
|
<p>No, but we normally respond pretty quickly.</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Will you implement feature X?
|
||||||
|
<p>Maybe! Email <a href="mailto:ops@cyberia.club">ops@cyberia.club</a> and ask us about it.</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
|
@ -1,26 +1,31 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<h1>
|
|
||||||
<pre>
|
|
||||||
_ _
|
|
||||||
_ _ ___ | | ___ ___ ___ | | ___
|
|
||||||
| | | |/ _ \| |/ _ \ / __/ _ \| |/ _ \
|
|
||||||
| |_| | (_) | | (_) | (_| (_) | | (_) |
|
|
||||||
\__, |\___/|_|\___/ \___\___/|_|\___/
|
|
||||||
|___/
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>CAPSUL</h1>
|
||||||
|
<pre>
|
||||||
|
.-.
|
||||||
|
/:::\
|
||||||
|
/::::/
|
||||||
|
/ `-:/
|
||||||
|
/ /
|
||||||
|
\ /
|
||||||
|
`"`
|
||||||
</pre>
|
</pre>
|
||||||
<span>Co-operative hosting using <a href="https://cyberia.club">Cyberia</a>'s Capsul</span>
|
<span>Simple, fast, private compute by <a href="https://cyberia.club">cyberia.club</a></span>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block subcontent %}
|
{% block subcontent %}
|
||||||
<p>
|
<p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Sign up for an account!</li>
|
<li>Low friction: simply log in with your email address and fund your account with Credit/Debit or Cryptocurrency</li>
|
||||||
<li>Add some funds!</li>
|
<li>All root disks are backed up at no charge</li>
|
||||||
<li>Create a VPS!</li>
|
<li>All storage is fast, local, and solid-state</li>
|
||||||
<li>Give your feedback!</li>
|
<li>All network connections are low latency</li>
|
||||||
|
<li>Supported by amazing volunteers from Cyberia</li>
|
||||||
|
<li>Upfront prices, no confusing billing</li>
|
||||||
|
<li>Operated by a Minnesota non-profit organization that will never exploit you</li>
|
||||||
|
<li>We donate a portion of our proceeds to likeminded hacker groups around the globe</li>
|
||||||
</ul>
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -7,15 +7,40 @@
|
|||||||
<h1>CAPSUL TYPES & PRICING</h1>
|
<h1>CAPSUL TYPES & PRICING</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="row half-margin">
|
<div class="row half-margin">
|
||||||
<p>
|
<table>
|
||||||
Rates for this service aren't set yet. You can see Cyberia's Capsul pricing
|
<thead>
|
||||||
on <a href="https://capsul.org/pricing">their website</a>.
|
<tr>
|
||||||
</p>
|
<th>type</th>
|
||||||
|
<th>monthly*</th>
|
||||||
|
<th>cpus</th>
|
||||||
|
<th>mem</th>
|
||||||
|
<th>ssd</th>
|
||||||
|
<th>net</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for vm_size_key, vm_size in vm_sizes.items() %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ vm_size_key }}</td>
|
||||||
|
<td>${{ vm_size['dollars_per_month'] }}</td>
|
||||||
|
<td>{{ vm_size['vcpus'] }}</td>
|
||||||
|
<td>{{ vm_size['memory_mb'] }}</td>
|
||||||
|
<td>25G</td>
|
||||||
|
<td>{{ vm_size['bandwidth_gb_per_month'] }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="row half-margin">
|
||||||
<pre>
|
<pre>
|
||||||
|
* net is calculated as a per-month average
|
||||||
|
* vms are billed for a minimum of 24 hours upon creation
|
||||||
|
* all VMs come standard with one public IPv4 address
|
||||||
|
|
||||||
SUPPORTED OPERATING SYSTEMS:
|
SUPPORTED OPERATING SYSTEMS:
|
||||||
|
|
||||||
|
|
||||||
{% for os_id, os in operating_systems.items() %} - {{ os.description }}
|
{% for os_id, os in operating_systems.items() %} - {{ os.description }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -7,14 +7,20 @@
|
|||||||
<h1>SUPPORT</h1>
|
<h1>SUPPORT</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="row half-margin">
|
<div class="row half-margin">
|
||||||
<a href="mailto:yolocolo@doesthisthing.work?subject=Please%20help!">yolocolo@doesthisthing.work</a>
|
<a href="mailto:support@cyberia.club?subject=Please%20help!">support@cyberia.club</a>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block subcontent %}
|
{% block subcontent %}
|
||||||
<p>
|
<p>
|
||||||
You can also find us on Matrix: <a
|
Note: We maintain a searchable archive of all support emails at
|
||||||
href="https://matrix.to/#/#untitled-hosting.public:autonomic.zone">#untitled-hosting.public:autonomic.zone</a>.
|
<a href="https://lists.cyberia.club/~cyberia/support">https://lists.cyberia.club/~cyberia/support</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
If you do not want your mail to appear in a public archive, email <a href="mailto:capsul@cyberia.club?subject=Please%20help!">capsul@cyberia.club</a> instead.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Please describe your problem or feature request, and we will do our best to get back to you promptly. Thank you very much.
|
||||||
</p>
|
</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
94
capsulflask/theme/yolocolo/account-balance.html
Normal file
94
capsulflask/theme/yolocolo/account-balance.html
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block title %}Account Balance{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row third-margin">
|
||||||
|
<h1>Account Balance: ${{ account_balance }}</h1>
|
||||||
|
</div>
|
||||||
|
<div class="half-margin">
|
||||||
|
|
||||||
|
{% if has_vms and has_payments and warning_text != "" %}
|
||||||
|
<div class="row">
|
||||||
|
<pre class="wrap">{{ warning_text }}</pre>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="row">
|
||||||
|
{% if has_payments %}
|
||||||
|
<div>
|
||||||
|
<div class="row third-margin">
|
||||||
|
<h1>Payments</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>amount</th>
|
||||||
|
<th>date</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for payment in payments %}
|
||||||
|
<tr>
|
||||||
|
<td class="{{ payment['class_name'] }}">${{ payment["dollars"] }}</td>
|
||||||
|
<td class="{{ payment['class_name'] }}">{{ payment["created"] }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<h1>PAYMENT OPTIONS</h1>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="/payment/stripe">Add funds with Credit/Debit (stripe)</a>
|
||||||
|
<ul><li>notice: stripe will load nonfree javascript </li></ul>
|
||||||
|
</li>
|
||||||
|
{% if btcpay_enabled %}
|
||||||
|
<li><a href="/payment/btcpay">Add funds with Bitcoin/Litecoin/Monero (btcpay)</a></li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
{% if has_vms %}
|
||||||
|
<div class="row third-margin">
|
||||||
|
<h1>Capsuls Billed</h1>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<table class="small">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>id</th>
|
||||||
|
<th>created</th>
|
||||||
|
<th>deleted</th>
|
||||||
|
<th>$/month</th>
|
||||||
|
<th>months</th>
|
||||||
|
<th>$ billed</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for vm in vms_billed %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ vm["id"] }}</td>
|
||||||
|
<td>{{ vm["created"] }}</td>
|
||||||
|
<td>{{ vm["deleted"] }}</td>
|
||||||
|
<td>${{ vm["dollars_per_month"] }}</td>
|
||||||
|
<td>{{ vm["months"] }}</td>
|
||||||
|
<td>${{ vm["dollars"] }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block pagesource %}/templates/create-capsul.html{% endblock %}
|
60
capsulflask/theme/yolocolo/base.html
Normal file
60
capsulflask/theme/yolocolo/base.html
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<!-- Namecoin Address: N2aVL6pHtBp7EtNGb3jpsL2L2NyjBNbiB1 -->
|
||||||
|
<link href="{{ url_for('static', filename='favicon.ico') }}" rel="icon">
|
||||||
|
<title>{% block title %}{% endblock %}{% if self.title() %} - {% endif %}Capsul</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<meta name="Description" content="Cyberia Capsul">
|
||||||
|
{% block head %}{% endblock %}
|
||||||
|
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
|
||||||
|
<link rel="stylesheet" href="{{ url_for('static', filename='style.yolocolo.css') }}">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav>
|
||||||
|
<div class="row justify-space-between half-margin">
|
||||||
|
<div>
|
||||||
|
🦉 <a href="/"><b>YOLOCOLO</b></a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
{% if session["account"] %}
|
||||||
|
{ {{ session["account"] }} <a href="{{ url_for('auth.logout') }}">Log Out</a> }
|
||||||
|
{% else %}
|
||||||
|
<a href="{{ url_for('auth.login') }}">Login</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row justify-center half-margin wrap nav-links">
|
||||||
|
<a href="/pricing">Pricing</a>
|
||||||
|
<a href="/faq">FAQ</a>
|
||||||
|
|
||||||
|
{% if session["account"] %}
|
||||||
|
<a href="/console">Capsuls</a>
|
||||||
|
<a href="/console/ssh">SSH Public Keys</a>
|
||||||
|
<a href="/console/account-balance">Account Balance</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<a href="/support">Support</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
{% for message in get_flashed_messages() %}
|
||||||
|
<div class="flash">{{ message }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% block custom_flash %}{% endblock %}
|
||||||
|
<main>
|
||||||
|
{% block content %}{% endblock %}
|
||||||
|
</main>
|
||||||
|
{% block subcontent %}{% endblock %}
|
||||||
|
<footer>
|
||||||
|
This server runs <a
|
||||||
|
href="https://giit.cyberia.club/~forest/capsul-flask">capsul-flask</a> by
|
||||||
|
Cyberia Computer Club, available under the <a
|
||||||
|
href="https://creativecommons.org/licenses/by-sa/4.0/">Attribution-ShareAlike
|
||||||
|
4.0 International</a> licence.<br/><br/>
|
||||||
|
<a href="https://git.autonomic.zone/3wordchant/capsul-flask/src/branch/yolocolo/capsulflask{% block pagesource %}{% endblock %}">View page source</a>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
|
68
capsulflask/theme/yolocolo/capsuls.html
Normal file
68
capsulflask/theme/yolocolo/capsuls.html
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block title %}Capsuls{% endblock %}
|
||||||
|
|
||||||
|
{% block custom_flash %}
|
||||||
|
{% if created %}
|
||||||
|
<div class="flash green">{{ created }} successfully created!</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row third-margin">
|
||||||
|
<h1>Capsuls</h1>
|
||||||
|
</div>
|
||||||
|
<div class="third-margin">
|
||||||
|
{% if has_vms %}
|
||||||
|
<div class="row third-margin justify-end">
|
||||||
|
<a href="/console/create">Create Capsul</a>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="heart-icon">❦</th>
|
||||||
|
<th>id</th>
|
||||||
|
<th>size</th>
|
||||||
|
<th>cpu</th>
|
||||||
|
<th>mem</th>
|
||||||
|
<th>ipv4</th>
|
||||||
|
<th>os</th>
|
||||||
|
<th>created</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for vm in vms %}
|
||||||
|
<tr>
|
||||||
|
{% if vm['state'] == 'starting' or vm['state'] == 'stopping' %}
|
||||||
|
<td class="capsul-status waiting-pulse">•</td>
|
||||||
|
{% elif vm['state'] == 'crashed' or vm['state'] == 'blocked' or vm['state'] == 'stopped' %}
|
||||||
|
<td class="capsul-status red">•</td>
|
||||||
|
{% elif vm['state'] == 'unknown' %}
|
||||||
|
<td class="capsul-status-questionmark">?</td>
|
||||||
|
{% else %}
|
||||||
|
<td class="capsul-status green">•</td>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<td><a class="no-shadow" href="/console/{{ vm['id'] }}">{{ vm["id"] }}</a></td>
|
||||||
|
<td>{{ vm["size"] }}</td>
|
||||||
|
<td class="metrics"><img src="/metrics/cpu/{{ vm['id'] }}/5m/s"/></td>
|
||||||
|
<td class="metrics"><img src="/metrics/memory/{{ vm['id'] }}/5m/s"/></td>
|
||||||
|
<td class="{{ vm['ipv4_status'] }}">{{ vm["ipv4"] }}</td>
|
||||||
|
<td>{{ vm["os"] }}</td>
|
||||||
|
<td>{{ vm["created"] }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
<div class="row">
|
||||||
|
<p>You don't have any Capsuls running. <a href="/console/create">Create one</a> today!</p>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block pagesource %}/templates/capsuls.html{% endblock %}
|
46
capsulflask/theme/yolocolo/faq.html
Normal file
46
capsulflask/theme/yolocolo/faq.html
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block title %}FAQ{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row full-margin"><h1>Frequently Asked Questions</h1></div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block subcontent %}
|
||||||
|
<p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
What is this?
|
||||||
|
<p>
|
||||||
|
This is a <strong>technical demo</strong> of <a
|
||||||
|
href="https://giit.cyberia.club/~forest/capsul-flask">Capsul</a>, for the
|
||||||
|
as-yet-untitled <a href="https://coops.tech">Cotech</a> server hosting
|
||||||
|
initiative, which you can <a
|
||||||
|
href="https://community.coops.tech/t/call-for-input-v2-co-op-vps-survey/2802/9">read
|
||||||
|
about on the Cotech forum</a>.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
What do you mean, "technical demo"?
|
||||||
|
<p>No backups</p>
|
||||||
|
<p>No service level agreement</p>
|
||||||
|
<p>"Best effort" support</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Where can I get this, but, more reliable?
|
||||||
|
<p>Cyberia, the authors of this platform, run the canonical instance, <a
|
||||||
|
href="https://capsul.org">Capsul.org</a>, on hardware they own. Please
|
||||||
|
send them your money! (cash, crypto, or card accepted).</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
How do I use this system?
|
||||||
|
<p>Please see <a href="https://capsul.org/faq">the official Capsul FAQ
|
||||||
|
page</a>.</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block pagesource %}/templates/faq.html{% endblock %}
|
||||||
|
|
28
capsulflask/theme/yolocolo/index.html
Normal file
28
capsulflask/theme/yolocolo/index.html
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>
|
||||||
|
<pre>
|
||||||
|
_ _
|
||||||
|
_ _ ___ | | ___ ___ ___ | | ___
|
||||||
|
| | | |/ _ \| |/ _ \ / __/ _ \| |/ _ \
|
||||||
|
| |_| | (_) | | (_) | (_| (_) | | (_) |
|
||||||
|
\__, |\___/|_|\___/ \___\___/|_|\___/
|
||||||
|
|___/
|
||||||
|
|
||||||
|
</pre>
|
||||||
|
<span>Co-operative hosting using <a href="https://cyberia.club">Cyberia</a>'s Capsul</span>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block subcontent %}
|
||||||
|
<p>
|
||||||
|
<ul>
|
||||||
|
<li>Sign up for an account!</li>
|
||||||
|
<li>Add some funds!</li>
|
||||||
|
<li>Create a VPS!</li>
|
||||||
|
<li>Give your feedback!</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block pagesource %}/templates/index.html{% endblock %}
|
23
capsulflask/theme/yolocolo/pricing.html
Normal file
23
capsulflask/theme/yolocolo/pricing.html
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block title %}Pricing{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row third-margin">
|
||||||
|
<h1>CAPSUL TYPES & PRICING</h1>
|
||||||
|
</div>
|
||||||
|
<div class="row half-margin">
|
||||||
|
<p>
|
||||||
|
Rates for this service aren't set yet. You can see Cyberia's Capsul pricing
|
||||||
|
on <a href="https://capsul.org/pricing">their website</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
SUPPORTED OPERATING SYSTEMS:
|
||||||
|
|
||||||
|
{% for os_id, os in operating_systems.items() %} - {{ os.description }}
|
||||||
|
{% endfor %}
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
21
capsulflask/theme/yolocolo/support.html
Normal file
21
capsulflask/theme/yolocolo/support.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block title %}Support{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row half-margin">
|
||||||
|
<h1>SUPPORT</h1>
|
||||||
|
</div>
|
||||||
|
<div class="row half-margin">
|
||||||
|
<a href="mailto:yolocolo@doesthisthing.work?subject=Please%20help!">yolocolo@doesthisthing.work</a>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block subcontent %}
|
||||||
|
<p>
|
||||||
|
You can also find us on Matrix: <a
|
||||||
|
href="https://matrix.to/#/#untitled-hosting.public:autonomic.zone">#untitled-hosting.public:autonomic.zone</a>.
|
||||||
|
</p>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block pagesource %}/templates/support.html{% endblock %}
|
Loading…
Reference in New Issue
Block a user