diff --git a/app/models.py b/app/models.py index d3963d0..20c4aba 100644 --- a/app/models.py +++ b/app/models.py @@ -232,7 +232,10 @@ class Order(db.Model): pid = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.ForeignKey('users.pid')) #FK recipe_id = db.Column(db.ForeignKey('recipes.pid')) #FK - parameters = db.Column(db.String) + parameter1 = db.Column(db.String) + parameter2 = db.Column(db.String) + parameter3 = db.Column(db.String) + parameter4 = db.Column(db.String) class Recipe(db.Model): __tablename__ = 'recipes' diff --git a/app/panel/forms.py b/app/panel/forms.py index e885844..bb2ce7a 100644 --- a/app/panel/forms.py +++ b/app/panel/forms.py @@ -6,9 +6,17 @@ from wtforms.fields.html5 import EmailField, DecimalRangeField from .. import db class OrderForm(FlaskForm): - alias = StringField('Machine Alias:', [validators.Regexp(message='ex.: myservice1.com, myservice2.local', regex='^[a-zA-Z0-9][a-zA-Z0-9-_]{0,61}[a-zA-Z0-9]{0,1}\.([a-zA-Z]{1,6}|[a-zA-Z0-9-]{1,30}\.[a-zA-Z]{2,3})$'), validators.Length(6,64)]) + region_choices = [(1, 'Plovdiv, Bulgaria')] + region = SelectField('Region:', choices=region_choices, coerce=int) + + vmtype_choices = [(1, 'RootVPS')] + vmtype = SelectField('Type:', choices=vmtype_choices, coerce=int) + cpu = DecimalRangeField('Processor Cores', default=2) memory = DecimalRangeField('Memory', default=512) storage = DecimalRangeField('Storage', default=10) - submit = SubmitField('Create') + + alias = StringField('Machine Alias:', [validators.Regexp(message='ex.: myservice1.com, myservice2.local', regex='^[a-zA-Z0-9][a-zA-Z0-9-_]{0,61}[a-zA-Z0-9]{0,1}\.([a-zA-Z]{1,6}|[a-zA-Z0-9-]{1,30}\.[a-zA-Z]{2,3})$'), validators.Length(6,64)]) + + submit = SubmitField('DEPLOY') diff --git a/app/panel/routes.py b/app/panel/routes.py index 6dfca79..033e2b5 100644 --- a/app/panel/routes.py +++ b/app/panel/routes.py @@ -6,7 +6,7 @@ from . import panel from .forms import OrderForm from .. import db from ..email import send_email -from ..models import User, Permission, Server, Deployment, Service, Region, Address, Domain, contact_proxmaster +from ..models import User, Permission, Recipe, Order, Server, Deployment, Service, Region, Address, Domain, contact_proxmaster import base64 @@ -17,13 +17,23 @@ def after_request(response): current_app.logger.warning('Slow query: %s\nParameters: %s\nDuration: %fs\nContext: %s\n' % (query.statement, query.parameters, query.duration, query.context)) return response -@panel.route("/ordervm", methods=['GET', 'POST']) +@panel.route("/deploy", methods=['GET', 'POST']) @login_required -def order(): +def deploy(): + if current_user.name is None: + return redirect(url_for('settings.profile')) + form = OrderForm() if form.validate_on_submit(): - pass - return redirect('main.dashboard') + recipe = Recipe.query.filter_by(category='deploy').first() + new_order = Order(user_id=int(current_user.pid), recipe_id=int(recipe.pid), parameter1=str(form.alias.data), parameter2=str(form.cpu.data), parameter3=str(form.memory.data), parameter4=str(form.storage.data)) + db.session.add(new_order) + db.session.commit() + send_email(current_app.config['MAIL_USERNAME'], 'New order from {}'.format(current_user.email), + 'panel/email/adm_neworder', user=current_user) + return redirect(request.args.get('next') or url_for('panel.dashboard')) + + return render_template('panel/deploy.html', form=form) #DASHBOARD @panel.route("/dashboard", methods=['GET', 'POST']) diff --git a/app/templates/panel/deploy.html b/app/templates/panel/deploy.html new file mode 100644 index 0000000..917ac77 --- /dev/null +++ b/app/templates/panel/deploy.html @@ -0,0 +1,115 @@ +{% extends "base.html" %} +{% block title %}Deploy New Instance{% endblock %} + +{% block scripts %} +{{ super() }} + + +{% endblock %} + +{% block page_content %} +
{{ user.email }} have ordered a new deployment
+
+
Regards,
+Proxadmin