Compare commits
	
		
			11 Commits
		
	
	
		
			cyberia-pr
			...
			yc-templat
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 89268726e6 | |||
| 487a1ac0a3 | |||
| 6f3ecf991d | |||
| 40aa3bccd3 | |||
| bcc3f20b27 | |||
| 8bd3971545 | |||
| c639899cd0 | |||
| a47c430855 | |||
| d5362897df | |||
| a52d183f2e | |||
| 73042d1705 | 
@ -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'])
 | 
				
			||||||
@ -142,12 +145,8 @@ app.config['HTTP_CLIENT'] = MyHTTPClient(timeout_seconds=int(app.config['INTERNA
 | 
				
			|||||||
app.config['BTCPAY_ENABLED'] = False
 | 
					app.config['BTCPAY_ENABLED'] = False
 | 
				
			||||||
if app.config['BTCPAY_URL'] != "":
 | 
					if app.config['BTCPAY_URL'] != "":
 | 
				
			||||||
  try:
 | 
					  try:
 | 
				
			||||||
    response = requests.get(app.config['BTCPAY_URL'])
 | 
					    app.config['BTCPAY_CLIENT'] = btcpay.Client(api_uri=app.config['BTCPAY_URL'], pem=app.config['BTCPAY_PRIVATE_KEY'])
 | 
				
			||||||
    if response.status_code == 200:
 | 
					    app.config['BTCPAY_ENABLED'] = True
 | 
				
			||||||
      app.config['BTCPAY_CLIENT'] = btcpay.Client(api_uri=app.config['BTCPAY_URL'], pem=app.config['BTCPAY_PRIVATE_KEY'])
 | 
					 | 
				
			||||||
      app.config['BTCPAY_ENABLED'] = True
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
      app.logger.warning(f"Can't reach BTCPAY_URL {app.config['BTCPAY_URL']}: Response status code: {response.status_code}. Capsul will work fine except cryptocurrency payments will not work.")
 | 
					 | 
				
			||||||
  except:
 | 
					  except:
 | 
				
			||||||
    app.logger.warning("unable to create btcpay client. Capsul will work fine except cryptocurrency payments will not work. The error was: " + my_exec_info_message(sys.exc_info()))
 | 
					    app.logger.warning("unable to create btcpay client. Capsul will work fine except cryptocurrency payments will not work. The error was: " + my_exec_info_message(sys.exc_info()))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -158,6 +157,14 @@ 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([
 | 
				
			||||||
 | 
					    jinja2.FileSystemLoader(
 | 
				
			||||||
 | 
					      [os.path.join('capsulflask', 'theme', 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":
 | 
				
			||||||
 | 
				
			|||||||
@ -62,18 +62,6 @@ def sql_script(f, c):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    model.connection.commit()
 | 
					    model.connection.commit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@bp.cli.command('account-balance')
 | 
					 | 
				
			||||||
@click.option('-u', help='users email address')
 | 
					 | 
				
			||||||
@with_appcontext
 | 
					 | 
				
			||||||
def account_balance(u):
 | 
					 | 
				
			||||||
  vms = get_model().list_vms_for_account(u)
 | 
					 | 
				
			||||||
  payments = get_model().list_payments_for_account(u)
 | 
					 | 
				
			||||||
  click.echo(".")
 | 
					 | 
				
			||||||
  click.echo(".")
 | 
					 | 
				
			||||||
  click.echo(get_account_balance(vms, payments, datetime.utcnow()))
 | 
					 | 
				
			||||||
  click.echo(".")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@bp.cli.command('cron-task')
 | 
					@bp.cli.command('cron-task')
 | 
				
			||||||
@with_appcontext
 | 
					@with_appcontext
 | 
				
			||||||
 | 
				
			|||||||
@ -43,7 +43,7 @@ def init_app(app, is_running_server):
 | 
				
			|||||||
  hasSchemaVersionTable = False
 | 
					  hasSchemaVersionTable = False
 | 
				
			||||||
  actionWasTaken = False
 | 
					  actionWasTaken = False
 | 
				
			||||||
  schemaVersion = 0
 | 
					  schemaVersion = 0
 | 
				
			||||||
  desiredSchemaVersion = 20
 | 
					  desiredSchemaVersion = 18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cursor = connection.cursor()
 | 
					  cursor = connection.cursor()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -228,8 +228,8 @@ class CapsulFlaskHub(VirtualizationInterface):
 | 
				
			|||||||
        # no need to do anything here since if it cant be parsed then generic_operation will handle it.
 | 
					        # no need to do anything here since if it cant be parsed then generic_operation will handle it.
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
    assigned_hosts_string = ", ".join(assigned_hosts)
 | 
					 | 
				
			||||||
    if number_of_assigned != 1:
 | 
					    if number_of_assigned != 1:
 | 
				
			||||||
 | 
					      assigned_hosts_string = ", ".join(assigned_hosts)
 | 
				
			||||||
      raise ValueError(f"expected create capsul operation {operation_id} to be assigned to one host, it was assigned to {number_of_assigned} ({assigned_hosts_string})")
 | 
					      raise ValueError(f"expected create capsul operation {operation_id} to be assigned to one host, it was assigned to {number_of_assigned} ({assigned_hosts_string})")
 | 
				
			||||||
    if error_message != "":
 | 
					    if error_message != "":
 | 
				
			||||||
      raise ValueError(f"create capsul operation {operation_id} on {assigned_hosts_string} failed with {error_message}")
 | 
					      raise ValueError(f"create capsul operation {operation_id} on {assigned_hosts_string} failed with {error_message}")
 | 
				
			||||||
 | 
				
			|||||||
@ -58,19 +58,14 @@ def btcpay_payment():
 | 
				
			|||||||
    dollars = result[1]
 | 
					    dollars = result[1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if len(errors) == 0:
 | 
					    if len(errors) == 0:
 | 
				
			||||||
      try:
 | 
					      invoice = current_app.config['BTCPAY_CLIENT'].create_invoice(dict(
 | 
				
			||||||
        invoice = current_app.config['BTCPAY_CLIENT'].create_invoice(dict(
 | 
					        price=float(dollars), 
 | 
				
			||||||
          price=float(dollars), 
 | 
					        currency="USD",
 | 
				
			||||||
          currency="USD",
 | 
					        itemDesc="Capsul Cloud Compute",
 | 
				
			||||||
          itemDesc="Capsul Cloud Compute",
 | 
					        transactionSpeed="high",
 | 
				
			||||||
          transactionSpeed="high",
 | 
					        redirectURL=f"{current_app.config['BASE_URL']}/console/account-balance",
 | 
				
			||||||
          redirectURL=f"{current_app.config['BASE_URL']}/console/account-balance",
 | 
					        notificationURL=f"{current_app.config['BASE_URL']}/payment/btcpay/webhook"
 | 
				
			||||||
          notificationURL=f"{current_app.config['BASE_URL']}/payment/btcpay/webhook"
 | 
					      ))
 | 
				
			||||||
        ))
 | 
					 | 
				
			||||||
      except:
 | 
					 | 
				
			||||||
        current_app.logger.error(f"An error occurred while attempting to reach BTCPay Server: {my_exec_info_message(sys.exc_info())}")
 | 
					 | 
				
			||||||
        flash("An error occurred while attempting to reach BTCPay Server.")
 | 
					 | 
				
			||||||
        return redirect(url_for("console.account_balance"))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      current_app.logger.info(f"created btcpay invoice: {invoice}")
 | 
					      current_app.logger.info(f"created btcpay invoice: {invoice}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +0,0 @@
 | 
				
			|||||||
DELETE FROM os_images WHERE id = 'guixsystem130';
 | 
					 | 
				
			||||||
DELETE FROM os_images WHERE id = 'archlinux';
 | 
					 | 
				
			||||||
UPDATE os_images SET deprecated = FALSE WHERE id = 'guixsystem120';
 | 
					 | 
				
			||||||
UPDATE os_images SET deprecated = FALSE WHERE id = 'centos7';
 | 
					 | 
				
			||||||
UPDATE os_images SET deprecated = FALSE WHERE id = 'centos8';
 | 
					 | 
				
			||||||
UPDATE os_images SET description = 'Ubuntu 20.04 LTS (Fossa)' WHERE id = 'ubuntu20';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
UPDATE schemaversion SET version = 18;
 | 
					 | 
				
			||||||
@ -1,12 +0,0 @@
 | 
				
			|||||||
INSERT INTO os_images (id, template_image_file_name, description, deprecated)
 | 
					 | 
				
			||||||
VALUES  ('guixsystem130', 'guixsystem/1.3.0/root.img.qcow2', 'Guix System 1.3.0', FALSE);
 | 
					 | 
				
			||||||
INSERT INTO os_images (id, template_image_file_name, description, deprecated)
 | 
					 | 
				
			||||||
VALUES  ('archlinux', 'archlinux/root.img.qcow2', 'Arch Linux', FALSE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
UPDATE os_images SET deprecated = TRUE WHERE id = 'guixsystem120';
 | 
					 | 
				
			||||||
UPDATE os_images SET deprecated = TRUE WHERE id = 'centos7';
 | 
					 | 
				
			||||||
UPDATE os_images SET deprecated = TRUE WHERE id = 'centos8';
 | 
					 | 
				
			||||||
UPDATE os_images SET description = 'Ubuntu 20.04 (Focal)' WHERE id = 'ubuntu20';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
UPDATE schemaversion SET version = 19;
 | 
					 | 
				
			||||||
@ -1,21 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
ALTER TABLE host_network ALTER CONSTRAINT host_network_host_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE host_operation ALTER CONSTRAINT host_operation_host_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE host_operation ALTER CONSTRAINT host_operation_operation_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE login_tokens ALTER CONSTRAINT login_tokens_email_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE operations ALTER CONSTRAINT operations_email_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE payment_sessions ALTER CONSTRAINT payment_sessions_email_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE payments ALTER CONSTRAINT payments_email_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE ssh_public_keys ALTER CONSTRAINT ssh_public_keys_email_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE unresolved_btcpay_invoices ALTER CONSTRAINT unresolved_btcpay_invoices_email_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE unresolved_btcpay_invoices ALTER CONSTRAINT unresolved_btcpay_invoices_email_payment_id_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE vm_ssh_authorized_key ALTER CONSTRAINT vm_ssh_public_key_email_ssh_public_key_name_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE vm_ssh_authorized_key ALTER CONSTRAINT vm_ssh_public_key_email_vm_id_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE vm_ssh_host_key ALTER CONSTRAINT vm_ssh_host_key_email_vm_id_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE vms ALTER CONSTRAINT vms_email_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE vms ALTER CONSTRAINT vms_host_network_name_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE vms ALTER CONSTRAINT vms_host_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE vms ALTER CONSTRAINT vms_os_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
ALTER TABLE vms ALTER CONSTRAINT vms_size_fkey NOT DEFERRABLE;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
UPDATE schemaversion SET version = 19;
 | 
					 | 
				
			||||||
@ -1,21 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
ALTER TABLE host_network ALTER CONSTRAINT host_network_host_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE host_operation ALTER CONSTRAINT host_operation_host_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE host_operation ALTER CONSTRAINT host_operation_operation_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE login_tokens ALTER CONSTRAINT login_tokens_email_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE operations ALTER CONSTRAINT operations_email_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE payment_sessions ALTER CONSTRAINT payment_sessions_email_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE payments ALTER CONSTRAINT payments_email_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE ssh_public_keys ALTER CONSTRAINT ssh_public_keys_email_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE unresolved_btcpay_invoices ALTER CONSTRAINT unresolved_btcpay_invoices_email_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE unresolved_btcpay_invoices ALTER CONSTRAINT unresolved_btcpay_invoices_email_payment_id_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE vm_ssh_authorized_key ALTER CONSTRAINT vm_ssh_public_key_email_ssh_public_key_name_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE vm_ssh_authorized_key ALTER CONSTRAINT vm_ssh_public_key_email_vm_id_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE vm_ssh_host_key ALTER CONSTRAINT vm_ssh_host_key_email_vm_id_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE vms ALTER CONSTRAINT vms_email_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE vms ALTER CONSTRAINT vms_host_network_name_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE vms ALTER CONSTRAINT vms_host_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE vms ALTER CONSTRAINT vms_os_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
ALTER TABLE vms ALTER CONSTRAINT vms_size_fkey DEFERRABLE INITIALLY DEFERRED;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
UPDATE schemaversion SET version = 20;
 | 
					 | 
				
			||||||
@ -182,10 +182,7 @@ def handle_destroy(operation_id, request_body):
 | 
				
			|||||||
    return abort(400, f"bad request; email is required for destroy")
 | 
					    return abort(400, f"bad request; email is required for destroy")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  try:
 | 
					  try:
 | 
				
			||||||
    vm = current_app.config['SPOKE_MODEL'].get(request_body['id'], False)
 | 
					    current_app.config['SPOKE_MODEL'].destroy(id=request_body['id'], email=request_body['email'])
 | 
				
			||||||
    current_app.logger.warning(f"destroy {request_body['id']} was called for {request_body['email']}, however the vm does not exist. returning success. ")
 | 
					 | 
				
			||||||
    if vm is not None:
 | 
					 | 
				
			||||||
      current_app.config['SPOKE_MODEL'].destroy(id=request_body['id'], email=request_body['email'])
 | 
					 | 
				
			||||||
  except:
 | 
					  except:
 | 
				
			||||||
    error_message = my_exec_info_message(sys.exc_info())
 | 
					    error_message = my_exec_info_message(sys.exc_info())
 | 
				
			||||||
    params =          f"email='{request_body['email'] if 'email' in request_body else 'KeyError'}', "
 | 
					    params =          f"email='{request_body['email'] if 'email' in request_body else 'KeyError'}', "
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								capsulflask/static/favicon.yolocolo.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								capsulflask/static/favicon.yolocolo.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								capsulflask/static/icon.yolocolo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								capsulflask/static/icon.yolocolo.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1.2 KiB  | 
							
								
								
									
										35
									
								
								capsulflask/static/style.yolocolo.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								capsulflask/static/style.yolocolo.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					html {
 | 
				
			||||||
 | 
					  color: #241e1e !important;
 | 
				
			||||||
 | 
					  background-color: #bdc7b8 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					a {
 | 
				
			||||||
 | 
					  color:#00517a !important;
 | 
				
			||||||
 | 
					  text-shadow: 1px 1px 0px #eee !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					a:hover, a:active, a:visited {
 | 
				
			||||||
 | 
					  color: #323417 !important;
 | 
				
			||||||
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.nav-links  a {
 | 
				
			||||||
 | 
					  text-shadow: 2px 2px 0px #eee !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h1, h2, h3, h4, h5 {
 | 
				
			||||||
 | 
						text-shadow: 2px 2px 0px #eee;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					main {
 | 
				
			||||||
 | 
					  border: 1px dashed #241e1e !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input, select, textarea {
 | 
				
			||||||
 | 
					  color: #241e1e !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					th {
 | 
				
			||||||
 | 
					  border-right: 1px solid #eee !important;
 | 
				
			||||||
 | 
					  text-align: left !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -7,11 +7,18 @@
 | 
				
			|||||||
    <h1>SUPPORT</h1>
 | 
					    <h1>SUPPORT</h1>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
  <div class="row half-margin">
 | 
					  <div class="row half-margin">
 | 
				
			||||||
    <a href="mailto:support@cyberia.club?subject=capsul%20support%20request">support@cyberia.club</a>
 | 
					    <a href="mailto:support@cyberia.club?subject=Please%20help!">support@cyberia.club</a> 
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
{% endblock %}
 | 
					{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% block subcontent %}
 | 
					{% block subcontent %}
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					  Note: We maintain a searchable archive of all support emails at 
 | 
				
			||||||
 | 
					  <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>
 | 
					<p>
 | 
				
			||||||
  Please describe your problem or feature request, and we will do our best to get back to you promptly. Thank you very much.
 | 
					  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>
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										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.yolocolo.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 %}
 | 
				
			||||||
@ -48,20 +48,3 @@ $ pipenv run flask cli sql -c "SELECT id, created, email, dollars, invalidated f
 | 
				
			|||||||
## how to view the logs on the database server (legion.cyberia.club)
 | 
					## how to view the logs on the database server (legion.cyberia.club)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`sudo -u postgres pg_dump capsul-flask | gzip -9 > capsul-backup-2021-02-15.gz`
 | 
					`sudo -u postgres pg_dump capsul-flask | gzip -9 > capsul-backup-2021-02-15.gz`
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## changing the email address on an account
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
UPDATE accounts SET lower_case_email = 'new@email.address' WHERE email = 'old@email.address' ;
 | 
					 | 
				
			||||||
UPDATE accounts SET email = 'new@email.address' WHERE email = 'old@email.address' ;
 | 
					 | 
				
			||||||
UPDATE login_tokens SET email = 'new@email.address' WHERE email = 'old@email.address' ;
 | 
					 | 
				
			||||||
UPDATE operations SET email = 'new@email.address' WHERE email = 'old@email.address' ;
 | 
					 | 
				
			||||||
UPDATE payment_sessions SET email = 'new@email.address' WHERE email = 'old@email.address' ;
 | 
					 | 
				
			||||||
UPDATE payments SET email = 'new@email.address' WHERE email = 'old@email.address' ;
 | 
					 | 
				
			||||||
UPDATE ssh_public_keys SET email = 'new@email.address' WHERE email = 'old@email.address' ;
 | 
					 | 
				
			||||||
UPDATE unresolved_btcpay_invoices SET email = 'new@email.address' WHERE email = 'old@email.address' ;
 | 
					 | 
				
			||||||
UPDATE vm_ssh_authorized_key SET email = 'new@email.address' WHERE email = 'old@email.address' ;
 | 
					 | 
				
			||||||
UPDATE vm_ssh_host_key SET email = 'new@email.address' WHERE email = 'old@email.address' ;
 | 
					 | 
				
			||||||
UPDATE vms SET email = 'new@email.address' WHERE email = 'old@email.address' ;
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user