This commit is contained in:
nogoodidea 2024-11-04 20:45:42 +00:00 committed by GitHub
commit 8d09035c2d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 94 additions and 69 deletions

View file

@ -412,6 +412,9 @@ def vm_renew(vmid):
@app.route('/vm/<string:vmid>/disk/create/<int:size>', methods=['POST']) @app.route('/vm/<string:vmid>/disk/create/<int:size>', methods=['POST'])
@auth.oidc_auth @auth.oidc_auth
def create_disk(vmid, size): def create_disk(vmid, size):
## are they trying to disk with zero size
if size <= 0:
return '', 400
user = User(session['userinfo']['preferred_username']) user = User(session['userinfo']['preferred_username'])
connect_proxmox() connect_proxmox()
if user.rtp or int(vmid) in user.allowed_vms: if user.rtp or int(vmid) in user.allowed_vms:
@ -563,80 +566,93 @@ def set_boot_order(vmid):
return '', 403 return '', 403
@app.route('/vm/create', methods=['GET', 'POST']) @app.route('/vm/create', methods=['GET'])
@auth.oidc_auth @auth.oidc_auth
def create(): def get_create():
user = User(session['userinfo']['preferred_username']) user = User(session['userinfo']['preferred_username'])
proxmox = connect_proxmox() proxmox = connect_proxmox()
if user.active or user.rtp: if user.active or user.rtp:
if request.method == 'GET': stored_isos = get_isos(proxmox, app.config['PROXMOX_ISO_STORAGE'])
stored_isos = get_isos(proxmox, app.config['PROXMOX_ISO_STORAGE']) pools = get_pools(proxmox, db)
pools = get_pools(proxmox, db) for pool in get_shared_pools(db, user.name, True):
for pool in get_shared_pools(db, user.name, True): pools.append(pool.name)
pools.append(pool.name) templates = get_templates(db)
templates = get_templates(db) return render_template(
return render_template( 'create_vm.html',
'create_vm.html', user=user,
user=user, usage=user.usage,
usage=user.usage, limits=user.limits,
limits=user.limits, percents=user.usage_percent,
percents=user.usage_percent, isos=stored_isos,
isos=stored_isos, pools=pools,
pools=pools, templates=templates,
templates=templates, )
) else:
elif request.method == 'POST': return '', 403
name = request.form['name'].lower()
cores = request.form['cores']
memory = request.form['mem']
template = request.form['template']
disk = request.form['disk']
iso = request.form['iso']
ssh_key = request.form['ssh_key']
if iso != 'none':
iso = '{}:iso/{}'.format(app.config['PROXMOX_ISO_STORAGE'], iso)
if not user.rtp:
if template == 'none':
usage_check = user.check_usage(0, 0, disk)
else:
usage_check = user.check_usage(cores, memory, disk)
username = user.name
else:
usage_check = None
username = request.form['user']
if usage_check:
return usage_check
else:
valid, available = (
check_hostname(starrs, name) if app.config['USE_STARRS'] else (True, True)
)
if valid and available:
if template == 'none': @app.route('/vm/create', methods=['POST'])
q.enqueue( @auth.oidc_auth
create_vm_task, def create():
username, user = User(session['userinfo']['preferred_username'])
name, if user.active or user.rtp:
cores, name = request.form['name'].lower()
memory, cores = request.form['cores']
disk, memory = request.form['mem']
iso, disk = request.form['disk']
job_timeout=300, username = request.form['user']
) ## CHECK STUFF DEAR GOD
else: if int(cores) <= 0 or int(memory) <= 0 or int(disk) <= 0 or user == '':
q.enqueue( return (
setup_template_task, 'VM creation with cores and/or mem and/or disk values that are less than 0',
template, 400,
name, )
username,
ssh_key, template = request.form['template']
cores, iso = request.form['iso']
memory, ssh_key = request.form['ssh_key']
job_timeout=600, if iso != 'none':
) iso = '{}:iso/{}'.format(app.config['PROXMOX_ISO_STORAGE'], iso)
return '', 200 if not user.rtp:
return '', 200 if template == 'none':
return None usage_check = user.check_usage(0, 0, disk)
else:
usage_check = user.check_usage(cores, memory, disk)
username = user.name
else:
usage_check = None
if usage_check:
return usage_check
else:
valid, available = (
check_hostname(starrs, name) if app.config['USE_STARRS'] else (True, True)
)
if valid and available:
if template == 'none':
q.enqueue(
create_vm_task,
username,
name,
cores,
memory,
disk,
iso,
job_timeout=300,
)
else:
q.enqueue(
setup_template_task,
template,
name,
username,
ssh_key,
cores,
memory,
job_timeout=600,
)
return '', 200
return '', 200
else: else:
return '', 403 return '', 403

View file

@ -238,12 +238,21 @@ $("#create-vm").click(function(){
if (name && disk) { if (name && disk) {
if (template != 'none' && !ssh_regex.test(ssh_key)) { if (template != 'none' && !ssh_regex.test(ssh_key)) {
swal("Uh oh...", "Invalid SSH key!", "error"); swal("Uh oh...", "Invalid SSH key!", "error");
// MAXIMUM BOUNDS CHECK
} else if (disk > max_disk) { } else if (disk > max_disk) {
swal("Uh oh...", `You do not have enough disk resources available! Please lower the VM disk size to ${max_disk}GB or lower.`, "error"); swal("Uh oh...", `You do not have enough disk resources available! Please lower the VM disk size to ${max_disk}GB or lower.`, "error");
} else if (template != 'none' && cores > max_cpu) { } else if (template != 'none' && cores > max_cpu) {
swal("Uh oh...", `You do not have enough CPU resources available! Please lower the VM cores to ${max_cpu} or lower.`, "error"); swal("Uh oh...", `You do not have enough CPU resources available! Please lower the VM cores to ${max_cpu} or lower.`, "error");
} else if (template != 'none' && mem/1024 > max_mem) { } else if (template != 'none' && mem/1024 > max_mem) {
swal("Uh oh...", `You do not have enough memory resources available! Please lower the VM memory to ${max_mem}GB or lower.`, "error"); swal("Uh oh...", `You do not have enough memory resources available! Please lower the VM memory to ${max_mem}GB or lower.`, "error");
// MINIMUM BOUNDS CHECK
else if(0 <= disk){
swal("Uh oh...", `Selected disk size is less than 0.`,"error");
}else if(0 <= cores){
swal("Uh oh...", `Selected cores amount is less than 0.`,"error");
}else if(0 <= mem){
swal("Uh oh...", `Selected memory size is less than 0.`,"error");
}
} else { } else {
fetch(`/hostname/${name}`, { fetch(`/hostname/${name}`, {
credentials: 'same-origin', credentials: 'same-origin',