diff --git a/README.md b/README.md
index d4740cde..0740a59b 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-# virtual_lab
+# vital_development repository for web code
diff --git a/vital_site/scripts/on_web_server_startup.sh b/vital_site/scripts/on_web_server_startup.sh
index 563dfb7e..e75d700d 100755
--- a/vital_site/scripts/on_web_server_startup.sh
+++ b/vital_site/scripts/on_web_server_startup.sh
@@ -16,34 +16,18 @@ dbpass=$(awk -F ":" '/VITAL_DB_PWD/ {print $2}' /home/vital/config.ini | tr -d '
dbname=$(awk -F ":" '/VITAL_DB_NAME/ {print $2}' /home/vital/config.ini | tr -d ' ')
dbuser=$(awk -F ":" '/VITAL_DB_USER/ {print $2}' /home/vital/config.ini | tr -d ' ')
dbport=$(awk -F ":" '/VITAL_DB_PORT/ {print $2}' /home/vital/config.ini | tr -d ' ')
-sftp=$(awk -F ":" '/SFTP_ADDR/ {print $2}' /home/vital/config.ini | tr -d ' ')
-localrepo=$(awk -F ":" '/LOCAL_REPO/ {print $2}' /home/vital/config.ini | tr -d ' ')
+
+
# sets up required bridges and bonds for the courses on web server
nets=$(PGPASSWORD=$dbpass psql -U $dbuser -d $dbname -h $dbhost -p $dbport -t -c "SELECT c.id from vital_course c join vital_network_configuration n on c.id=n.course_id where c.status='ACTIVE' and n.is_course_net=True")
+
set -f
array=(${nets// / })
-# Flush Iptables
-iptables -F
-iptables -t nat -F
+
for var in "${array[@]}"
do
/home/vital/vital2.0/source/virtual_lab/vital_site/scripts/ws_course_network_startup.sh $var
done
-
-# enables SFTP access to the SFTP server and local ubuntu repo from xen vms
-# TODO change the hardcorded server IP
-SERVER_IP=( $sftp $localrepo )
-
-for ip in "${SERVER_IP[@]}"
-do
- iptables -I FORWARD 2 -p icmp --icmp-type 8 -s 0/0 -d $ip -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
- iptables -I FORWARD 1 -p icmp --icmp-type 0 -s $ip -d 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT
-done
-
-# to enable NAT from xen
-#iptables -t nat -A POSTROUTING -s 192.168.35.0/24 -o eth0 -j MASQUERADE
-##ap4414 EDIT: moving iptables rules to the front of the chain
-iptables -t nat -I POSTROUTING 1 -s 192.168.35.0/24 -o enp5s0 -j MASQUERADE
diff --git a/vital_site/scripts/ws_course_network_startup.sh b/vital_site/scripts/ws_course_network_startup.sh
index 555ea867..f60f2d86 100755
--- a/vital_site/scripts/ws_course_network_startup.sh
+++ b/vital_site/scripts/ws_course_network_startup.sh
@@ -1,55 +1,30 @@
#!/bin/bash
-# reading from config file
+#reading from config file
host=$(awk -F ":" '/VITAL_DB_HOST/ {print $2}' /home/vital/config.ini | tr -d ' ')
pass=$(awk -F ":" '/VITAL_DB_PWD/ {print $2}' /home/vital/config.ini | tr -d ' ')
-sftp=$(awk -F ":" '/SFTP_ADDR/ {print $2}' /home/vital/config.ini | tr -d ' ')
-localrepo=$(awk -F ":" '/LOCAL_REPO/ {print $2}' /home/vital/config.ini | tr -d ' ')
port=$(awk -F ":" '/VITAL_DB_PORT/ {print $2}' /home/vital/config.ini | tr -d ' ')
+dbname=$(awk -F ":" '/VITAL_DB_NAME/ {print $2}' /home/vital/config.ini | tr -d ' ')
vlan=$1
-vconfig add bond0 $vlan
-ifconfig bond0.$vlan 10.$vlan.1.1 netmask 255.255.255.0 broadcast 10.$vlan.1.255 up
-
-# NAT forward requests from xen vms to vital
-#iptables -t nat -A POSTROUTING -s 10.$vlan.1.0/24 -o eth0 -j SNAT --to 128.238.77.20
-#iptables -A INPUT -i bond0.$vlan -p udp --dport 67:68 --sport 67:68 -j ACCEPT
-
-##as11552 : EDIT : Add rules to allow DNS requests from Student VM's
-iptables -A INPUT -s 10.$vlan.1.0/24 -p udp -m udp --dport 53 -j ACCEPT
-iptables -A OUTPUT -d 10.$vlan.1.0/24 -p udp -m udp --sport 53 -j ACCEPT
-
-##ap4414 EDIT: moving NAT forward requests to front of the chain
-iptables -t nat -I POSTROUTING 1 -s 10.$vlan.1.0/24 -o enp5s0 -j SNAT --to 128.238.77.21
-iptables -I INPUT 1 -i bond0.$vlan -p udp --dport 67:68 --sport 67:68 -j ACCEPT
-
-##ap4414 EDIT: drop any traffic to Vital web-server
-iptables -A INPUT -s 10.$vlan.1.0/24 -j DROP
-
-#Forward all SFTP requests
-#iptables -A FORWARD -i bond0.$vlan -s 10.$vlan.1.0/24 -d 128.238.66.35 -p tcp --dport 22 -j ACCEPT
-#iptables -A FORWARD -i bond0.$vlan -s 10.$vlan.1.0/24 -d 10.$vlan.1.0/24 -j ACCEPT
-
-##ap4414 EDIT: moving SFTP requests to front of the chain
-SERVER_IP=$sftp
-iptables -I FORWARD 1 -i bond0.$vlan -s 10.$vlan.1.0/24 -d $SERVER_IP -p tcp --dport 22 -j ACCEPT
-iptables -I FORWARD 2 -i bond0.$vlan -s $SERVER_IP -d 10.$vlan.1.0/24 -j ACCEPT
-
-##as11552 EDIT: Add rules for accessing Local Repository
-SERVER_IP=$localrepo
-iptables -I FORWARD 3 -i bond0.$vlan -s 10.$vlan.1.0/24 -d $SERVER_IP -p tcp --dport 80 -j ACCEPT
-iptables -I FORWARD 4 -i bond0.$vlan -s $SERVER_IP -d 10.$vlan.1.0/24 -j ACCEPT
+if /sbin/ethtool bond0.$vlan | grep -q "Link detected: yes"; then
+ echo "Online"
+else
+ echo "Not online"
+ vconfig add bond0 $vlan
+ ifconfig bond0.$vlan 10.$vlan.1.1 netmask 255.255.255.0 broadcast 10.$vlan.1.255 up
+fi
-iptables -I FORWARD 5 -i bond0.$vlan -s 10.$vlan.1.0/24 -d 10.$vlan.1.0/24 -j ACCEPT
+requires_internet=$(PGPASSWORD=$pass psql -U postgres -d $dbname -h $host -p $port -t -c "SELECT n.has_internet_access from vital_course c join vital_network_configuration n on c.id=n.course_id where n.is_course_net=True and c.id="+$vlan)
-requires_internet=$(PGPASSWORD=$pass psql -U postgres -d vital_db -h $host -p $port -t -c "SELECT n.has_internet_access from vital_course c join vital_network_configuration n on c.id=n.course_id where n.is_course_net=True and c.id="+$vlan)
+iptables -C FORWARD -i bond0.$vlan -s 10.$vlan.1.0/24 -j REJECT
-if [ $requires_internet = 't' ]
+if [ $(echo $?) == '1' ] && [ $requires_internet = 'f' ]
then
- echo "Internet enabled for vlan $vlan"
+ echo "Rule Added"
+ iptables -I FORWARD 2 -i bond0.$vlan -s 10.$vlan.1.0/24 -j REJECT
else
- echo "Internet disabled for vlan $vlan"
-# iptables -A FORWARD -i bond0.$vlan -s 10.$vlan.1.0/24 -j REJECT
- iptables -I FORWARD 6 -i bond0.$vlan -s 10.$vlan.1.0/24 -j REJECT
+ echo "No need to add the rule"
fi
+
/home/vlab_scp/vmnet_conf/vlab-natdhcp/bin/busybox udhcpd -S /home/vlab_scp/vmnet_conf/vlab-natdhcp/Nat-$vlan.dhcpd
diff --git a/vital_site/vital/management/commands/RemoveCourse.py b/vital_site/vital/management/commands/RemoveCourse.py
index 6ec2e63f..a364d920 100644
--- a/vital_site/vital/management/commands/RemoveCourse.py
+++ b/vital_site/vital/management/commands/RemoveCourse.py
@@ -1,5 +1,8 @@
from django.core.management.base import BaseCommand
import logging
+import os
+import re
+import subprocess
from vital.models import Course, Registered_Course, User_Network_Configuration, Available_Config, User_VM_Config, Network_Configuration, Virtual_Machine, Course
logger = logging.getLogger(__name__)
@@ -18,22 +21,77 @@ def add_arguments(self, parser):
)
def handle(self, *args, **options):
- course_id = options['course_id']
- course = Course.objects.get(id=course_id)
- print "Removing course: "+course.name+" (ID:" + str(course.id) + ")"
- print "Removing registered students"
- Registered_Course.objects.filter(course=course).delete()
- print "Removing registered user network configs"
- user_nets = User_Network_Configuration.objects.filter(course=course)
- for net in user_nets:
- conf = Available_Config()
- conf.category = 'MAC_ADDR'
- conf.value = net.mac_id
- conf.save()
- net.delete()
- print "Removing course network config"
- Network_Configuration.objects.filter(course=course).delete()
- print "Removing course virtual machines"
- Virtual_Machine.objects.filter(course=course).delete()
- Course.objects.get(id=course_id).delete()
- print course.name+" (ID:" + str(course.id) + ")"+" has been deleted"
+ try:
+ course_id = options['course_id']
+ course = Course.objects.get(id=course_id)
+ print "Removing course: "+course.name+" (ID:" + str(course.id) + ")"
+ print "Removing registered students"
+ Registered_Course.objects.filter(course=course).delete()
+ print "Removing registered user network configs"
+ user_nets = User_Network_Configuration.objects.filter(course=course)
+ for net in user_nets:
+ conf = Available_Config()
+ conf.category = 'MAC_ADDR'
+ conf.value = net.mac_id
+ conf.save()
+ net.delete()
+ print "Removing course network config"
+ Network_Configuration.objects.filter(course=course).delete()
+ print "Removing course virtual machines"
+ Virtual_Machine.objects.filter(course=course).delete()
+ Course.objects.get(id=course_id).delete()
+ print course.name+" (ID:" + str(course.id) + ")"+" has been deleted"
+ except Exception as e:
+ print(e)
+ pass
+
+ print("Removing conf and qcow course files")
+ for files in os.listdir("/mnt/vlab-datastore/vital/vm_dsk/"):
+ #print(files)
+ if files.find(str(course_id)) == 3:
+ files = "/mnt/vlab-datastore/vital/vm_dsk/" + files
+ os.remove(files)
+
+ for files in os.listdir("/mnt/vlab-datastore/vital/vm_conf/"):
+ #print(files)
+ if files.find(str(course_id)) == 3:
+ files = "/mnt/vlab-datastore/vital/vm_conf/" + files
+ os.remove(files)
+
+ for files in os.listdir("/mnt/vlab-datastore/vital/vm_conf/clean/"):
+ #print(files)
+ if files.find(str(course_id)) == 0:
+ files = "/mnt/vlab-datastore/vital/vm_conf/clean/" + files
+ os.remove(files)
+
+ for files in os.listdir("/mnt/vlab-datastore/vital/vm_dsk/clean/"):
+ #print(files)
+ if files.find(str(course_id)) == 0:
+ files = "/mnt/vlab-datastore/vital/vm_dsk/clean/" + files
+ os.remove(files)
+
+ print("Removing dhcpd file")
+ try:
+
+ st = "/home/vlab_scp/vmnet_conf/vlab-natdhcp/Nat-" + str(course_id) + ".dchpd"
+ os.remove(st)
+ except Exception as e:
+ print(st+":"+str(e))
+ pass
+
+ print("Removing vlan interfaces")
+ remvlan = "vconfig rem bond0." + str(course_id)
+ downvlan = "ip link set dev bond0."+ str(course_id) + " down"
+
+ process = subprocess.Popen(downvlan.split(), stdout=subprocess.PIPE)
+ output, error = process.communicate()
+ print(output)
+ process = subprocess.Popen(remvlan.split(), stdout=subprocess.PIPE)
+ output, error = process.communicate()
+ print(output)
+
+ print("Removing iptable rule")
+ delrule = "iptables -D FORWARD -i bond0." + str(course_id) + " -s 10." + str(course_id) + ".1.0/24 -j REJECT"
+ process = subprocess.Popen(delrule.split(), stdout=subprocess.PIPE)
+ output, error = process.communicate()
+ print(output)
diff --git a/vital_site/vital/templates/vital/base.html b/vital_site/vital/templates/vital/base.html
index da4f7e38..a6692cd4 100644
--- a/vital_site/vital/templates/vital/base.html
+++ b/vital_site/vital/templates/vital/base.html
@@ -56,15 +56,15 @@
diff --git a/vital_site/vital/templates/vital/course_detail.html b/vital_site/vital/templates/vital/course_detail.html
index 825d8da9..7bf461db 100644
--- a/vital_site/vital/templates/vital/course_detail.html
+++ b/vital_site/vital/templates/vital/course_detail.html
@@ -105,7 +105,7 @@
title={{ vm.name }}>
@@ -114,7 +114,7 @@
@@ -154,4 +154,4 @@
{% endif %}
-{% endblock content_without_center %}
\ No newline at end of file
+{% endblock content_without_center %}
diff --git a/vital_site/vital/templates/vital/registered_courses.html b/vital_site/vital/templates/vital/registered_courses.html
index 69b727f2..aafcaf5b 100644
--- a/vital_site/vital/templates/vital/registered_courses.html
+++ b/vital_site/vital/templates/vital/registered_courses.html
@@ -2,11 +2,11 @@
{% block content_without_center %}
diff --git a/vital_site/vital/templates/vital/virtual_machines.html b/vital_site/vital/templates/vital/virtual_machines.html
index b4f54cb0..d8c991b7 100644
--- a/vital_site/vital/templates/vital/virtual_machines.html
+++ b/vital_site/vital/templates/vital/virtual_machines.html
@@ -21,11 +21,11 @@
{% if vm.state == 'R'%}
-
+
{% else %}
-
+
{% endif %}
@@ -50,7 +50,7 @@
{% if vm.state != 'R'%}
-
+
{% endif %}
diff --git a/vital_site/vital/urls.py b/vital_site/vital/urls.py
index fdd66aad..6897e545 100644
--- a/vital_site/vital/urls.py
+++ b/vital_site/vital/urls.py
@@ -18,9 +18,9 @@
url(r'^users/(?P
[0-9]+)/vms/(?P[0-9]+)/release-vm/$', views.release_vm, name='user_releaseVM'),
url(r'^login/$', views.login, name='login'),
url(r'^logout/$', views.logout, name='logout'),
- url(r'^users/reset-password', views.reset_password, name='user_reset_password'),
- url(r'^users/forgot-password', views.forgot_password, name='user_forgot_password'),
- url(r'^courses/(?P[0-9]+)/vms/(?P[0-9]+)/start', views.start_vm, name='start_vm'),
- url(r'^courses/(?P[0-9]+)/vms/(?P[0-9]+)/stop', views.stop_vm, name='stop_vm'),
- url(r'^courses/(?P[0-9]+)/vms/(?P[0-9]+)/rebase', views.rebase_vm, name='rebase_vm'),
+ url(r'^users/reset-password/$', views.reset_password, name='user_reset_password'),
+ url(r'^users/forgot-password/$', views.forgot_password, name='user_forgot_password'),
+ url(r'^courses/(?P[0-9]+)/vms/(?P[0-9]+)/start/$', views.start_vm, name='start_vm'),
+ url(r'^courses/(?P[0-9]+)/vms/(?P[0-9]+)/stop/$', views.stop_vm, name='stop_vm'),
+ url(r'^courses/(?P[0-9]+)/vms/(?P[0-9]+)/rebase/$', views.rebase_vm, name='rebase_vm'),
]
diff --git a/vital_site/vital/views/.student_view.py.swp b/vital_site/vital/views/.student_view.py.swp
new file mode 100644
index 00000000..3f31ce44
Binary files /dev/null and b/vital_site/vital/views/.student_view.py.swp differ
diff --git a/vital_site/vital/views/faculty_view.py b/vital_site/vital/views/faculty_view.py
index d99c066e..92e61568 100644
--- a/vital_site/vital/views/faculty_view.py
+++ b/vital_site/vital/views/faculty_view.py
@@ -6,7 +6,7 @@
logger = logging.getLogger(__name__)
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def advising_courses(request):
logger.debug("In registered courses")
faculty_records = Faculty.objects.filter(user_id=request.user.id)
@@ -17,7 +17,7 @@ def advising_courses(request):
return render(request, 'vital/advising_courses.html', {'advising_courses': adv_courses})
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def course_detail(request, course_id):
logger.debug("in course detail")
professors = ''
diff --git a/vital_site/vital/views/security_view.py b/vital_site/vital/views/security_view.py
index 419151c8..acc6842a 100644
--- a/vital_site/vital/views/security_view.py
+++ b/vital_site/vital/views/security_view.py
@@ -20,6 +20,7 @@
import os
import signal
import json
+from random import randint
config_ini = ConfigParser.ConfigParser()
config_ini.optionxform=str
@@ -63,11 +64,7 @@ def register(request):
user.sftp_account = user.email[:user.email.find('@')]
user.sftp_pass = user.password # workaround to set sftp account
user.set_password(user.password) # hashes the password
-<<<<<<< HEAD
- activation_code = str(uuid.uuid4()).replace('-', '')
-=======
activation_code = str(randint(100000, 999999))
->>>>>>> master
user.activation_code = activation_code
#TODO temporary fix until sftp issue solved
@@ -133,7 +130,7 @@ def activate(request):
logger.debug('activated..'+user.email)
form = Authentication_Form()
# return render(request, 'vital/login.html', {'form': form })
- return redirect('/vital')
+ return redirect('/')
else:
message = 'Please check your activation code'
else:
@@ -179,7 +176,7 @@ def reset_password(request):
user.save()
update_session_auth_hash(request, user)
- return redirect('/vital') # change here to home page
+ return redirect('/') # change here to home page
else:
logger.debug(form.cleaned_data['user_email']+'-'+form.cleaned_data['activation_code'])
user = VLAB_User.objects.get(email=form.cleaned_data['user_email'])
@@ -199,7 +196,7 @@ def reset_password(request):
user.save()
update_session_auth_hash(request, user)
- return redirect('/vital') # change here to home page
+ return redirect('/') # change here to home page
else:
error_message = 'Please use the link sent to you in your email'
else:
@@ -250,7 +247,7 @@ def login(request):
if user.is_active:
django_login(request, user)
audit(request, 'User logged in')
- return redirect('/vital')
+ return redirect('/')
else:
form = User_Activation_Form(initial={'user_email': user.email})
return render(request, 'vital/user_registration_validate.html',
@@ -290,7 +287,7 @@ def logout(request):
logger.debug(">>>>>>>>>>>>>>>>>>" + str(request.user))
audit(request, 'User logged out')
django_logout(request)
- return redirect('/vital/login')
+ return redirect('/login')
def stop_vms_during_logout(user):
@@ -307,15 +304,15 @@ def stop_vms_during_logout(user):
return all_vms_shutdown
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def index(request):
logger.debug("In index")
user = request.user
if not user.is_faculty and not user.is_admin:
- return redirect('/vital/courses/registered') # change here to home page
+ return redirect('/courses/registered') # change here to home page
elif user.is_faculty:
logger.debug('user is a faculty')
- return redirect('/vital/courses/advising') # change here to home page
+ return redirect('/courses/advising') # change here to home page
else:
logger.debug('user is admin')
diff --git a/vital_site/vital/views/student_view.py b/vital_site/vital/views/student_view.py
index fc6255ca..7e3a9efe 100644
--- a/vital_site/vital/views/student_view.py
+++ b/vital_site/vital/views/student_view.py
@@ -20,7 +20,7 @@
config_ini.read("/home/vital/config.ini")
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def registered_courses(request):
"""
lists all registered courses for logged in user
@@ -39,7 +39,7 @@ def registered_courses(request):
return render(request, 'vital/registered_courses.html', {'reg_courses': reg_courses, 'message':message})
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def virtual_machines(request, course_id):
"""
lists all VMs of the selected course
@@ -72,7 +72,7 @@ def virtual_machines(request, course_id):
return render_to_response('vital/virtual_machines.html', params)
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def course_vms(request, course_id):
"""
Stub method for rendering course Page
@@ -88,7 +88,7 @@ def course_vms(request, course_id):
return render(request, 'vital/course_vms.html', params)
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def console(request, vm_id):
"""
fetches terminal port and server name for novnc console
@@ -154,7 +154,7 @@ def vm_create_websockify_token(config, started_vm):
except Exception as e:
raise e
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def start_vm(request, course_id, vm_id):
"""
starts the specified VM
@@ -186,21 +186,21 @@ def start_vm(request, course_id, vm_id):
# start_novnc(config, started_vm)
vm_create_websockify_token(config, started_vm)
audit(request, 'Started Virtual machine ' + str(vm.name))
- return redirect('/vital/courses/' + course_id + '/vms?message=' + vm.name + ' VM started')
+ return redirect('/courses/' + course_id + '/vms?message=' + vm.name + ' VM started')
except Virtual_Machine.DoesNotExist as e:
logger.error(str(e))
audit(request, 'Error starting Virtual machine ' + str(vm_id) + '( Does not exist )')
- return redirect('/vital/courses/' + course_id + '/vms?message=Unable to start VM - ' + vm.name)
+ return redirect('/courses/' + course_id + '/vms?message=Unable to start VM - ' + vm.name)
except Exception as e:
logger.error(str(e))
audit(request, 'Error starting Virtual machine ' + str(vm.name) + '( ' + e.message + ' )')
if 'Connection refused' not in str(e).rstrip() or started_vm is not None:
XenClient().remove_network_bridges(vm.xen_server, request.user, course_id, vm_id)
XenClient().stop_vm(started_vm['xen_server'], request.user, course_id, vm_id)
- return redirect('/vital/courses/' + course_id + '/vms?message=Unable to start VM - ' + vm.name)
+ return redirect('/courses/' + course_id + '/vms?message=Unable to start VM - ' + vm.name)
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def stop_vm(request, course_id, vm_id):
"""
stops the specified VM
@@ -232,13 +232,13 @@ def stop_vm(request, course_id, vm_id):
# config.save()
# vm.delete()
audit(request, 'Stopped Virtual machine ' + str(virtual_machine.name))
- return redirect('/vital/courses/' + course_id + '/vms?message=VM stopped...')
+ return redirect('/courses/' + course_id + '/vms?message=VM stopped...')
except Exception as e:
audit(request, 'Error stopping Virtual machine ' + str(virtual_machine.name)+'('+e.message+')')
raise e
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def rebase_vm(request, course_id, vm_id):
"""
rebase the specified VM to initial state
@@ -261,10 +261,10 @@ def rebase_vm(request, course_id, vm_id):
except Exception as e:
audit(request, 'Error re-imaged Virtual machine ' + str(virtual_machine.name))
raise e
- return redirect('/vital/courses/' + course_id + '/vms?message=VM rebased to initial state..')
+ return redirect('/courses/' + course_id + '/vms?message=VM rebased to initial state..')
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def register_for_course(request):
"""
creates necessary VMs for the specified course
@@ -296,7 +296,7 @@ def register_for_course(request):
registered_course = Registered_Course(course_id=course.id, user_id=user.id)
registered_course.save()
audit(request, 'Registered for course ' + str(course.name))
- return redirect('/vital/courses/registered/')
+ return redirect('/courses/registered/')
else:
audit(request, 'Error registering for course ' + str(course.name) + ' (Inactive/Capacity Full)')
error_message = 'The course is either inactive or has reached its maximum student capacity.'
@@ -307,7 +307,7 @@ def register_for_course(request):
return render(request, 'vital/course_register.html', {'form': form, 'error_message': error_message})
-@login_required(login_url='/vital/login/')
+@login_required(login_url='/login/')
def unregister_from_course(request, course_id):
"""
removes all VMs attached to a selected course and removes course finally from the users profile
@@ -325,14 +325,16 @@ def unregister_from_course(request, course_id):
vms = User_VM_Config.objects.filter(user_id=request.user.id,
vm_id__in=course_to_remove.course.virtual_machine_set.all())
+ logger.debug("HERE")
if len(vms) > 0:
for vm_conf in vms:
stop_vm(request, course_id, vm_conf.vm.id)
-
+ logger.debug("HERE")
XenClient().unregister_student_vms(request.user, course_to_remove.course)
audit(request, 'Un-registered from course ' + str(course.name))
+ logger.debug("HERE")
course_to_remove.delete()
- return redirect('/vital/courses/registered/')
+ return redirect('/courses/registered/')
except Exception as e:
audit(request, 'Error while Un-registering from course ' + str(course.name)+' ('+e.message+')')
raise e
diff --git a/vital_site/vital_site/urls.py b/vital_site/vital_site/urls.py
index 59bad8e1..b9a9bd8d 100644
--- a/vital_site/vital_site/urls.py
+++ b/vital_site/vital_site/urls.py
@@ -17,7 +17,8 @@
from django.contrib import admin
urlpatterns = [
- url(r'^vital/', include('vital.urls')),
+ #url(r'^vital/', include('vital.urls')),
+ url(r'', include('vital.urls')),
url(r'^admin/', admin.site.urls),
url(r'^captcha/', include('captcha.urls')),
url(r'session_security/', include('session_security.urls')),