"""Less flashy version. More hard-coding.""" from pathlib import Path from shlex import split from subprocess import run from flask import Flask, render_template from flask_wtf import FlaskForm from ruamel.yaml import YAML from wtforms import PasswordField, StringField from wtforms.validators import DataRequired app = Flask(__name__) app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' yaml = YAML() APPS = {"gitea": "https://git.autonomic.zone/compose-stacks/gitea"} DATA_DIR = Path("./data") class GiteaConfigForm(FlaskForm): app_name = StringField("Application name", default="Gitea") db_host = StringField("Database host", default="mariadb:3306") db_name = StringField("Database name", default="gitea") db_passwd = PasswordField("Database password", validators=[DataRequired()]) db_root_passwd = PasswordField( "Root database password", validators=[DataRequired()] ) db_type = StringField("Database type", default="mysql") db_user = StringField("Database user", default="mysql") domain = StringField("Domain name", validators=[DataRequired()]) ssh_port = StringField("SSH port", default="2222") stack_name = StringField("Stack name", default="gitea") internal_token = PasswordField("Internal token", validators=[DataRequired()]) jwt_secret = PasswordField("JWT secret", validators=[DataRequired()]) def clone_app_template(app_name): """Git clone an app template repository.""" clone_path = DATA_DIR / app_name clone_url = apps[app_name] run(split(f"git clone {clone_url} {clone_path}")) @app.route("/") def index(): return render_template("second/index.html", apps=[app for app in APPS]) @app.route("/") def app_config(app_name): if app_name == "gitea": form = GiteaConfigForm() return render_template("second/config.html", app_name=app_name, form=form) if __name__ == "__main__": app.run(debug=True, host="0.0.0.0")