Add base HTML template & config

This commit is contained in:
c v t 2020-07-05 14:32:34 +02:00
parent 61a1ae62ab
commit fa9c8ef1a3
8 changed files with 119 additions and 36 deletions

0
config/__init__.py Normal file
View File

13
config/base.py Normal file
View File

@ -0,0 +1,13 @@
APPS_SPEC = {
"gitea": {
"url": "https://git.autonomic.zone/compose-stacks/gitea",
"secrets": [
"db_passwd",
"db_root_passwd",
"internal_token",
"jwt_secret",
"secret_key",
],
"configs": ["app_ini"],
}
}

5
config/local.py Normal file
View File

@ -0,0 +1,5 @@
SECRET_KEY = 'replace-with-truly-random-string-for-production'
SERVER_NAME = 'localhost:5001'
DEBUG = True

View File

@ -15,8 +15,37 @@ from ruamel.yaml import YAML
from wtforms import PasswordField, StringField
from wtforms.validators import URL, DataRequired, Length
## FLASK CONFIG
app = Flask(__name__)
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
if environ.get('FLASK_CONFIG', None) is None:
environ['FLASK_CONFIG'] = 'config/local.py'
app.config.from_envvar('FLASK_CONFIG')
## AUTHENTICATION
from flask_login import LoginManager, UserMixin
login_manager = LoginManager()
login_manager.init_app(app)
class User(UserMixin, object):
pass
@login_manager.user_loader
def load_user(user_id):
return User.get(user_id)
## CONFIG
yaml = YAML()
@ -36,6 +65,9 @@ APPS_SPEC = {
DATA_DIR = Path("./data")
## HELPERS
def clone_app_template(app_name: str) -> None:
"""Git clone an app template repository."""
clone_path = DATA_DIR / app_name
@ -126,6 +158,9 @@ def get_loaded_env(app_name, request_form):
return env
## FORMS
class GiteaInstallForm(FlaskForm):
"""Gitea installation form."""
@ -155,6 +190,9 @@ class GiteaInstallForm(FlaskForm):
ssh_host_port = StringField("SSH host port", default="2225")
## VIEWS
@app.route("/")
def index():
"""Home page for app installation possibilities."""
@ -202,4 +240,4 @@ def deploy(app_name):
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0")
app.run()

1
static/picnic.min.css vendored Normal file

File diff suppressed because one or more lines are too long

36
templates/base.html Normal file
View File

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow">
{% block meta %}
<meta name="copyright" content="GPLv3">
<meta name="application-name" content="Magic App">
{% endblock meta %}
<link rel="stylesheet" href="{{ url_for('static', filename='picnic.min.css') }}">
{% if debug %}
{% else %}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/picnic">
{% endif %}
<title>{% block title %}🎩{% endblock %}</title>
</head>
<body style="padding-top: 3em;">
{% block content %}{% endblock %}
<nav>
<a href="#" class="brand">
<span>Magic App</span>
</a>
<!-- responsive-->
<input id="bmenub" type="checkbox" class="show">
<label for="bmenub" class="burger pseudo button">menu</label>
<div class="menu">
<a href="{{ url_for('index') }}" class="button">Apps</a>
</div>
</nav>
</body>
</html>

View File

@ -1,16 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Magic App</title>
</head>
<body>
<p>List of apps that can be installed:</p>
<ul>
{% for app in apps %}
<li><a href="/install/{{ app }}">{{ app }}</a></li>
</ul>
{% endfor %}
</body>
</html>
{% extends "base.html" %}
{% block content %}
<h1>Installable apps</h1>
<p>Where the magic h<em>app</em>ens.</p>
<ul>
{% for app in apps %}
<li><a href="/install/{{ app }}">{{ app }}</a></li>
</ul>
{% endfor %}
{% endblock content %}

View File

@ -1,20 +1,15 @@
{% extends "base.html" %}
{% from "second/macros.html" import with_errors %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Install {{ app_name }}</title>
</head>
<body>
<p>Install {{ app_name }}</p>
<form method="POST" action="/deploy/{{ app_name }}">
{% for field in form %}
{{ field.label() }}
{{ with_errors(field, style='font-weight: bold') }}
{% endfor %}
<input type="submit" value="Deploy" />
</form>
</body>
</html>
{% block title %}Install {{ app_name }} {{ super() }}{% endblock %}
{% block content %}
<p>Install {{ app_name }}</p>
<form method="POST" action="/deploy/{{ app_name }}">
{% for field in form %}
{{ field.label() }}
{{ with_errors(field, style='font-weight: bold') }}
{% endfor %}
<input type="submit" value="Deploy" />
</form>
{% endblock content %}