60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
"""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("/<app_name>")
|
|
def app_config(app_name):
|
|
if app_name == "gitea":
|
|
form = GiteaConfigForm()
|
|
return render_template("second/install.html", app_name=app_name, form=form)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app.run(debug=True, host="0.0.0.0")
|