diff --git a/app/auth/forms.py b/app/auth/forms.py index 2657fa2..2bcc6e3 100644 --- a/app/auth/forms.py +++ b/app/auth/forms.py @@ -7,45 +7,45 @@ from ..models import User class LoginForm(FlaskForm): - email = EmailField('Електронна Поща', [validators.DataRequired(), validators.Length(1,64), validators.Email()]) - password = PasswordField('Парола', [validators.DataRequired(), validators.Length(1,128)]) - remember_me = BooleanField('Запомни ме') + email = EmailField('E-Mail', [validators.DataRequired(), validators.Length(1,64), validators.Email()]) + password = PasswordField('Password', [validators.DataRequired(), validators.Length(1,128)]) + remember_me = BooleanField('Remember me ?') #recaptcha = RecaptchaField() - submit = SubmitField('Вход') + submit = SubmitField('Login') class TwoFAForm(FlaskForm): token = StringField('Token', [validators.DataRequired(), validators.Length(6, 6)]) - submit = SubmitField('Потвърди кода') + submit = SubmitField('Confirm') class RegistrationForm(FlaskForm): - email = StringField('Електронна Поща', [validators.DataRequired(), validators.Length(6,35), validators.Email()]) + email = StringField('E-Mail', [validators.DataRequired(), validators.Length(6,35), validators.Email()]) def validate_email(self, field): if User.query.filter_by(email=field.data).first(): - raise ValidationError('Грешка. Опитайте пак с друг email адрес.') - password = PasswordField('Парола', [validators.DataRequired(), validators.EqualTo('confirm', message='Паролите трябва да съвпадат')]) - confirm = PasswordField('Повторете паролата', [validators.DataRequired()]) - accept_tos = BooleanField('Приемам Условията за Използване на услугата', [validators.DataRequired()]) + raise ValidationError('Error. Please try again.') + password = PasswordField('Password', [validators.DataRequired(), validators.EqualTo('confirm', message='Both passwords must be equal')]) + confirm = PasswordField('Your password again', [validators.DataRequired()]) + accept_tos = BooleanField('I accept the Terms of Service', [validators.DataRequired()]) recaptcha = RecaptchaField() - submit = SubmitField('Регистрация') + submit = SubmitField('REGISTER') class ChangePasswordForm(FlaskForm): - old_password = PasswordField('Стара парола', [validators.DataRequired()]) - password = PasswordField('Нова Парола', [validators.DataRequired(), validators.EqualTo('confirm', message='Паролите трябва да съвпадат')]) - confirm = PasswordField('Повторете паролата') - submit = SubmitField('Обнови паролата') + old_password = PasswordField('Old Password', [validators.DataRequired()]) + password = PasswordField('New Password', [validators.DataRequired(), validators.EqualTo('confirm', message='Both passwords must be equal')]) + confirm = PasswordField('Your password again') + submit = SubmitField('Renew Password') class PasswordResetRequestForm(FlaskForm): - email = EmailField('Електронна Поща', [validators.DataRequired(), validators.Length(1,64), validators.Email()]) + email = EmailField('E-Mail', [validators.DataRequired(), validators.Length(1,64), validators.Email()]) recaptcha = RecaptchaField() - submit = SubmitField('Възстановяване на парола', [validators.DataRequired()]) + submit = SubmitField('Reset password', [validators.DataRequired()]) class PasswordResetForm(FlaskForm): - email = EmailField('Електронна Поща', [validators.DataRequired(), validators.Length(1,64), validators.Email()]) - password = PasswordField('Парола', [validators.DataRequired(), validators.EqualTo('confirm', message='Паролите трябва да съвпадат')]) - confirm = PasswordField('Повторете паролата', [validators.DataRequired()]) - submit = SubmitField('Промяна на паролата') + email = EmailField('E-Mail', [validators.DataRequired(), validators.Length(1,64), validators.Email()]) + password = PasswordField('Password', [validators.DataRequired(), validators.EqualTo('confirm', message='Both password fields must be equal')]) + confirm = PasswordField('Your password again', [validators.DataRequired()]) + submit = SubmitField('Change password') def validate_email(self, field): if User.query.filter_by(email=field.data).first() is None: - raise ValidationError('Грешка. Опитайте пак с друг email адрес.') + raise ValidationError('Error. Please try again.') diff --git a/app/panel/forms.py b/app/panel/forms.py index 057c7c3..e885844 100644 --- a/app/panel/forms.py +++ b/app/panel/forms.py @@ -6,9 +6,9 @@ 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)]) cpu = DecimalRangeField('Processor Cores', default=2) memory = DecimalRangeField('Memory', default=512) - storage = DecimalRangeField('Storage', default=20) - 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)]) + storage = DecimalRangeField('Storage', default=10) submit = SubmitField('Create') diff --git a/app/panel/routes.py b/app/panel/routes.py index e05162a..6dfca79 100644 --- a/app/panel/routes.py +++ b/app/panel/routes.py @@ -17,12 +17,13 @@ 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("/submitorder", methods=['POST']) +@panel.route("/ordervm", methods=['GET', 'POST']) @login_required def order(): + form = OrderForm() if form.validate_on_submit(): pass - return redirect('main.index') + return redirect('main.dashboard') #DASHBOARD @panel.route("/dashboard", methods=['GET', 'POST']) diff --git a/app/templates/panel/order.html b/app/templates/panel/order.html deleted file mode 100644 index 041a743..0000000 --- a/app/templates/panel/order.html +++ /dev/null @@ -1,11 +0,0 @@ -{% block page_content %} -
-{{ form.cpu.label }} {{ form.cpu(min=2, max=16, step=2) }}
-{{ form.memory.label }} {{ form.memory(min=512, max=16384, step=512) }}
-{{ form.storage.label }} {{ form.storage(min=10, max=100, step=10) }}
-

- {{ form.csrf_token() }} - {{ form.submit }} -

-{% endblock %} - diff --git a/app/templates/panel/order_vm.html b/app/templates/panel/order_vm.html new file mode 100644 index 0000000..525a677 --- /dev/null +++ b/app/templates/panel/order_vm.html @@ -0,0 +1,41 @@ +{% extends "base.html" %} +{% block title %}Request new Server{% endblock %} + +{% block page_content %} +
+
+
Request new Server
+
+ +

+ {{ form.cpu.label }}
{{ form.cpu(min=2, max=16, step=2) }}
+ {% for error in form.cpu.errors %} + {{ error }}
+ {% endfor %} +

+ +

+ {{ form.memory.label }}
{{ form.memory(min=512, max=16384, step=512) }}
+ {% for error in form.memory.errors %} + {{ error }}
+ {% endfor %} +

+ +

+ {{ form.storage.label }}
{{ form.storage(min=10, max=100, step=10) }}
+ {% for error in form.storage.errors %} + {{ error }}
+ {% endfor %} +

+ +

+ {{ form.csrf_token() }} + {{ form.submit }} +

+ +
+ +
+
+{% endblock %} + diff --git a/app/templates/panel/vdc_pool.html b/app/templates/panel/vdc_pool.html index da7c9b2..b7e2efa 100644 --- a/app/templates/panel/vdc_pool.html +++ b/app/templates/panel/vdc_pool.html @@ -100,6 +100,6 @@ {% if inv_deployments != [] %} {% else %} - + {% endif %} {% endblock %} diff --git a/app/templates/vmanager/create.html b/app/templates/vmanager/create.html index 0b8b80f..ffd8d56 100644 --- a/app/templates/vmanager/create.html +++ b/app/templates/vmanager/create.html @@ -38,7 +38,7 @@
Create Deployment
- +

{{ form.servername.label }}
{{ form.servername(size=42) }}
{% for error in form.servername.errors %} diff --git a/app/vmanager/routes.py b/app/vmanager/routes.py index fe30a56..9049641 100644 --- a/app/vmanager/routes.py +++ b/app/vmanager/routes.py @@ -49,18 +49,10 @@ def slavetables(): addrlist['status'] = 'tables_gen_error' return jsonify(addrlist) -@vmanager.route('/createvm', methods=['GET', 'POST']) +@vmanager.route('/vmcreate', methods=['GET', 'POST']) @login_required -def createvm(): - if current_user.name is None: - flash('Please update profile info for this operation.') - return redirect(url_for('settings.profile')) - - deployment_seeds = current_user.inv_deployments.filter_by(deleted=False).filter_by(protected=False).all() - if deployment_seeds != []: - flash('Offline deployments still exist.') - return redirect(url_for('panel.dashboard')) - +@admin_required +def vmcreate(): form = CreateForm() if current_user.confirmed and form.validate_on_submit(): #selects the chosen region @@ -85,7 +77,7 @@ def createvm(): if query['status'] == 'kvm_created': selected_slave = Server.query.filter_by(name=query['slave']).first() - deployment = Deployment(user_id=int(current_user.pid), machine_alias=str(form.servername.data), machine_id=query['unit_id'], machine_cpu=data['cpu'], machine_mem=data['mem'], machine_hdd=data['hdd'], enabled=True, protected=False, daysleft=15, warning=True, discount=0, server_id=int(selected_slave.pid)) + deployment = Deployment(user_id=int(current_user.pid), machine_alias=str(form.servername.data), period=1, machine_id=query['unit_id'], machine_cpu=data['cpu'], machine_mem=data['mem'], machine_hdd=data['hdd'], enabled=True, protected=False, daysleft=15, warning=True, discount=0, server_id=int(selected_slave.pid)) db.session.add(deployment) db.session.commit() new_vlan = PubVLAN(deploy_id=int(deployment.pid), vlan_id=int(query['vlanid'])) @@ -97,8 +89,6 @@ def createvm(): else: flash('Deployment could not be created! Please try again later...') - #TODO: cleanup bridge if the machine is new and we were not be able to create it - return redirect(url_for('panel.dashboard')) return render_template('vmanager/create.html', form=form) @@ -175,6 +165,7 @@ def activate(itemid=0): @vmanager.route('/vmremove/', methods=['GET', 'POST']) @login_required +@admin_required def remove(unit_id=0): data = { 'unit_id': int(unit_id), 'type': 'kvm' }