Aligned branch internationalization with latest changes in master
authorLeonidas Poulopoulos <leopoul@noc.grnet.gr>
Thu, 3 May 2012 08:10:22 +0000 (11:10 +0300)
committerLeonidas Poulopoulos <leopoul@noc.grnet.gr>
Thu, 3 May 2012 08:10:22 +0000 (11:10 +0300)
34 files changed:
ChangeLog
README.txt
djangobackends/shibauthBackend.py
flowspec/forms.py
flowspec/tasks.py
flowspec/views.py
locale/el/LC_MESSAGES/django.mo
locale/el/LC_MESSAGES/django.po
static/Flashlight.swf [deleted file]
static/background.png [moved from static/background_grnet.png with 100% similarity]
static/css/base.css
static/dots.gif [new file with mode: 0644]
static/javavnc/VncViewer.jar [deleted file]
static/javavnc/hs_err_pid1450.log [deleted file]
static/logo.dist.png [new file with mode: 0644]
static/logo.png [moved from static/grnet_logo.png with 100% similarity]
static/m_grnet_logo.png [deleted file]
static/shib_login.dist.png [new file with mode: 0644]
static/vncviewer.jar [deleted file]
templates/application_list.html [deleted file]
templates/apply.html
templates/base.html
templates/error.html
templates/footer.html [new file with mode: 0644]
templates/profile.html
templates/review.html [deleted file]
templates/rule_action.txt [new file with mode: 0644]
templates/rule_add_mail.txt [deleted file]
templates/rule_delete_mail.txt [deleted file]
templates/rule_edit_mail.txt [deleted file]
templates/rule_expiration.txt [deleted file]
templates/user_keys.html [deleted file]
templates/user_routes.html
urls.py.dist

index 66eebda..30f014d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,39 @@
 ===========
+0.8.7 RELEASE
+Minor enhancements
+
+Enhancements:
+       - Merged all mail txt files into one
+       - Added all routes in form cleaning (initially, EXPIRED, ADMININACTIVE and ERROR were excluded)
+
+===========
+0.8.6 RELEASE
+Minor UI enhancements/Bug fix
+Fixes:
+       - Fixed issue where rules in ERROR state would cause check_sync to check them
+Enhancements:
+       - Added small dots to ongoing response field to indicate activity
+
+===========
+0.8.5 RELEASE
+Feature enhancement release/Minor UI fixes/Cleanup
+Fixes:
+       - Changed javascript order to prevent unformated content in datatables
+       - Un-needed files cleanup
+       - Error template is now based on base.html template
+Enhancements:
+       - Administrator privileges apply on UI as well
+       - Enhanced application security
+
+===========
+0.8.4 RELEASE
+Vulnerability prevention/bug fixes release
+Fixes:
+       - Fixed a bug where the shib auth backend erased non-shibboleth users info
+       - Added an authsource variable to prevent authentication backend overlapping
+       - Added exception handling for non-Shibboleth users that do not belong to a peer
+
+===========
 0.8.3 RELEASE
 Feature enhancement release
 Fixes:
index c6c048e..31efc27 100644 (file)
@@ -73,7 +73,19 @@ In settings.py set the following according to your configuration:
 * PRIMARY_WHOIS
 * ALTERNATE_WHOIS
 
-4.2 Installation
+4.2 Branding
+
+4.2.1 Logos
+
+Inside the static folder you will find two empty png files: logo.dist.png (172x80) and shib_login.dist.png (98x80).
+Edit those two with your favourite image processing software and save them as logo.png and shib_login.png under the same folder. Image sizes are optimized to operate without any
+other code changes. In case you want to incorporate images of different sizes you have to fine tune css and/or html as well.
+
+4.2.2 Footer
+
+Under the templates folder (templates), you can alter the footer.html file to include your own footer messages, badges, etc.
+
+4.3 Installation
 
 * Run:
        ./manage.py syncdb
index 6ed5442..c262bae 100644 (file)
@@ -10,6 +10,9 @@ class shibauthBackend:
         firstname = kwargs.get('firstname')
         lastname = kwargs.get('lastname')
         mail = kwargs.get('mail')
+        authsource = kwargs.get('authsource')
+        if authsource != 'shibboleth':
+            return None
         try:
             user = self._auth_user(username, firstname, lastname, mail)
         except:
@@ -22,10 +25,6 @@ class shibauthBackend:
 
         try:
             user = User.objects.get(username__exact=username)
-            user.email = mail
-            user.first_name = firstname
-            user.last_name = lastname
-            user.save()
         # The user did not exist. Create one with no privileges
         except: 
             user = User.objects.create_user(username, mail, None)
index 20b14c1..77b98df 100644 (file)
@@ -4,6 +4,7 @@ from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext_lazy
 from django.template.defaultfilters import filesizeformat
 from flowspy.flowspec.models import *
+from flowspy.peers.models import *
 from ipaddr import *
 from django.core.urlresolvers import reverse
 from django.contrib.auth.models import User
@@ -25,7 +26,14 @@ class RouteForm(forms.ModelForm):
 
     class Meta:
         model = Route
-    
+
+    def clean_applier(self):
+        applier = self.cleaned_data['applier']
+        if applier:
+            return self.cleaned_data["applier"]
+        else:
+            raise forms.ValidationError('This field is required.')
+
     def clean_source(self):
         user = User.objects.get(pk=self.data['applier'])
         peer = user.get_profile().peer
@@ -106,8 +114,15 @@ class RouteForm(forms.ModelForm):
         destinationports = self.cleaned_data.get('destinationport', None)
         protocols = self.cleaned_data.get('protocol', None)
         user = self.cleaned_data.get('applier', None)
+        try:
+            issuperuser = self.data['issuperuser']
+            su = User.objects.get(username=issuperuser)
+        except:
+            issuperuser = None
         peer = user.get_profile().peer
         networks = peer.networks.all()
+        if issuperuser:
+            networks = PeerRange.objects.filter(peer__in=Peer.objects.all()).distinct()
         mynetwork = False
         route_pk_list = []
         if destination:
@@ -116,7 +131,7 @@ class RouteForm(forms.ModelForm):
                 if IPNetwork(destination) in net:
                     mynetwork = True
             if not mynetwork:
-                 raise forms.ValidationError(_('Destination address/network should belong to your administrative address space. Check My Profile to review your networks'))
+                raise forms.ValidationError(_('Destination address/network should belong to your administrative address space. Check My Profile to review your networks'))
         if (sourceports and ports):
             raise forms.ValidationError(_('Cannot create rule for source ports and ports at the same time. Select either ports or source ports'))
         if (destinationports and ports):
@@ -129,7 +144,7 @@ class RouteForm(forms.ModelForm):
             raise forms.ValidationError(_('Fill at least a Rule Match Condition'))
         if not user.is_superuser and then[0].action not in settings.UI_USER_THEN_ACTIONS:
             raise forms.ValidationError(_('This action "%s" is not permitted') %(then[0].action))
-        existing_routes = Route.objects.exclude(status='EXPIRED').exclude(status='ERROR').exclude(status='ADMININACTIVE')
+        existing_routes = Route.objects.all()
         existing_routes = existing_routes.filter(applier__userprofile__peer=peer)
         if source:
             source = IPNetwork(source).compressed
index af0ce2d..2341999 100644 (file)
@@ -123,8 +123,9 @@ def check_sync(route_name=None, selected_routes = []):
         routes = routes.filter(name=route_name)
     for route in routes:
         if route.has_expired() and (route.status != 'EXPIRED' and route.status != 'ADMININACTIVE' and route.status != 'INACTIVE'):
-            logger.info('Expiring route %s' %route.name)
-            subtask(delete).delay(route, reason="EXPIRED")
+            if route.status != 'ERROR':
+                logger.info('Expiring %s route %s' %(route.status, route.name))
+                subtask(delete).delay(route, reason="EXPIRED")
 #        elif route.has_expired() and (route.status == 'ADMININACTIVE' or route.status == 'INACTIVE'):
 #            route.status = 'EXPIRED'
 #            route.response = 'Rule Expired'
@@ -149,8 +150,8 @@ def notify_expired():
                     admin_url = "https://%s%s" % \
                     (fqdn,
                      "/fod/edit/%s"%route.name)
-                    mail_body = render_to_string("rule_expiration.txt",
-                                             {"route": route, 'expiration_days':expiration_days, 'url':admin_url})
+                    mail_body = render_to_string("rule_action.txt",
+                                             {"route": route, 'expiration_days':expiration_days, 'action':'expires', 'url':admin_url})
                     days_num = ' days'
                     expiration_days_text = "%s %s" %('in',expiration_days)
                     if expiration_days == 0:
index 7b659b6..7e7ffd5 100644 (file)
@@ -64,12 +64,18 @@ def welcome(request):
 @never_cache
 def group_routes(request):
     group_routes = []
-    peer = request.user.get_profile().peer
+    try:
+        peer = request.user.get_profile().peer
+    except UserProfile.DoesNotExist:
+        error = "User <strong>%s</strong> does not belong to any peer or organization. It is not possible to create new firewall rules.<br>Please contact Helpdesk to resolve this issue" % request.user.username
+        return render_to_response('error.html', {'error': error})
     if peer:
        peer_members = UserProfile.objects.filter(peer=peer)
        users = [prof.user for prof in peer_members]
        group_routes = Route.objects.filter(applier__in=users)
-    return render_to_response('user_routes.html', {'routes': group_routes},
+       if request.user.is_superuser:
+           group_routes = Route.objects.all()
+       return render_to_response('user_routes.html', {'routes': group_routes},
                               context_instance=RequestContext(request))
 
 
@@ -83,7 +89,7 @@ def add_route(request):
                              _("Insufficient rights on administrative networks. Cannot add rule. Contact your administrator"))
          return HttpResponseRedirect(reverse("group-routes"))
     if request.method == "GET":
-        form = RouteForm()
+        form = RouteForm(initial={'applier': applier})
         if not request.user.is_superuser:
             form.fields['then'] = forms.ModelMultipleChoiceField(queryset=ThenAction.objects.filter(action__in=settings.UI_USER_THEN_ACTIONS).order_by('action'), required=True)
             form.fields['protocol'] = forms.ModelMultipleChoiceField(queryset=MatchProtocol.objects.filter(protocol__in=settings.UI_USER_PROTOCOLS).order_by('protocol'), required=False)
@@ -91,19 +97,32 @@ def add_route(request):
                                   context_instance=RequestContext(request))
 
     else:
-        form = RouteForm(request.POST)
+        request_data = request.POST.copy()
+        if request.user.is_superuser:
+            request_data['issuperuser'] = request.user.username
+        else:
+            request_data['applier'] = applier
+            try:
+                del requset_data['issuperuser']
+            except:
+                pass
+        form = RouteForm(request_data)
         if form.is_valid():
             route=form.save(commit=False)
-            route.applier = request.user
+            if not request.user.is_superuser:
+                route.applier = request.user
             route.status = "PENDING"
+            route.response = "Applying"
             route.source = IPNetwork("%s/%s" %(IPNetwork(route.source).network.compressed, IPNetwork(route.source).prefixlen)).compressed
             route.destination = IPNetwork("%s/%s" %(IPNetwork(route.destination).network.compressed, IPNetwork(route.destination).prefixlen)).compressed
             route.save()
             form.save_m2m()
             route.commit_add()
             requesters_address = request.META['HTTP_X_FORWARDED_FOR']
-            mail_body = render_to_string("rule_add_mail.txt",
-                                             {"route": route, "address": requesters_address})
+            fqdn = Site.objects.get_current().domain
+            admin_url = "https://%s%s" % (fqdn, "/fod/edit/%s"%route.name)
+            mail_body = render_to_string("rule_action.txt",
+                                             {"route": route, "address": requesters_address, "action": "creation", "url": admin_url})
             user_mail = "%s" %route.applier.email
             user_mail = user_mail.split(';')
             send_new_mail(settings.EMAIL_SUBJECT_PREFIX + "Rule %s creation request submitted by %s" %(route.name, route.applier.username),
@@ -113,6 +132,9 @@ def add_route(request):
             logger.info(mail_body, extra=d)
             return HttpResponseRedirect(reverse("group-routes"))
         else:
+            if not request.user.is_superuser:
+                form.fields['then'] = forms.ModelMultipleChoiceField(queryset=ThenAction.objects.filter(action__in=settings.UI_USER_THEN_ACTIONS).order_by('action'), required=True)
+                form.fields['protocol'] = forms.ModelMultipleChoiceField(queryset=MatchProtocol.objects.filter(protocol__in=settings.UI_USER_PROTOCOLS).order_by('protocol'), required=False)
             return render_to_response('apply.html', {'form': form, 'applier':applier},
                                       context_instance=RequestContext(request))
 
@@ -123,7 +145,7 @@ def edit_route(request, route_slug):
     applier_peer = request.user.get_profile().peer
     route_edit = get_object_or_404(Route, name=route_slug)
     route_edit_applier_peer = route_edit.applier.get_profile().peer
-    if applier_peer != route_edit_applier_peer:
+    if applier_peer != route_edit_applier_peer and (not request.user.is_superuser):
         messages.add_message(request, messages.WARNING,
                              _("Insufficient rights to edit rule %s") %(route_slug))
         return HttpResponseRedirect(reverse("group-routes"))
@@ -141,34 +163,64 @@ def edit_route(request, route_slug):
         return HttpResponseRedirect(reverse("group-routes"))
     route_original = deepcopy(route_edit)
     if request.POST:
-        form = RouteForm(request.POST, instance = route_edit)
+        request_data = request.POST.copy()
+        if request.user.is_superuser:
+            request_data['issuperuser'] = request.user.username
+        else:
+            request_data['applier'] = applier
+            try:
+                del request_data['issuperuser']
+            except:
+                pass
+        form = RouteForm(request_data, instance = route_edit)
+        critical_changed_values = ['source', 'destination', 'sourceport', 'destinationport', 'port', 'protocol', 'then']
         if form.is_valid():
+            changed_data = form.changed_data
             route=form.save(commit=False)
             route.name = route_original.name
-            route.applier = request.user
-            route.status = "PENDING"
-            route.source = IPNetwork("%s/%s" %(IPNetwork(route.source).network.compressed, IPNetwork(route.source).prefixlen)).compressed
-            route.destination = IPNetwork("%s/%s" %(IPNetwork(route.destination).network.compressed, IPNetwork(route.destination).prefixlen)).compressed
+            route.status = route_original.status
+            route.response = route_original.response
+            if not request.user.is_superuser:
+                route.applier = request.user
+            if bool(set(changed_data) & set(critical_changed_values)) or (not route_original.status == 'ACTIVE'):
+                route.status = "PENDING"
+                route.response = "Applying"
+                route.source = IPNetwork("%s/%s" %(IPNetwork(route.source).network.compressed, IPNetwork(route.source).prefixlen)).compressed
+                route.destination = IPNetwork("%s/%s" %(IPNetwork(route.destination).network.compressed, IPNetwork(route.destination).prefixlen)).compressed
             route.save()
-            form.save_m2m()
-            route.commit_edit()
-            requesters_address = request.META['HTTP_X_FORWARDED_FOR']
-            mail_body = render_to_string("rule_edit_mail.txt",
-                                             {"route": route, "address": requesters_address})
-            user_mail = "%s" %route.applier.email
-            user_mail = user_mail.split(';')
-            send_new_mail(settings.EMAIL_SUBJECT_PREFIX + "Rule %s edit request submitted by %s" %(route.name, route.applier.username),
+            if bool(set(changed_data) & set(critical_changed_values)) or (not route_original.status == 'ACTIVE'):
+                form.save_m2m()
+                route.commit_edit()
+                requesters_address = request.META['HTTP_X_FORWARDED_FOR']
+                fqdn = Site.objects.get_current().domain
+                admin_url = "https://%s%s" % (fqdn, "/fod/edit/%s"%route.name)
+                mail_body = render_to_string("rule_action.txt",
+                                             {"route": route, "address": requesters_address, "action": "edit", "url": admin_url})
+                user_mail = "%s" %route.applier.email
+                user_mail = user_mail.split(';')
+                send_new_mail(settings.EMAIL_SUBJECT_PREFIX + "Rule %s edit request submitted by %s" %(route.name, route.applier.username),
                               mail_body, settings.SERVER_EMAIL, user_mail,
                               get_peer_techc_mails(route.applier))
-            d = { 'clientip' : requesters_address, 'user' : route.applier.username }
-            logger.info(mail_body, extra=d)
+                d = { 'clientip' : requesters_address, 'user' : route.applier.username }
+                logger.info(mail_body, extra=d)
             return HttpResponseRedirect(reverse("group-routes"))
         else:
+            if not request.user.is_superuser:
+                form.fields['then'] = forms.ModelMultipleChoiceField(queryset=ThenAction.objects.filter(action__in=settings.UI_USER_THEN_ACTIONS).order_by('action'), required=True)
+                form.fields['protocol'] = forms.ModelMultipleChoiceField(queryset=MatchProtocol.objects.filter(protocol__in=settings.UI_USER_PROTOCOLS).order_by('protocol'), required=False)
             return render_to_response('apply.html', {'form': form, 'edit':True, 'applier': applier},
                                       context_instance=RequestContext(request))
     else:
+        if (not route_original.status == 'ACTIVE'):
+            route_edit.expires = datetime.date.today() + datetime.timedelta(days = settings.EXPIRATION_DAYS_OFFSET)
         dictionary = model_to_dict(route_edit, fields=[], exclude=[])
-        #form = RouteForm(instance=route_edit)
+        if request.user.is_superuser:
+            dictionary['issuperuser'] = request.user.username
+        else:
+            try:
+                del dictionary['issuperuser']
+            except:
+                pass
         form = RouteForm(dictionary)
         if not request.user.is_superuser:
             form.fields['then'] = forms.ModelMultipleChoiceField(queryset=ThenAction.objects.filter(action__in=settings.UI_USER_THEN_ACTIONS).order_by('action'), required=True)
@@ -183,22 +235,26 @@ def delete_route(request, route_slug):
         route = get_object_or_404(Route, name=route_slug)
         applier_peer = route.applier.get_profile().peer
         requester_peer = request.user.get_profile().peer
-        if applier_peer == requester_peer:
+        if applier_peer == requester_peer or request.user.is_superuser:
             route.status = "PENDING"
             route.expires = datetime.date.today()
-            route.applier = request.user
+            if not request.user.is_superuser:
+                route.applier = request.user
+            route.response = "Suspending"
             route.save()
             route.commit_delete()
             requesters_address = request.META['HTTP_X_FORWARDED_FOR']
-            mail_body = render_to_string("rule_delete_mail.txt",
-                                             {"route": route, "address": requesters_address})
+            fqdn = Site.objects.get_current().domain
+            admin_url = "https://%s%s" % (fqdn, "/fod/edit/%s"%route.name)
+            mail_body = render_to_string("rule_action.txt",
+                                             {"route": route, "address": requesters_address, "action": "removal", "url": admin_url})
             user_mail = "%s" %route.applier.email
             user_mail = user_mail.split(';')
             send_new_mail(settings.EMAIL_SUBJECT_PREFIX + "Rule %s removal request submitted by %s" %(route.name, route.applier.username), 
                               mail_body, settings.SERVER_EMAIL, user_mail,
                              get_peer_techc_mails(route.applier))
             d = { 'clientip' : requesters_address, 'user' : route.applier.username }
-            logger.info(mail_body, extra=d)            
+            logger.info(mail_body, extra=d)
         html = "<html><body>Done</body></html>"
         return HttpResponse(html)
     else:
@@ -208,9 +264,15 @@ def delete_route(request, route_slug):
 @never_cache
 def user_profile(request):
     user = request.user
-    peer = request.user.get_profile().peer
-    
-    return render_to_response('profile.html', {'user': user, 'peer':peer},
+    try:
+        peer = request.user.get_profile().peer
+        peers = Peer.objects.filter(pk=peer.pk)
+        if user.is_superuser:
+            peers = Peer.objects.all()
+    except UserProfile.DoesNotExist:
+        error = "User <strong>%s</strong> does not belong to any peer or organization. It is not possible to create new firewall rules.<br>Please contact Helpdesk to resolve this issue" % user.username
+        return render_to_response('error.html', {'error': error})
+    return render_to_response('profile.html', {'user': user, 'peers':peers},
                                   context_instance=RequestContext(request))
 
 @never_cache
@@ -251,10 +313,14 @@ def user_login(request):
                                   context_instance=RequestContext(request))
         try:
             user = User.objects.get(username__exact=username)
+            user.email = mail
+            user.first_name = firstname
+            user.last_name = lastname
+            user.save()
             user_exists = True
         except:
             user_exists = False
-        user = authenticate(username=username, firstname=firstname, lastname=lastname, mail=mail)
+        user = authenticate(username=username, firstname=firstname, lastname=lastname, mail=mail, authsource='shibboleth')
         if user is not None:
             try:
                 peer = Peer.objects.get(domain_name=organization)
index 52e85dd..d90918f 100644 (file)
Binary files a/locale/el/LC_MESSAGES/django.mo and b/locale/el/LC_MESSAGES/django.mo differ
index e8a3dd3..a6be0eb 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-02-24 11:23+0200\n"
+"POT-Creation-Date: 2012-05-03 11:07+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Leonidas Poulopoulos <leopoul@grnet.gr>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -31,28 +31,28 @@ msgstr "Αγγλικά"
 msgid "%sUser account activated"
 msgstr "%s Ενεργοποιήθηκε ο λογαριασμός του χρήστη"
 
-#: flowspec/forms.py:52 flowspec/forms.py:81
+#: flowspec/forms.py:60 flowspec/forms.py:89
 msgid "Invalid network address format"
 msgstr "Λανθασμένη μορφή διεύθυνσης δικυου στο πεδίο Πηγή"
 
-#: flowspec/forms.py:54
+#: flowspec/forms.py:62
 msgid "Private addresses not allowed"
 msgstr "Δεν επιτρέπονται οι private διευθύνσεις"
 
-#: flowspec/forms.py:56 flowspec/forms.py:85
+#: flowspec/forms.py:64 flowspec/forms.py:93
 msgid "You have no authority on this subnet"
 msgstr "Δεν έχετε δικαιώματα σε αυτό το υποδίκτυο"
 
-#: flowspec/forms.py:77
+#: flowspec/forms.py:85
 #, python-format
 msgid "Currently no prefix lengths < %s are allowed"
 msgstr "Προς το παρόν δεν επιτρέπονται υποδίκτυα <%s"
 
-#: flowspec/forms.py:99
+#: flowspec/forms.py:107
 msgid "Errors in form. Please review and fix them"
 msgstr "Σφάλματα στη φόρμα. Παρακαλώ διορθώστε τα"
 
-#: flowspec/forms.py:119
+#: flowspec/forms.py:134
 msgid ""
 "Destination address/network should belong to your administrative address "
 "space. Check My Profile to review your networks"
@@ -60,145 +60,155 @@ msgstr ""
 "Η διεύθυνση προορισμού πρέπει να ανήκει στα διαχειριστικά σας δίκτυα. "
 "Επισκεφθείτε 'Το Προφίλ μου' για την προβολή των διαχειριστικών σας δικτύων"
 
-#: flowspec/forms.py:121
+#: flowspec/forms.py:136
 msgid ""
 "Cannot create rule for source ports and ports at the same time. Select "
 "either ports or source ports"
-msgstr "Δεν μπορεί να δημιουργηθεί φίλτρο για source ports και ports ταυτόχρονα. Επιλέξτε είτε ports είτε source ports"
+msgstr ""
+"Δεν μπορεί να δημιουργηθεί φίλτρο για source ports και ports ταυτόχρονα. "
+"Επιλέξτε είτε ports είτε source ports"
 
-#: flowspec/forms.py:123
+#: flowspec/forms.py:138
 msgid ""
 "Cannot create rule for destination ports and ports at the same time. Select "
 "either ports or destination ports"
-msgstr "Δεν μπορεί να δημιουργηθεί φίλτρο για destination ports και ports ταυτόχρονα. Επιλέξτε είτε ports είτε destination ports"
+msgstr ""
+"Δεν μπορεί να δημιουργηθεί φίλτρο για destination ports και ports "
+"ταυτόχρονα. Επιλέξτε είτε ports είτε destination ports"
 
-#: flowspec/forms.py:125
+#: flowspec/forms.py:140
 msgid ""
 "Once source port is matched, source has to be filled as well. Either "
 "deselect source port or fill source address"
-msgstr "Εφόσον έχετε επιλέξει source port, το πεδίο source πρέπει να συμπληρωθεί. Είτε απο-επιλέξτε το πεδίο source port είτε συμπληρώστε μια διεύθυνση στο source"
+msgstr ""
+"Εφόσον έχετε επιλέξει source port, το πεδίο source πρέπει να συμπληρωθεί. "
+"Είτε απο-επιλέξτε το πεδίο source port είτε συμπληρώστε μια διεύθυνση στο "
+"source"
 
-#: flowspec/forms.py:127
+#: flowspec/forms.py:142
 msgid ""
 "Once destination port is matched, destination has to be filled as well. "
 "Either deselect destination port or fill destination address"
-msgstr "Εφόσον έχετε επιλέξει destination port, το πεδίο destination πρέπει να συμπληρωθεί. Είτε απο-επιλέξτε το πεδίο destination port είτε συμπληρώστε μια διεύθυνση στο destination"
+msgstr ""
+"Εφόσον έχετε επιλέξει destination port, το πεδίο destination πρέπει να "
+"συμπληρωθεί. Είτε απο-επιλέξτε το πεδίο destination port είτε συμπληρώστε "
+"μια διεύθυνση στο destination"
 
-#: flowspec/forms.py:129
+#: flowspec/forms.py:144
 msgid "Fill at least a Rule Match Condition"
 msgstr "Συμπληρώστε τουλάχιστον έναν όρο ταύτισης"
 
-#: flowspec/forms.py:131
+#: flowspec/forms.py:146
 #, python-format
 msgid "This action \"%s\" is not permitted"
 msgstr "Η ενέργεια %s δεν επιτρέπεται"
 
-#: flowspec/forms.py:183
+#: flowspec/forms.py:198
 msgid "Rate-limiting cannot be < 50kbps"
 msgstr ""
 
-#: flowspec/forms.py:186
+#: flowspec/forms.py:201
 msgid "Rate-limiting should be an integer < 50"
 msgstr ""
 
-#: flowspec/forms.py:188 flowspec/forms.py:212
+#: flowspec/forms.py:203 flowspec/forms.py:227
 msgid "Cannot be empty"
 msgstr "Το πεδίο δεν μπορεί να είναι κενό"
 
-#: flowspec/forms.py:193
+#: flowspec/forms.py:208
 msgid "Cannot select something other than rate-limit"
 msgstr ""
 
-#: flowspec/forms.py:210
+#: flowspec/forms.py:225
 msgid "Port should be an integer"
 msgstr "Η port θα πρέπει να είναι ένας ακέραιος αριθμός"
 
-#: flowspec/models.py:103 templates/user_routes.html:273
-msgid "Then"
-msgstr "Ενέργειες"
-
-#: flowspec/models.py:108 templates/review.html:49
-#: templates/review.html.py:107 templates/user_routes.html:271
+#: flowspec/models.py:107 templates/user_routes.html:265
 msgid "Name"
 msgstr "Όνομα"
 
-#: flowspec/models.py:110 flowspec/models.py:112
+#: flowspec/models.py:109 flowspec/models.py:111
 msgid "Network address. Use address/CIDR notation"
 msgstr "Διεύθυνση δικτύου/υποδικτύου. Χρησιμοποιήστε σύνταξη διεύθυνσης/CIDR"
 
-#: flowspec/models.py:110
+#: flowspec/models.py:109
 msgid "Source Address"
-msgstr ""
+msgstr "Διεύθυνση Πηγής"
 
-#: flowspec/models.py:111
+#: flowspec/models.py:110
 msgid "Source Port"
-msgstr ""
+msgstr "Port Πηγής"
 
-#: flowspec/models.py:112
+#: flowspec/models.py:111
 msgid "Destination Address"
-msgstr ""
+msgstr "Διεύθυνση Προορισμού"
 
-#: flowspec/models.py:113
+#: flowspec/models.py:112
 msgid "Destination Port"
-msgstr ""
+msgstr "Port Προορισμού"
 
-#: flowspec/models.py:114 templates/add_port.html:14 templates/apply.html:308
-#: templates/apply.html.py:327 templates/apply.html:346
+#: flowspec/models.py:113 templates/add_port.html:14 templates/apply.html:326
+#: templates/apply.html.py:345 templates/apply.html:364
 msgid "Port"
 msgstr ""
 
-#: flowspec/models.py:120
+#: flowspec/models.py:119
 msgid "Protocol"
 msgstr "Πρωτόκολλο"
 
-#: flowspec/models.py:125 templates/user_routes.html:274
+#: flowspec/models.py:121 templates/user_routes.html:267
+msgid "Then"
+msgstr "Ενέργειες"
+
+#: flowspec/models.py:124 templates/user_routes.html:268
 msgid "Status"
 msgstr "Κατάσταση"
 
-#: flowspec/models.py:128 templates/user_routes.html:277
+#: flowspec/models.py:127 templates/user_routes.html:271
 msgid "Expires"
 msgstr "Λήγει"
 
-#: flowspec/models.py:129 templates/user_routes.html:278
+#: flowspec/models.py:128 templates/user_routes.html:272
 msgid "Response"
 msgstr "Απόκριση Δικτύου"
 
-#: flowspec/models.py:130 templates/review.html:57
-#: templates/review.html.py:115
+#: flowspec/models.py:129
 msgid "Comments"
 msgstr "Σχόλια"
 
-#: flowspec/models.py:155
+#: flowspec/models.py:154
 msgid "Invalid network address format at Destination Field"
 msgstr "Λανθασμένη μορφή διεύθυνσης δικυου στο πεδίο Προορισμός"
 
-#: flowspec/models.py:161
+#: flowspec/models.py:160
 msgid "Invalid network address format at Source Field"
 msgstr "Λανθασμένη μορφή διεύθυνσης δικυου στο πεδίο Πηγή"
 
-#: flowspec/views.py:83
+#: flowspec/views.py:89
 msgid ""
 "Insufficient rights on administrative networks. Cannot add rule. Contact "
 "your administrator"
-msgstr "Μη επαρκή δικαιώματα στα διαχειριστικά δίκτυα. Η προσθήκη φίλτρων δεν είναι εφικτή. Επικοινωνήστε με το διαχειριστή σας"
+msgstr ""
+"Μη επαρκή δικαιώματα στα διαχειριστικά δίκτυα. Η προσθήκη φίλτρων δεν είναι "
+"εφικτή. Επικοινωνήστε με το διαχειριστή σας"
 
-#: flowspec/views.py:128
+#: flowspec/views.py:150
 #, python-format
 msgid "Insufficient rights to edit rule %s"
 msgstr "Μη επαρκή δικαιώματα για την επεξεργασία του φίλτρου %s"
 
-#: flowspec/views.py:140
+#: flowspec/views.py:162
 #, python-format
 msgid "Cannot edit a pending rule: %s."
 msgstr "Δεν είναι δυνατή η επεξεργασία ενός φίλτρου (%s) σε κατάσταση pending "
 
-#: flowspec/views.py:242
+#: flowspec/views.py:304
 msgid ""
 "Your idP should release the HTTP_EPPN attribute towards this service<br>"
 msgstr ""
 "Ο idP σας θα πρέπει να παρέχει την HTTP_EPPN παράμετερο στην υπηρεσία<br>"
 
-#: flowspec/views.py:244
+#: flowspec/views.py:306
 msgid ""
 "Your idP should release the HTTP_SHIB_HOMEORGANIZATION attribute towards "
 "this service<br>"
@@ -206,7 +216,7 @@ msgstr ""
 "Ο idP σας θα πρέπει να παρέχει την HTTP_SHIB_HOMEORGANIZATION παράμετερο "
 "στην υπηρεσία<br>"
 
-#: flowspec/views.py:246
+#: flowspec/views.py:308
 msgid ""
 "Your idP should release an appropriate HTTP_SHIB_EP_ENTITLEMENT attribute "
 "towards this service<br>"
@@ -214,7 +224,7 @@ msgstr ""
 "Ο idP σας θα πρέπει να παρέχει την HTTP_SHIB_EP_ENTITLEMENT παράμετερο στην "
 "υπηρεσία<br>"
 
-#: flowspec/views.py:248
+#: flowspec/views.py:310
 msgid ""
 "Your idP should release the HTTP_SHIB_INETORGPERSON_MAIL attribute towards "
 "this service"
@@ -222,7 +232,7 @@ msgstr ""
 "Ο idP σας θα πρέπει να παρέχει την HTTP_SHIB_INETORGPERSON_MAIL παράμετερο "
 "στην υπηρεσία<br>"
 
-#: flowspec/views.py:263
+#: flowspec/views.py:329
 msgid ""
 "Your organization's domain name does not match our peers' domain "
 "names<br>Please contact Helpdesk to resolve this issue"
@@ -230,7 +240,7 @@ msgstr ""
 "Το domain name του οργανισμού σας δε βρέθηκε στ βάση φορέων μας.<br>Παρακαλώ "
 "επικοινωνήστε με το Helpdesk για τη διευθέτηση του προβλήματος"
 
-#: flowspec/views.py:271
+#: flowspec/views.py:337
 #, python-format
 msgid ""
 "User account <strong>%s</strong> is pending activation. Administrators have "
@@ -244,14 +254,14 @@ msgstr ""
 "ενεργοποιηθεί για μεγάλο χρονικό διάστημα, επικοινωνήστε με τον τεχνικό σας "
 "υπέυθυνο ή το Helpdesk του ΕΔΕΤ."
 
-#: flowspec/views.py:275
+#: flowspec/views.py:341
 msgid ""
 "Something went wrong during user authentication. Contact your administrator"
 msgstr ""
 "Παρουσιάστηκε ένα σφάλμα κατά την είσοδο του χρήστη. Επικοινωνήστε με το "
 "διαχειριστή σας"
 
-#: flowspec/views.py:279
+#: flowspec/views.py:345
 msgid "Invalid login procedure"
 msgstr "Εσφαλμένη διαδικασία εισόδου"
 
@@ -269,43 +279,6 @@ msgid ""
 "_ characters."
 msgstr ""
 
-#: templates/application_list.html:3
-msgid "Application submitted"
-msgstr ""
-
-#: templates/application_list.html:7
-msgid "Pending applications"
-msgstr ""
-
-#: templates/application_list.html:9 templates/application_list.html.py:18
-msgid "Hostname"
-msgstr ""
-
-#: templates/application_list.html:9 templates/application_list.html.py:18
-msgid "User"
-msgstr ""
-
-#: templates/application_list.html:9 templates/application_list.html.py:18
-msgid "Memory"
-msgstr ""
-
-#: templates/application_list.html:9 templates/application_list.html.py:18
-msgid "vCPUs"
-msgstr ""
-
-#: templates/application_list.html:9 templates/application_list.html.py:18
-#: templates/review.html:72
-msgid "Network"
-msgstr ""
-
-#: templates/application_list.html:9 templates/application_list.html.py:18
-msgid "Filed"
-msgstr ""
-
-#: templates/application_list.html:16
-msgid "Completed applications"
-msgstr ""
-
 #: templates/apply.html:6
 msgid "Edit Rule"
 msgstr "Επεξεργασία φίλτρου"
@@ -339,132 +312,124 @@ msgstr "Αίτηση δημιουργίας νέου φίλτρου"
 msgid "Rule Basic Info"
 msgstr "Βασικές Πληροφορίες Φίλτρου"
 
-#: templates/apply.html:261
+#: templates/apply.html:262
+msgid "Admin Options"
+msgstr "Επιλογές Διαχείρισης"
+
+#: templates/apply.html:280
 msgid "Rule Match Conditions"
 msgstr "Όροι ταύτισης φίλτρου"
 
-#: templates/apply.html:297
+#: templates/apply.html:315
 msgid "Advanced Settings (Ports)"
 msgstr "Προηγμένες Ρυθμίσεις (Ports)"
 
-#: templates/apply.html:299
+#: templates/apply.html:317
 msgid ""
 "Select source/destination port(s), or select common port(s) for both source/"
 "destination"
 msgstr ""
 
-#: templates/apply.html:364
+#: templates/apply.html:382
 msgid "Rule Actions"
 msgstr "Ενέργειες Φίλτρου"
 
-#: templates/apply.html:380
+#: templates/apply.html:398
 msgid "Expiration"
 msgstr "Λήξη"
 
-#: templates/apply.html:394
+#: templates/apply.html:412
 msgid "Use/Comments"
 msgstr "Χρήση/Σχόλια"
 
-#: templates/apply.html:397
+#: templates/apply.html:415
 msgid ""
 "Give a short description of the intended use of this rule, that justifies "
 "the parameter selection above. Feel free to include any additional comments."
 msgstr ""
 
-#: templates/apply.html:408
+#: templates/apply.html:426
 msgid "Apply"
 msgstr "Εφαρμογή"
 
-#: templates/apply.html:415
+#: templates/apply.html:433
 msgid "Add new port"
-msgstr ""
+msgstr "Νέα port"
 
-#: templates/base.html:40 templates/error.html:56 templates/welcome.html:7
+#: templates/base.html:41 templates/error.html:39 templates/welcome.html:7
 msgid "Welcome"
 msgstr "Καλωσήρθατε"
 
-#: templates/base.html:54 templates/error.html:68 templates/profile.html:4
-#: templates/profile.html.py:6
+#: templates/base.html:55 templates/error.html:42 templates/profile.html:4
+#: templates/profile.html.py:5 templates/profile.html:7
 msgid "My profile"
 msgstr "Το προφίλ μου"
 
-#: templates/base.html:56 templates/error.html:70
+#: templates/base.html:57 templates/error.html:44
 msgid "Admin"
 msgstr "Διαχειριστής"
 
-#: templates/base.html:58 templates/error.html:72
+#: templates/base.html:59 templates/error.html:46
 msgid "Logout"
 msgstr "Έξοδος"
 
-#: templates/base.html:60 templates/welcome.html:17
+#: templates/base.html:61 templates/welcome.html:17
 msgid "Shibboleth Login"
 msgstr "Είσοδος με Shibboleth"
 
-#: templates/base.html:68 templates/user_routes.html:230
-#: templates/user_routes.html.py:234
+#: templates/base.html:70 templates/user_routes.html:225
+#: templates/user_routes.html.py:229
 msgid "My rules"
 msgstr "Τα φίλτρα μου"
 
-#: templates/base.html:86 templates/error.html:117
-msgid ""
-"If you have any questions or need help, contact GRNET Helpdesk at <a "
-"href='mailto:helpdesk@grnet.gr'>helpdesk@grnet.gr</a> or 800-11-47638."
-msgstr ""
-"Eάν χρειάζεστε διευκρινήσεις ή βοήθεια, επικοινωνήστε με το Helpdesk του "
-"ΕΔΕΤ στο <a href='mailto:helpdesk@grnet.gr'>helpdesk@grnet.gr</a> ή "
-"τηλεφωνικά στο 800-11-47638."
-
-#: templates/base.html:88 templates/error.html:119
-msgid "GRNET"
-msgstr "ΕΔΕΤ"
-
-#: templates/base.html:88 templates/error.html:119 templates/getinfo.html:27
-#: templates/getinfo.html.py:28
-msgid "Info"
-msgstr "Πληροφορίες"
-
-#: templates/base.html:88 templates/error.html:119
-msgid "Service Terms"
-msgstr "Όροι Χρήσης"
-
-#: templates/error.html:4 templates/error.html.py:88
+#: templates/error.html:4 templates/error.html.py:53
 msgid "Activation Pending"
 msgstr "Απαιτείται Ενεργοποίηση"
 
-#: templates/error.html:4 templates/error.html.py:88
+#: templates/error.html:4 templates/error.html.py:53
 msgid "Error"
 msgstr "Σφάλμα"
 
-#: templates/error.html:74
-msgid ""
-"After clicking Retry Login, it is strongly suggested to close your browser "
-"and visit the page again"
-msgstr ""
-"Αφού επιλέξετε Επανάληψη Εισόδου, προτείνουμε να κλείσετε την εφαρμογή "
-"περιήγησης και να επισκεφθέιτε τη σελίδα ξανά"
-
-#: templates/error.html:74
+#: templates/error.html:48
 msgid "Retry Login"
 msgstr "Επανάληψη Εισόδου"
 
-#: templates/error.html:82
-msgid "My routes"
-msgstr "Τα φίλτρα μου"
-
-#: templates/error.html:91
+#: templates/error.html:56
 msgid ""
 "One or more required shibboleth attributes were not released towards this "
 "service"
 msgstr "Ένα ή περισσότερα Shibboleth attributes δεν προωθήθηκαν στην υπηρεσία"
 
-#: templates/error.html:96
+#: templates/error.html:61
 msgid "Required shibboleth attributes"
 msgstr "Απαιτούμενα Shibboleth attributes "
 
-#: templates/error.html:103
+#: templates/error.html:68
 msgid "Optional"
 msgstr "Προεραιτικά"
 
+#: templates/footer.html:4
+msgid ""
+"If you have any questions or need help, contact GRNET Helpdesk at <a "
+"href='mailto:helpdesk@grnet.gr'>helpdesk@grnet.gr</a> or 800-11-47638."
+msgstr ""
+"Eάν χρειάζεστε διευκρινήσεις ή βοήθεια, επικοινωνήστε με το Helpdesk του "
+"ΕΔΕΤ στο <a href='mailto:helpdesk@grnet.gr'>helpdesk@grnet.gr</a> ή "
+"τηλεφωνικά στο 800-11-47638."
+
+#: templates/footer.html:6
+msgid "GRNET"
+msgstr "ΕΔΕΤ"
+
+#: templates/footer.html:6 templates/getinfo.html:27
+#: templates/getinfo.html.py:28
+msgid "Info"
+msgstr "Πληροφορίες"
+
+#: templates/footer.html:6
+msgid "Service Terms"
+msgstr "Όροι Χρήσης"
+
 #: templates/getinfo.html:33
 msgid "Intro"
 msgstr "Εισαγωγή"
@@ -625,211 +590,141 @@ msgstr ""
 "είσοδος και χρήση της υπηρεσίας προϋποθέτη την ορθή διαμόρφωση συγκεκριμένων "
 "ιδιοτήτων του Shibboleth."
 
-#: templates/profile.html:9
+#: templates/profile.html:10
 msgid "My data"
 msgstr "Τα στοιχεία μου"
 
-#: templates/profile.html:10
+#: templates/profile.html:11
 msgid "First name"
 msgstr "Όνομα"
 
-#: templates/profile.html:11
+#: templates/profile.html:12
 msgid "Last name"
 msgstr "Επώνυμο"
 
-#: templates/profile.html:12 templates/review.html:50
-#: templates/review.html.py:108
+#: templates/profile.html:13
 msgid "Email"
 msgstr ""
 
-#: templates/profile.html:13
+#: templates/profile.html:15
+msgid "My Networks"
+msgstr "Τα Δίκτυά μου"
+
+#: templates/profile.html:18
 msgid "Organization"
 msgstr "Φορέας"
 
-#: templates/profile.html:14
-msgid "Admin Networks"
-msgstr "Δίκτυα Διαχείρισης"
-
 #: templates/profile.html:18
+msgid "Networks"
+msgstr "Δίκτυα"
+
+#: templates/profile.html:27
 msgid ""
 "Ooops! Seems you have no networks associated with your peer. Contact "
 "Helpdesk to resolve this issue."
 msgstr ""
 
-#: templates/review.html:3 templates/review.html.py:27
-msgid "Review application"
-msgstr ""
-
-#: templates/review.html:27
-msgid "by"
-msgstr ""
-
-#: templates/review.html:28
-msgid "Submitted"
-msgstr ""
-
-#: templates/review.html:33 templates/review.html.py:91
-msgid "Instance information"
-msgstr ""
-
-#: templates/review.html:47 templates/review.html.py:105
-msgid "Administrative contact"
-msgstr ""
-
-#: templates/review.html:51 templates/review.html.py:109
-msgid "Phone"
-msgstr ""
-
-#: templates/review.html:64 templates/review.html.py:122
-msgid "Placement"
-msgstr ""
-
-#: templates/review.html:67
-msgid "The user has requested explicit network placement on"
-msgstr ""
-
-#: templates/review.html:71
-msgid ""
-"Choose either a network, or a cluster from the quick list to use the "
-"cluster's default network."
-msgstr ""
-
-#: templates/review.html:80
-msgid "Decision"
-msgstr ""
-
-#: templates/review.html:81
-msgid "Comments to the user"
-msgstr ""
-
-#: templates/review.html:123
-msgid "The instance has been placed on"
-msgstr ""
-
-#: templates/user_keys.html:86
-msgid ""
-"Upload your SSH public keys and have them automatically installed on all "
-"newly-created instances. Keys must be in OpenSSH format, either RSA, or DSA, "
-"with or without a trailing comment."
-msgstr ""
-
-#: templates/user_keys.html:90
-msgid "Fingerprint"
-msgstr ""
-
-#: templates/user_keys.html:90
-msgid "Comment"
-msgstr ""
-
-#: templates/user_keys.html:92
-msgid "Delete"
-msgstr ""
-
-#: templates/user_keys.html:96
-msgid "Add new key"
-msgstr ""
-
-#: templates/user_keys.html:106
-msgid "Add key"
-msgstr ""
-
-#: templates/user_routes.html:19 templates/user_routes.html.py:311
+#: templates/user_routes.html:19 templates/user_routes.html.py:298
 msgid "Suspend"
 msgstr "Κατάργηση"
 
-#: templates/user_routes.html:97
+#: templates/user_routes.html:126
 msgid "Display"
 msgstr "Προβολή"
 
-#: templates/user_routes.html:97
+#: templates/user_routes.html:126
 msgid "All"
 msgstr "όλων των"
 
-#: templates/user_routes.html:97
+#: templates/user_routes.html:126
 msgid "rules"
 msgstr "φίλτρων"
 
-#: templates/user_routes.html:99
+#: templates/user_routes.html:128
 msgid "No records to display"
 msgstr "Δεν βρέθηκαν εγγραφές"
 
-#: templates/user_routes.html:101
+#: templates/user_routes.html:130
 msgid "Showing 0 to 0 of 0 entries"
 msgstr "Δείχνοντας 0 εως 0 από 0 εγγραφές"
 
-#: templates/user_routes.html:104
+#: templates/user_routes.html:133
 msgid "Search:"
 msgstr "Αναζήτηση:"
 
-#: templates/user_routes.html:107
+#: templates/user_routes.html:136
 msgid "First"
 msgstr "Πρώτη"
 
-#: templates/user_routes.html:108
+#: templates/user_routes.html:137
 msgid "Previous"
 msgstr "Προηγούμενη"
 
-#: templates/user_routes.html:109
+#: templates/user_routes.html:138
 msgid "Next"
 msgstr "Επόμενη"
 
-#: templates/user_routes.html:110
+#: templates/user_routes.html:139
 msgid "Last"
 msgstr "Τελευταία"
 
-#: templates/user_routes.html:237 templates/user_routes.html.py:336
+#: templates/user_routes.html:232 templates/user_routes.html.py:327
 msgid "Console"
 msgstr "Κονσόλα"
 
-#: templates/user_routes.html:237
+#: templates/user_routes.html:232
 msgid "Add Rule"
 msgstr "Δημιουργία φίλτρου"
 
-#: templates/user_routes.html:272
+#: templates/user_routes.html:266
 msgid "Match"
 msgstr "Όροι"
 
-#: templates/user_routes.html:275
+#: templates/user_routes.html:269
 msgid "Details"
 msgstr "Λεπτομέρειες"
 
-#: templates/user_routes.html:276
+#: templates/user_routes.html:270
 msgid "Applier"
 msgstr "Χρήστης"
 
-#: templates/user_routes.html:279
+#: templates/user_routes.html:273
 msgid "Actions"
 msgstr "Ενέργειες"
 
-#: templates/user_routes.html:307
+#: templates/user_routes.html:294
 msgid "Rule expired"
 msgstr "Λήξη Φίλτρου"
 
-#: templates/user_routes.html:307
+#: templates/user_routes.html:294
 msgid "Suspended by administrator"
 msgstr "Απενεργοποιήθηκε από το διαχειριστή"
 
-#: templates/user_routes.html:307
+#: templates/user_routes.html:294
 msgid "Suspended by user"
 msgstr "Απενεργοποιήθηκε από το χρήστη"
 
-#: templates/user_routes.html:310
+#: templates/user_routes.html:297
 msgid "Edit"
 msgstr "Επεξεργασία"
 
-#: templates/user_routes.html:315
+#: templates/user_routes.html:302
 msgid "Reactivate"
-msgstr ""
+msgstr "Ενεργοποίηση"
 
-#: templates/user_routes.html:318
+#: templates/user_routes.html:305
 msgid "ReSync"
 msgstr ""
 
-#: templates/user_routes.html:332
+#: templates/user_routes.html:308
+msgid "Fix it!"
+msgstr "Επιδιόρθωση"
+
+#: templates/user_routes.html:323
 msgid "You are about to suspend rule"
 msgstr "Πρόκειται να απενεργοποιήσετε το φίλτρο"
 
-#: templates/user_routes.html:333
+#: templates/user_routes.html:324
 msgid ""
 "Suspending the rule will automatically remove the configuration from the "
 "network and mark this rule as inactive."
@@ -837,7 +732,7 @@ msgstr ""
 "Η απενεργοποίηση του φίλτρου θα προκαλέσει την αυτόματη αφαίρεση της "
 "συγκρότησης από το δίκτυο."
 
-#: templates/user_routes.html:334
+#: templates/user_routes.html:325
 msgid "Are you sure you want to proceed?"
 msgstr "Είστε βέβαιοι ότι επιθυμείτε να συνεχίσετε;"
 
@@ -897,3 +792,13 @@ msgstr "Ο χρήστης έχει ήδη ενεργοποιηθεί"
 #: templates/registration/activation_complete.html:8
 msgid "The user will be notified about his/her account activation"
 msgstr "Ο χρήστης θα ενημερωθεί για την ενεργοποίηση του λογαριασμού"
+
+#~ msgid ""
+#~ "After clicking Retry Login, it is strongly suggested to close your "
+#~ "browser and visit the page again"
+#~ msgstr ""
+#~ "Αφού επιλέξετε Επανάληψη Εισόδου, προτείνουμε να κλείσετε την εφαρμογή "
+#~ "περιήγησης και να επισκεφθέιτε τη σελίδα ξανά"
+
+#~ msgid "My routes"
+#~ msgstr "Τα φίλτρα μου"
diff --git a/static/Flashlight.swf b/static/Flashlight.swf
deleted file mode 100644 (file)
index 0cf6f0c..0000000
Binary files a/static/Flashlight.swf and /dev/null differ
index 706812e..2574cc1 100644 (file)
@@ -45,7 +45,7 @@ a:hover {
 }
 
 #main {
-    background: url("/static/background_grnet.png") repeat-x scroll 0 0 #FFFFFF;
+    background: url("/static/background.png") repeat-x scroll 0 0 #FFFFFF;
     padding: 0;
     margin: 0;
 }
diff --git a/static/dots.gif b/static/dots.gif
new file mode 100644 (file)
index 0000000..e7f856e
Binary files /dev/null and b/static/dots.gif differ
diff --git a/static/javavnc/VncViewer.jar b/static/javavnc/VncViewer.jar
deleted file mode 100644 (file)
index a387bfc..0000000
Binary files a/static/javavnc/VncViewer.jar and /dev/null differ
diff --git a/static/javavnc/hs_err_pid1450.log b/static/javavnc/hs_err_pid1450.log
deleted file mode 100644 (file)
index 2dc039e..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-#
-# An unexpected error has been detected by Java Runtime Environment:
-#
-#  SIGSEGV (0xb) at pc=0x00007f64b6eab5b8, pid=1450, tid=140070529919248
-#
-# Java VM: Java HotSpot(TM) 64-Bit Server VM (11.2-b01 mixed mode linux-amd64)
-# Problematic frame:
-# C  [libc.so.6+0x305b8]  catgets+0x18
-#
-# If you would like to submit a bug report, please visit:
-#   http://java.sun.com/webapps/bugreport/crash.jsp
-# The crash happened outside the Java Virtual Machine in native code.
-# See problematic frame for where to report the bug.
-#
-
----------------  T H R E A D  ---------------
-
-Current thread (0x0000000040a86c00):  JavaThread "main" [_thread_in_native, id=1451, stack(0x00007f64b61de000,0x00007f64b62df000)]
-
-siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x0000000000000008
-
-Registers:
-RAX=0x0000000000000001, RBX=0x00007f646c1a09c0, RCX=0x00007f646baba78d, RDX=0x0000000000000001
-RSP=0x00007f64b62dd1e8, RBP=0x00007f64b62dd220, RSI=0x0000000000000013, RDI=0x0000000000000000
-R8 =0x0000000000000001, R9 =0x0000000000000000, R10=0x0000000000000000, R11=0x00007f64b6eab5a0
-R12=0x0000000000000105, R13=0x00007f646c0e9380, R14=0x000000000000000f, R15=0x00007f64b62dd6f8
-RIP=0x00007f64b6eab5b8, EFL=0x0000000000010202, CSGSFS=0x0000000000000033, ERR=0x0000000000000004
-  TRAPNO=0x000000000000000e
-
-Top of Stack: (sp=0x00007f64b62dd1e8)
-0x00007f64b62dd1e8:   00007f646c1a09c0 00007f64b62dd220
-0x00007f64b62dd1f8:   00007f646ba17cc6 00007f646c0e9380
-0x00007f64b62dd208:   00007f646c153df0 00007f646c153df0
-0x00007f64b62dd218:   00007f646c204b20 00007f64b62dd270
-0x00007f64b62dd228:   00007f646ba188e5 0000000000ca0001
-0x00007f64b62dd238:   0000000000000107 0000000000000000
-0x00007f64b62dd248:   00007f646c0e9380 00007f646b8d35e0
-0x00007f64b62dd258:   0000000000000105 0000000000000107
-0x00007f64b62dd268:   00007f646c204b20 0000000040a86dc0
-0x00007f64b62dd278:   00007f646b8d36ee 00007f646bbd81f0
-0x00007f64b62dd288:   00007f64b62dd310 00007f646c1a09c0
-0x00007f64b62dd298:   00007f646b8d43b3 00007f64b62dd2c0
-0x00007f64b62dd2a8:   00007f64b6705c37 0000000000000000
-0x00007f64b62dd2b8:   00007f646c170350 00007f646c170350
-0x00007f64b62dd2c8:   00050019b686e266 00007f646c0e9380
-0x00007f64b62dd2d8:   0101000000000000 00007f646c0dfe70
-0x00007f64b62dd2e8:   00007f646c1ea060 00007f646b43ab40
-0x00007f64b62dd2f8:   0000000000000000 00007f64b62dd6e8
-0x00007f64b62dd308:   0000000000000000 00007f646b22fa92
-0x00007f64b62dd318:   0000000000000000 00007f646b22fb18
-0x00007f64b62dd328:   0000000000000001 00007f646b22fa68
-0x00007f64b62dd338:   00007f646c154940 00007f646b22f03a
-0x00007f64b62dd348:   0000000000000020 00007f646b22f043
-0x00007f64b62dd358:   0000000000000018 00007f646b22f165
-0x00007f64b62dd368:   0000000000000000 00007f646b22f315
-0x00007f64b62dd378:   0000000000000005 00007f646b22f317
-0x00007f64b62dd388:   0000000000000019 00007f646b22f308
-0x00007f64b62dd398:   000000000000fff6 00007f646b22f08a
-0x00007f64b62dd3a8:   000000000000ffe2 00007f646baa6bab
-0x00007f64b62dd3b8:   00007f646c19e170 00007f646baa6bc7
-0x00007f64b62dd3c8:   00007f646c19e240 00007f646baa6bd5
-0x00007f64b62dd3d8:   00007f646c1b88f0 00007f646baa82df 
-
-Instructions: (pc=0x00007f64b6eab5b8)
-0x00007f64b6eab5a8:   53 74 6d 83 c6 01 85 f6 7e 66 85 d2 78 62 89 d0
-0x00007f64b6eab5b8:   4c 8b 4f 08 31 d2 0f af c6 48 8b 6f 18 4b 8d 1c 
-
-Stack: [0x00007f64b61de000,0x00007f64b62df000],  sp=0x00007f64b62dd1e8,  free space=1020k
-Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
-C  [libc.so.6+0x305b8]  catgets+0x18
-C  [libmawt.so+0x1a88e5]
-
-Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
-j  sun.awt.motif.MWindowPeer.pCreate(Lsun/awt/motif/MComponentPeer;Ljava/lang/String;)V+0
-j  sun.awt.motif.MWindowPeer.create(Lsun/awt/motif/MComponentPeer;)V+12
-j  sun.awt.motif.MComponentPeer.init(Ljava/awt/Component;)V+31
-j  sun.awt.motif.MWindowPeer.init(Ljava/awt/Window;)V+102
-j  sun.awt.motif.MFramePeer.<init>(Ljava/awt/Frame;)V+159
-j  sun.awt.motif.MToolkit.createFrame(Ljava/awt/Frame;)Ljava/awt/peer/FramePeer;+5
-j  java.awt.Frame.addNotify()V+20
-j  java.awt.Window.pack()V+28
-j  OptionsFrame.<init>(LVncViewer;)V+319
-j  VncViewer.init()V+79
-j  VncViewer.main([Ljava/lang/String;)V+24
-v  ~StubRoutines::call_stub
-
----------------  P R O C E S S  ---------------
-
-Java Threads: ( => current thread )
-  0x00007f646c1f8000 JavaThread "AWT-Motif" daemon [_thread_blocked, id=1465, stack(0x00007f64696a4000,0x00007f64697a5000)]
-  0x00007f646c1f7000 JavaThread "AWT-Shutdown" [_thread_blocked, id=1464, stack(0x00007f64697a5000,0x00007f64698a6000)]
-  0x00007f646c185c00 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=1463, stack(0x00007f6469dd9000,0x00007f6469eda000)]
-  0x00007f646c106800 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=1460, stack(0x00007f646beff000,0x00007f646c000000)]
-  0x00007f646c103800 JavaThread "CompilerThread1" daemon [_thread_blocked, id=1459, stack(0x00007f6470005000,0x00007f6470106000)]
-  0x00007f646c101800 JavaThread "CompilerThread0" daemon [_thread_blocked, id=1458, stack(0x00007f6470106000,0x00007f6470207000)]
-  0x00007f646c0ffc00 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=1457, stack(0x00007f6470207000,0x00007f6470308000)]
-  0x00007f646c0e1c00 JavaThread "Finalizer" daemon [_thread_blocked, id=1456, stack(0x00007f6470502000,0x00007f6470603000)]
-  0x00007f646c0e0400 JavaThread "Reference Handler" daemon [_thread_blocked, id=1455, stack(0x00007f6470603000,0x00007f6470704000)]
-=>0x0000000040a86c00 JavaThread "main" [_thread_in_native, id=1451, stack(0x00007f64b61de000,0x00007f64b62df000)]
-
-Other Threads:
-  0x00007f646c0dac00 VMThread [stack: 0x00007f6470704000,0x00007f6470805000] [id=1454]
-  0x00007f646c108c00 WatcherThread [stack: 0x00007f646bdfe000,0x00007f646beff000] [id=1462]
-
-VM state:not at safepoint (normal execution)
-
-VM Mutex/Monitor currently owned by a thread: None
-
-Heap
- PSYoungGen      total 17920K, used 4312K [0x00007f649e340000, 0x00007f649f740000, 0x00007f64b2340000)
-  eden space 15360K, 28% used [0x00007f649e340000,0x00007f649e776240,0x00007f649f240000)
-  from space 2560K, 0% used [0x00007f649f4c0000,0x00007f649f4c0000,0x00007f649f740000)
-  to   space 2560K, 0% used [0x00007f649f240000,0x00007f649f240000,0x00007f649f4c0000)
- PSOldGen        total 40960K, used 0K [0x00007f6476340000, 0x00007f6478b40000, 0x00007f649e340000)
-  object space 40960K, 0% used [0x00007f6476340000,0x00007f6476340000,0x00007f6478b40000)
- PSPermGen       total 21248K, used 6239K [0x00007f6470f40000, 0x00007f6472400000, 0x00007f6476340000)
-  object space 21248K, 29% used [0x00007f6470f40000,0x00007f6471557da8,0x00007f6472400000)
-
-Dynamic libraries:
-40000000-40009000 r-xp 00000000 fe:00 139453                             /usr/lib/jvm/java-6-sun-1.6.0.12/jre/bin/java
-40108000-4010a000 rwxp 00008000 fe:00 139453                             /usr/lib/jvm/java-6-sun-1.6.0.12/jre/bin/java
-40a7f000-40eef000 rwxp 00000000 00:00 0                                  [heap]
-7f6469470000-7f6469479000 r-xs 00000000 fe:00 868862                     /var/cache/fontconfig/945677eb7aeaf62f1d50efc3fb3ec7d8-le64.cache-3
-7f6469479000-7f646947b000 r-xs 00000000 fe:00 868963                     /var/cache/fontconfig/fd9505950c048a77dc4b710eb6a628ed-le64.cache-3
-7f646947b000-7f646947f000 r-xs 00000000 fe:00 868962                     /var/cache/fontconfig/ddc79d3ea06a7c6ffa86ede85f3bb5df-le64.cache-3
-7f646947f000-7f6469481000 r-xs 00000000 fe:00 868961                     /var/cache/fontconfig/e3fa16a14183b06aa45b3e009278fd14-le64.cache-3
-7f6469481000-7f6469482000 r-xs 00000000 fe:00 868960                     /var/cache/fontconfig/e7071f4a29fa870f4323321c154eba04-le64.cache-3
-7f6469482000-7f6469484000 r-xs 00000000 fe:00 868959                     /var/cache/fontconfig/a2ab74764b07279e7c36ddb1d302cf26-le64.cache-3
-7f6469484000-7f6469487000 r-xs 00000000 fe:00 868958                     /var/cache/fontconfig/c69f04ab05004e31a6d5e715764f16d8-le64.cache-3
-7f6469487000-7f646948b000 r-xs 00000000 fe:00 868957                     /var/cache/fontconfig/6eb3985aa4124903f6ff08ba781cd364-le64.cache-3
-7f646948b000-7f646948e000 r-xs 00000000 fe:00 868956                     /var/cache/fontconfig/646addb8444faa74ee138aa00ab0b6a0-le64.cache-3
-7f646948e000-7f6469491000 r-xs 00000000 fe:00 868955                     /var/cache/fontconfig/20bd79ad97094406f7d1b9654bfbd926-le64.cache-3
-7f6469491000-7f6469492000 r-xs 00000000 fe:00 868954                     /var/cache/fontconfig/79517df041c92e3f2b4a9700e7dbe3c7-le64.cache-3
-7f6469492000-7f6469493000 r-xs 00000000 fe:00 868953                     /var/cache/fontconfig/4abdb2dd99886b2b2d3168a6b22d0473-le64.cache-3
-7f6469493000-7f6469495000 r-xs 00000000 fe:00 868952                     /var/cache/fontconfig/90e84e89a4382a8db77728561d41356d-le64.cache-3
-7f6469495000-7f6469496000 r-xs 00000000 fe:00 868951                     /var/cache/fontconfig/b73ae53b2eee308c3d7feb99ac2d34cd-le64.cache-3
-7f6469496000-7f6469497000 r-xs 00000000 fe:00 868950                     /var/cache/fontconfig/407fd690308a0b04640307de6deab6da-le64.cache-3
-7f6469497000-7f6469498000 r-xs 00000000 fe:00 868949                     /var/cache/fontconfig/8effb20bdbb106bdfb14f95f9ec7e12d-le64.cache-3
-7f6469498000-7f6469499000 r-xs 00000000 fe:00 868948                     /var/cache/fontconfig/27f6fa40476fb33ad65cb210c133a216-le64.cache-3
-7f6469499000-7f646949a000 r-xs 00000000 fe:00 868947                     /var/cache/fontconfig/98d684ad3abba16030bd60992dc9c5d7-le64.cache-3
-7f646949a000-7f646949c000 r-xs 00000000 fe:00 868946                     /var/cache/fontconfig/9123b38b1c36356a690c2f0bc4cbf728-le64.cache-3
-7f646949c000-7f64694a0000 r-xs 00000000 fe:00 868945                     /var/cache/fontconfig/9c0624108b9a2ae8552f664125be8356-le64.cache-3
-7f64694a0000-7f64694a9000 r-xs 00000000 fe:00 868944                     /var/cache/fontconfig/6d41288fd70b0be22e8c3a91e032eec0-le64.cache-3
-7f64694a9000-7f64694ac000 r-xs 00000000 fe:00 868943                     /var/cache/fontconfig/de156ccd2eddbdc19d37a45b8b2aac9c-le64.cache-3
-7f64694ac000-7f64694da000 r-xs 00000000 fe:00 868939                     /var/cache/fontconfig/365b55f210c0a22e9a19e35191240f32-le64.cache-3
-7f64694da000-7f64694e0000 r-xs 00000000 fe:00 868937                     /var/cache/fontconfig/105b9c7e6f0a4f82d8c9b6e39c52c6f9-le64.cache-3
-7f64696a4000-7f64696a7000 ---p 00000000 00:00 0 
-7f64696a7000-7f64697a5000 rwxp 00000000 00:00 0 
-7f64697a5000-7f64697a8000 ---p 00000000 00:00 0 
-7f64697a8000-7f64698a6000 rwxp 00000000 00:00 0 
-7f64698a6000-7f64698ab000 r-xp 00000000 fe:00 204802                     /usr/lib/libXfixes.so.3.1.0
-7f64698ab000-7f64699aa000 ---p 00005000 fe:00 204802                     /usr/lib/libXfixes.so.3.1.0
-7f64699aa000-7f64699ab000 rwxp 00004000 fe:00 204802                     /usr/lib/libXfixes.so.3.1.0
-7f64699ab000-7f64699b4000 r-xp 00000000 fe:00 55987                      /usr/lib/libXrender.so.1.3.0
-7f64699b4000-7f6469bb3000 ---p 00009000 fe:00 55987                      /usr/lib/libXrender.so.1.3.0
-7f6469bb3000-7f6469bb4000 rwxp 00008000 fe:00 55987                      /usr/lib/libXrender.so.1.3.0
-7f6469bb4000-7f6469bbd000 r-xp 00000000 fe:00 204812                     /usr/lib/libXcursor.so.1.0.2
-7f6469bbd000-7f6469dbd000 ---p 00009000 fe:00 204812                     /usr/lib/libXcursor.so.1.0.2
-7f6469dbd000-7f6469dbe000 rwxp 00009000 fe:00 204812                     /usr/lib/libXcursor.so.1.0.2
-7f6469dd9000-7f6469ddc000 ---p 00000000 00:00 0 
-7f6469ddc000-7f6469eda000 rwxp 00000000 00:00 0 
-7f6469eda000-7f6469f58000 r-xp 00000000 fe:00 139293                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libfontmanager.so
-7f6469f58000-7f646a05a000 ---p 0007e000 fe:00 139293                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libfontmanager.so
-7f646a05a000-7f646a070000 rwxp 00080000 fe:00 139293                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libfontmanager.so
-7f646a070000-7f646a081000 rwxp 00000000 00:00 0 
-7f646a081000-7f646a086000 r-xp 00000000 fe:00 55927                      /usr/lib/libXdmcp.so.6.0.0
-7f646a086000-7f646a285000 ---p 00005000 fe:00 55927                      /usr/lib/libXdmcp.so.6.0.0
-7f646a285000-7f646a286000 rwxp 00004000 fe:00 55927                      /usr/lib/libXdmcp.so.6.0.0
-7f646a286000-7f646a2a1000 r-xp 00000000 fe:00 55929                      /usr/lib/libxcb.so.1.0.0
-7f646a2a1000-7f646a4a1000 ---p 0001b000 fe:00 55929                      /usr/lib/libxcb.so.1.0.0
-7f646a4a1000-7f646a4a2000 rwxp 0001b000 fe:00 55929                      /usr/lib/libxcb.so.1.0.0
-7f646a4a2000-7f646a4a3000 r-xp 00000000 fe:00 55931                      /usr/lib/libxcb-xlib.so.0.0.0
-7f646a4a3000-7f646a6a2000 ---p 00001000 fe:00 55931                      /usr/lib/libxcb-xlib.so.0.0.0
-7f646a6a2000-7f646a6a3000 rwxp 00000000 fe:00 55931                      /usr/lib/libxcb-xlib.so.0.0.0
-7f646a6a3000-7f646a6b9000 r-xp 00000000 fe:00 52981                      /usr/lib/libICE.so.6.3.0
-7f646a6b9000-7f646a8b9000 ---p 00016000 fe:00 52981                      /usr/lib/libICE.so.6.3.0
-7f646a8b9000-7f646a8ba000 rwxp 00016000 fe:00 52981                      /usr/lib/libICE.so.6.3.0
-7f646a8ba000-7f646a8be000 rwxp 00000000 00:00 0 
-7f646a8be000-7f646a8c6000 r-xp 00000000 fe:00 52983                      /usr/lib/libSM.so.6.0.0
-7f646a8c6000-7f646aac5000 ---p 00008000 fe:00 52983                      /usr/lib/libSM.so.6.0.0
-7f646aac5000-7f646aac6000 rwxp 00007000 fe:00 52983                      /usr/lib/libSM.so.6.0.0
-7f646aac6000-7f646aac8000 r-xp 00000000 fe:00 55925                      /usr/lib/libXau.so.6.0.0
-7f646aac8000-7f646acc7000 ---p 00002000 fe:00 55925                      /usr/lib/libXau.so.6.0.0
-7f646acc7000-7f646acc8000 rwxp 00001000 fe:00 55925                      /usr/lib/libXau.so.6.0.0
-7f646acc8000-7f646acd1000 r-xp 00000000 fe:00 55985                      /usr/lib/libXi.so.6.0.0
-7f646acd1000-7f646aed0000 ---p 00009000 fe:00 55985                      /usr/lib/libXi.so.6.0.0
-7f646aed0000-7f646aed1000 rwxp 00008000 fe:00 55985                      /usr/lib/libXi.so.6.0.0
-7f646aed1000-7f646afd7000 r-xp 00000000 fe:00 55933                      /usr/lib/libX11.so.6.2.0
-7f646afd7000-7f646b1d7000 ---p 00106000 fe:00 55933                      /usr/lib/libX11.so.6.2.0
-7f646b1d7000-7f646b1dd000 rwxp 00106000 fe:00 55933                      /usr/lib/libX11.so.6.2.0
-7f646b1dd000-7f646b238000 r-xp 00000000 fe:00 52985                      /usr/lib/libXt.so.6.0.0
-7f646b238000-7f646b437000 ---p 0005b000 fe:00 52985                      /usr/lib/libXt.so.6.0.0
-7f646b437000-7f646b43d000 rwxp 0005a000 fe:00 52985                      /usr/lib/libXt.so.6.0.0
-7f646b43d000-7f646b43e000 rwxp 00000000 00:00 0 
-7f646b43e000-7f646b44e000 r-xp 00000000 fe:00 55935                      /usr/lib/libXext.so.6.4.0
-7f646b44e000-7f646b64e000 ---p 00010000 fe:00 55935                      /usr/lib/libXext.so.6.4.0
-7f646b64e000-7f646b64f000 rwxp 00010000 fe:00 55935                      /usr/lib/libXext.so.6.4.0
-7f646b64f000-7f646b654000 r-xp 00000000 fe:00 204935                     /usr/lib/libXtst.so.6.1.0
-7f646b654000-7f646b854000 ---p 00005000 fe:00 204935                     /usr/lib/libXtst.so.6.1.0
-7f646b854000-7f646b855000 rwxp 00005000 fe:00 204935                     /usr/lib/libXtst.so.6.1.0
-7f646b856000-7f646b85d000 r-xs 00000000 fe:00 868935                     /var/cache/fontconfig/089dead882dea3570ffc31a9898cfb69-le64.cache-3
-7f646b85d000-7f646b870000 r-xs 00000000 fe:00 868859                     /var/cache/fontconfig/e13b20fdb08344e0e664864cc2ede53d-le64.cache-3
-7f646b870000-7f646bad7000 r-xp 00000000 fe:00 139273                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/motif21/libmawt.so
-7f646bad7000-7f646bbd8000 ---p 00267000 fe:00 139273                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/motif21/libmawt.so
-7f646bbd8000-7f646bc2c000 rwxp 00268000 fe:00 139273                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/motif21/libmawt.so
-7f646bc2c000-7f646bc2f000 rwxp 00000000 00:00 0 
-7f646bc2f000-7f646bcc1000 r-xp 00000000 fe:00 139300                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libawt.so
-7f646bcc1000-7f646bdc0000 ---p 00092000 fe:00 139300                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libawt.so
-7f646bdc0000-7f646bdd9000 rwxp 00091000 fe:00 139300                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libawt.so
-7f646bdd9000-7f646bdfe000 rwxp 00000000 00:00 0 
-7f646bdfe000-7f646bdff000 ---p 00000000 00:00 0 
-7f646bdff000-7f646beff000 rwxp 00000000 00:00 0 
-7f646beff000-7f646bf02000 ---p 00000000 00:00 0 
-7f646bf02000-7f646c000000 rwxp 00000000 00:00 0 
-7f646c000000-7f646c21c000 rwxp 00000000 00:00 0 
-7f646c21c000-7f6470000000 ---p 00000000 00:00 0 
-7f6470002000-7f6470005000 r-xs 00000000 fe:00 868942                     /var/cache/fontconfig/da1bd5ca8443ffe22927a23ce431d198-le64.cache-3
-7f6470005000-7f6470008000 ---p 00000000 00:00 0 
-7f6470008000-7f6470106000 rwxp 00000000 00:00 0 
-7f6470106000-7f6470109000 ---p 00000000 00:00 0 
-7f6470109000-7f6470207000 rwxp 00000000 00:00 0 
-7f6470207000-7f647020a000 ---p 00000000 00:00 0 
-7f647020a000-7f6470308000 rwxp 00000000 00:00 0 
-7f6470308000-7f6470502000 r-xp 00000000 fe:00 67296                      /usr/lib/locale/locale-archive
-7f6470502000-7f6470505000 ---p 00000000 00:00 0 
-7f6470505000-7f6470603000 rwxp 00000000 00:00 0 
-7f6470603000-7f6470606000 ---p 00000000 00:00 0 
-7f6470606000-7f6470704000 rwxp 00000000 00:00 0 
-7f6470704000-7f6470705000 ---p 00000000 00:00 0 
-7f6470705000-7f6470838000 rwxp 00000000 00:00 0 
-7f6470838000-7f64709c9000 r-xs 02f2d000 fe:00 132439                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/rt.jar
-7f64709c9000-7f64709ca000 ---p 00000000 00:00 0 
-7f64709ca000-7f6470aca000 rwxp 00000000 00:00 0 
-7f6470aca000-7f6470acb000 ---p 00000000 00:00 0 
-7f6470acb000-7f6470bd6000 rwxp 00000000 00:00 0 
-7f6470bd6000-7f6470bf5000 rwxp 00000000 00:00 0 
-7f6470bf5000-7f6470c09000 rwxp 00000000 00:00 0 
-7f6470c09000-7f6470d35000 rwxp 00000000 00:00 0 
-7f6470d35000-7f6470d40000 rwxp 00000000 00:00 0 
-7f6470d40000-7f6470d5f000 rwxp 00000000 00:00 0 
-7f6470d5f000-7f6470d73000 rwxp 00000000 00:00 0 
-7f6470d73000-7f6470e9f000 rwxp 00000000 00:00 0 
-7f6470e9f000-7f6470ea9000 rwxp 00000000 00:00 0 
-7f6470ea9000-7f6470f3f000 rwxp 00000000 00:00 0 
-7f6470f3f000-7f6472400000 rwxp 00000000 00:00 0 
-7f6472400000-7f6476340000 rwxp 00000000 00:00 0 
-7f6476340000-7f6478b40000 rwxp 00000000 00:00 0 
-7f6478b40000-7f649e340000 rwxp 00000000 00:00 0 
-7f649e340000-7f649f740000 rwxp 00000000 00:00 0 
-7f649f740000-7f64b2340000 rwxp 00000000 00:00 0 
-7f64b2340000-7f64b2342000 r-xs 00000000 fe:00 868941                     /var/cache/fontconfig/ddd4086aec35a5275babba44bb759c3c-le64.cache-3
-7f64b2342000-7f64b25b2000 rwxp 00000000 00:00 0 
-7f64b25b2000-7f64b5342000 rwxp 00000000 00:00 0 
-7f64b5342000-7f64b5350000 r-xp 00000000 fe:00 139289                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libzip.so
-7f64b5350000-7f64b5452000 ---p 0000e000 fe:00 139289                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libzip.so
-7f64b5452000-7f64b5455000 rwxp 00010000 fe:00 139289                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libzip.so
-7f64b5455000-7f64b5456000 rwxp 00000000 00:00 0 
-7f64b5456000-7f64b547f000 r-xp 00000000 fe:00 139294                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libjava.so
-7f64b547f000-7f64b557e000 ---p 00029000 fe:00 139294                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libjava.so
-7f64b557e000-7f64b5585000 rwxp 00028000 fe:00 139294                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libjava.so
-7f64b5585000-7f64b5592000 r-xp 00000000 fe:00 139276                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libverify.so
-7f64b5592000-7f64b5691000 ---p 0000d000 fe:00 139276                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libverify.so
-7f64b5691000-7f64b5694000 rwxp 0000c000 fe:00 139276                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/libverify.so
-7f64b5694000-7f64b569f000 r-xp 00000000 fe:00 1081816                    /lib/libnss_files-2.10.2.so
-7f64b569f000-7f64b589e000 ---p 0000b000 fe:00 1081816                    /lib/libnss_files-2.10.2.so
-7f64b589e000-7f64b589f000 r-xp 0000a000 fe:00 1081816                    /lib/libnss_files-2.10.2.so
-7f64b589f000-7f64b58a0000 rwxp 0000b000 fe:00 1081816                    /lib/libnss_files-2.10.2.so
-7f64b58a0000-7f64b58aa000 r-xp 00000000 fe:00 1081798                    /lib/libnss_nis-2.10.2.so
-7f64b58aa000-7f64b5aa9000 ---p 0000a000 fe:00 1081798                    /lib/libnss_nis-2.10.2.so
-7f64b5aa9000-7f64b5aaa000 r-xp 00009000 fe:00 1081798                    /lib/libnss_nis-2.10.2.so
-7f64b5aaa000-7f64b5aab000 rwxp 0000a000 fe:00 1081798                    /lib/libnss_nis-2.10.2.so
-7f64b5aab000-7f64b5ab2000 r-xp 00000000 fe:00 1081787                    /lib/libnss_compat-2.10.2.so
-7f64b5ab2000-7f64b5cb1000 ---p 00007000 fe:00 1081787                    /lib/libnss_compat-2.10.2.so
-7f64b5cb1000-7f64b5cb2000 r-xp 00006000 fe:00 1081787                    /lib/libnss_compat-2.10.2.so
-7f64b5cb2000-7f64b5cb3000 rwxp 00007000 fe:00 1081787                    /lib/libnss_compat-2.10.2.so
-7f64b5cb3000-7f64b5cc8000 r-xp 00000000 fe:00 1081813                    /lib/libnsl-2.10.2.so
-7f64b5cc8000-7f64b5ec7000 ---p 00015000 fe:00 1081813                    /lib/libnsl-2.10.2.so
-7f64b5ec7000-7f64b5ec8000 r-xp 00014000 fe:00 1081813                    /lib/libnsl-2.10.2.so
-7f64b5ec8000-7f64b5ec9000 rwxp 00015000 fe:00 1081813                    /lib/libnsl-2.10.2.so
-7f64b5ec9000-7f64b5ecb000 rwxp 00000000 00:00 0 
-7f64b5ecb000-7f64b5ed2000 r-xp 00000000 fe:00 139313                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/native_threads/libhpi.so
-7f64b5ed2000-7f64b5fd3000 ---p 00007000 fe:00 139313                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/native_threads/libhpi.so
-7f64b5fd3000-7f64b5fd5000 rwxp 00008000 fe:00 139313                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/native_threads/libhpi.so
-7f64b5fd5000-7f64b5fd6000 rwxp 00000000 00:00 0 
-7f64b5fd6000-7f64b5fdd000 r-xp 00000000 fe:00 1081806                    /lib/librt-2.10.2.so
-7f64b5fdd000-7f64b61dc000 ---p 00007000 fe:00 1081806                    /lib/librt-2.10.2.so
-7f64b61dc000-7f64b61dd000 r-xp 00006000 fe:00 1081806                    /lib/librt-2.10.2.so
-7f64b61dd000-7f64b61de000 rwxp 00007000 fe:00 1081806                    /lib/librt-2.10.2.so
-7f64b61de000-7f64b61e1000 ---p 00000000 00:00 0 
-7f64b61e1000-7f64b62df000 rwxp 00000000 00:00 0                          [threadstack:000fd210]
-7f64b62df000-7f64b6360000 r-xp 00000000 fe:00 1081808                    /lib/libm-2.10.2.so
-7f64b6360000-7f64b655f000 ---p 00081000 fe:00 1081808                    /lib/libm-2.10.2.so
-7f64b655f000-7f64b6560000 r-xp 00080000 fe:00 1081808                    /lib/libm-2.10.2.so
-7f64b6560000-7f64b6561000 rwxp 00081000 fe:00 1081808                    /lib/libm-2.10.2.so
-7f64b6561000-7f64b6bee000 r-xp 00000000 fe:00 139284                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/server/libjvm.so
-7f64b6bee000-7f64b6ced000 ---p 0068d000 fe:00 139284                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/server/libjvm.so
-7f64b6ced000-7f64b6e3e000 rwxp 0068c000 fe:00 139284                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/server/libjvm.so
-7f64b6e3e000-7f64b6e7b000 rwxp 00000000 00:00 0 
-7f64b6e7b000-7f64b6fc5000 r-xp 00000000 fe:00 1081815                    /lib/libc-2.10.2.so
-7f64b6fc5000-7f64b71c5000 ---p 0014a000 fe:00 1081815                    /lib/libc-2.10.2.so
-7f64b71c5000-7f64b71c9000 r-xp 0014a000 fe:00 1081815                    /lib/libc-2.10.2.so
-7f64b71c9000-7f64b71ca000 rwxp 0014e000 fe:00 1081815                    /lib/libc-2.10.2.so
-7f64b71ca000-7f64b71cf000 rwxp 00000000 00:00 0 
-7f64b71cf000-7f64b71d1000 r-xp 00000000 fe:00 1081818                    /lib/libdl-2.10.2.so
-7f64b71d1000-7f64b73d1000 ---p 00002000 fe:00 1081818                    /lib/libdl-2.10.2.so
-7f64b73d1000-7f64b73d2000 r-xp 00002000 fe:00 1081818                    /lib/libdl-2.10.2.so
-7f64b73d2000-7f64b73d3000 rwxp 00003000 fe:00 1081818                    /lib/libdl-2.10.2.so
-7f64b73d3000-7f64b73e9000 r-xp 00000000 fe:00 1081817                    /lib/libpthread-2.10.2.so
-7f64b73e9000-7f64b75e9000 ---p 00016000 fe:00 1081817                    /lib/libpthread-2.10.2.so
-7f64b75e9000-7f64b75ea000 r-xp 00016000 fe:00 1081817                    /lib/libpthread-2.10.2.so
-7f64b75ea000-7f64b75eb000 rwxp 00017000 fe:00 1081817                    /lib/libpthread-2.10.2.so
-7f64b75eb000-7f64b75ef000 rwxp 00000000 00:00 0 
-7f64b75ef000-7f64b760c000 r-xp 00000000 fe:00 1081812                    /lib/ld-2.10.2.so
-7f64b760c000-7f64b7620000 r-xs 00000000 fe:00 868745                     /var/cache/fontconfig/865f88548240fee46819705c6468c165-le64.cache-3
-7f64b7620000-7f64b762a000 rwxp 00000000 00:00 0 
-7f64b762a000-7f64b76e0000 rwxp 00000000 00:00 0 
-7f64b76e0000-7f64b76e2000 rwxp 00000000 00:00 0 
-7f64b76e2000-7f64b76e9000 r-xp 00000000 fe:00 139282                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/jli/libjli.so
-7f64b76e9000-7f64b77ea000 ---p 00007000 fe:00 139282                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/jli/libjli.so
-7f64b77ea000-7f64b77ec000 rwxp 00008000 fe:00 139282                     /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/jli/libjli.so
-7f64b77ec000-7f64b77ed000 rwxp 00000000 00:00 0 
-7f64b77ed000-7f64b77ee000 r-xs 00000000 fe:00 868940                     /var/cache/fontconfig/4794a0821666d79190d59a36cb4f44b5-le64.cache-3
-7f64b77ee000-7f64b77f0000 r-xs 00000000 fe:00 868938                     /var/cache/fontconfig/de9486f0b47a4d768a594cb4198cb1c6-le64.cache-3
-7f64b77f0000-7f64b77f4000 r-xs 00000000 fe:00 868936                     /var/cache/fontconfig/6386b86020ecc1ef9690bb720a13964f-le64.cache-3
-7f64b77f4000-7f64b77f7000 r-xs 00000000 fe:00 868883                     /var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-le64.cache-3
-7f64b77f7000-7f64b77fa000 r-xs 00000000 fe:02 8841462                    /home/apoikos/.fontconfig/2584a6f7bcc9e47f9ed9a4a84c8c76e5-le64.cache-3
-7f64b77fa000-7f64b77fc000 r-xs 0000e000 fe:02 3034507                    /home/apoikos/hg/grnet/static/javavnc/VncViewer.jar
-7f64b77fc000-7f64b77fe000 r-xs 0000e000 fe:02 3034507                    /home/apoikos/hg/grnet/static/javavnc/VncViewer.jar
-7f64b77fe000-7f64b7806000 rwxs 00000000 fe:00 770054                     /tmp/hsperfdata_apoikos/1450
-7f64b7806000-7f64b7807000 rwxp 00000000 00:00 0 
-7f64b7807000-7f64b7808000 r-xp 00000000 00:00 0 
-7f64b7808000-7f64b780b000 rwxp 00000000 00:00 0 
-7f64b780b000-7f64b780c000 r-xp 0001c000 fe:00 1081812                    /lib/ld-2.10.2.so
-7f64b780c000-7f64b780d000 rwxp 0001d000 fe:00 1081812                    /lib/ld-2.10.2.so
-7fffd5581000-7fffd5596000 rwxp 00000000 00:00 0                          [stack]
-7fffd55ff000-7fffd5600000 r-xp 00000000 00:00 0                          [vdso]
-ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
-
-VM Arguments:
-java_command: VncViewer.jar HOST hn-03.be1.grnet.gr PORT 11038
-Launcher Type: SUN_STANDARD
-
-Environment Variables:
-PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/home/apoikos/scripts:/opt/openoffice.org3/program:/home/apoikos/scripts:/home/apoikos/workspaces:/opt/openoffice.org3/program
-USERNAME=apoikos
-LD_LIBRARY_PATH=/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64/server:/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/amd64:/usr/lib/jvm/java-6-sun-1.6.0.12/jre/../lib/amd64
-SHELL=/bin/zsh
-DISPLAY=:0.0
-
-Signal Handlers:
-SIGSEGV: [libjvm.so+0x5fcd20], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGBUS: [libjvm.so+0x5fcd20], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGFPE: [libjvm.so+0x4e0eb0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGPIPE: [libjvm.so+0x4e0eb0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGXFSZ: [libjvm.so+0x4e0eb0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGILL: [libjvm.so+0x4e0eb0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGUSR1: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
-SIGUSR2: [libjvm.so+0x4e35d0], sa_mask[0]=0x00000000, sa_flags=0x10000004
-SIGHUP: [libjvm.so+0x4e3320], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGINT: [libjvm.so+0x4e3320], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGTERM: [libjvm.so+0x4e3320], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-SIGQUIT: [libjvm.so+0x4e3320], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
-
-
----------------  S Y S T E M  ---------------
-
-OS:5.0.4
-
-uname:Linux 2.6.32-trunk-amd64 #1 SMP Sun Jan 10 22:40:40 UTC 2010 x86_64
-libc:glibc 2.10.2 NPTL 2.10.2 
-rlimit: STACK 8192k, CORE 0k, NPROC 30634, NOFILE 1024, AS infinity
-load average:0.04 0.04 0.01
-
-CPU:total 2 (2 cores per cpu, 1 threads per core) family 6 model 7 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3
-
-Memory: 4k page, physical 3930156k(32944k free), swap 3903480k(3895184k free)
-
-vm_info: Java HotSpot(TM) 64-Bit Server VM (11.2-b01) for linux-amd64 JRE (1.6.0_12-b04), built on Jan 17 2009 01:04:06 by "java_re" with gcc 3.2.2 (SuSE Linux)
-
-time: Mon Mar  8 14:20:21 2010
-elapsed time: 0 seconds
-
diff --git a/static/logo.dist.png b/static/logo.dist.png
new file mode 100644 (file)
index 0000000..da27a1e
Binary files /dev/null and b/static/logo.dist.png differ
similarity index 100%
rename from static/grnet_logo.png
rename to static/logo.png
diff --git a/static/m_grnet_logo.png b/static/m_grnet_logo.png
deleted file mode 100644 (file)
index d7d9c9a..0000000
Binary files a/static/m_grnet_logo.png and /dev/null differ
diff --git a/static/shib_login.dist.png b/static/shib_login.dist.png
new file mode 100644 (file)
index 0000000..3a8510d
Binary files /dev/null and b/static/shib_login.dist.png differ
diff --git a/static/vncviewer.jar b/static/vncviewer.jar
deleted file mode 100644 (file)
index 9916d39..0000000
Binary files a/static/vncviewer.jar and /dev/null differ
diff --git a/templates/application_list.html b/templates/application_list.html
deleted file mode 100644 (file)
index 845f2da..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-{% extends "base.html" %}
-{% load i18n %}
-{% block title %}{% trans "Application submitted" %}{% endblock %}
-{% block content %}
-<div align="center">
-{% if pending %}
-<h2>{% trans "Pending applications" %}</h2>
-<table>
-<tr><th>{% trans "Hostname" %}</th><th>{% trans "User" %}</th><th>{% trans "Memory" %}</th><th>{% trans "vCPUs" %}</th><th>{% trans "Network" %}</th><th>{% trans "Filed" %}</th></tr>
-{% for app in pending %}
-<tr><td><a href="{% url application-review app.pk %}">{{ app.hostname }}</a></td><td>{{ app.applicant }}</td><td>{{ app.memory }}</td><td>{{ app.vcpus }}</td><td>{{ app.network|default_if_none:"&mdash;" }}</td><td>{{ app.filed|date }}</td></tr>
-{% endfor %}
-</table>
-{% endif %}
-
-<h2>{% trans "Completed applications" %}</h2>
-<table>
-<tr><th>{% trans "Hostname" %}</th><th>{% trans "User" %}</th><th>{% trans "Memory" %}</th><th>{% trans "vCPUs" %}</th><th>{% trans "Network" %}</th><th>{% trans "Filed" %}</th></tr>
-{% for app in completed %}
-<tr><td><a href="{% url application-review app.pk %}">{{ app.hostname }}</a></td><td>{{ app.applicant }}</td><td>{{ app.memory }}</td><td>{{ app.vcpus }}</td><td>{{ app.network|default_if_none:"&mdash;" }}</td><td>{{ app.filed|date }}</td></tr>
-{% endfor %}
-</table>
-</div>
-{% endblock %}
index 7dabbcc..d889d04 100644 (file)
@@ -256,11 +256,29 @@ div.roundbox, #portsacc, #id_comments{
                     </p>
                 </div>
             </fieldset>
+            {% if user.is_superuser %}
+            <fieldset>
+                <legend>
+                    {% trans "Admin Options" %}
+                </legend>
+                 <div class="roundbox">
+                    {{ form.applier.label_tag }}{{ form.applier }}
+                    <br>
+                    {% if form.applier.errors %}
+                    <br>
+                    <p class="error" style="clear:both;">
+                        {{ form.applier.errors|join:", " }}
+                    </p>
+                    {% endif %}
+                </div>
+                </fieldset>
+                {% else %}
+                 <input type="hidden" id="id_applier" name="applier" value="{{applier}}"/>
+                {% endif %}
             <fieldset>
                 <legend>
                     {% trans "Rule Match Conditions" %}
                 </legend>
-                <input type="hidden" id="id_applier" name="applier" value="{{applier}}"/>
                 <div class="roundbox">
                     {{ form.source.label_tag }}{{ form.source }}<img src="/static/threat_source.png"/> {% if form.source.errors %}
                     <br>
index f1fb766..078ea50 100644 (file)
        <div id="main">
                        <div id="header">
                                <a class="grnetlogo" href="{% url group-routes %}">
-                                       <img class="logoimg" src="/static/grnet_logo.png">
+                                       <img class="logoimg" src="/static/logo.png">
                                </a>
                                <div id="title">
                                        <a href="{% url group-routes %}">Firewall on Demand</a>
                                </div>
                                <div class="loginform">
                                        <div id="formcontent">
+                                       {% block menublock %}
                                                {% if user.is_authenticated %}
                                                <span class="topmenuuser">{% trans "Welcome" %} <strong>{{user}}</strong></span>
                                                {% endif %}
@@ -59,6 +60,7 @@
                                                {% else %}
                                                <span class="topmenuaction"><a href="{% url login %}">{% trans "Shibboleth Login" %}</a></span>
                                                {% endif %}
+                                               {% endblock %}
                                        </div>
                                        
                                </div>
                                {% endblock %}
 
                        </div>
-                       
-                       <div id="footer">
-                       {% if user.is_authenticated %}
-                       {% trans "If you have any questions or need help, contact GRNET Helpdesk at <a href='mailto:helpdesk@grnet.gr'>helpdesk@grnet.gr</a> or 800-11-47638." %}<br />
-                       {% endif %}
-                       <a href="http://www.grnet.gr">{% trans "GRNET" %} NOC</a> | <a href="{% url getinfo %}">{% trans "Info" %}</a> | <a href="{% url gettos %}">{% trans "Service Terms" %}</a>
-                       </div>
+                       {% block footerblock %}
+                               {% include "footer.html" %}
+                       {% endblock %}
        </div>
 </body>
 </html>
index d179fd4..6617237 100644 (file)
@@ -1,32 +1,26 @@
+{% extends "base.html" %}
 {% load i18n %}
-<html>
-<head>
-<title>{% if error %}{% if inactive %}{% trans "Activation Pending" %}{% else %}{% trans "Error" %}{% endif %}{% endif %}</title>
-<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
-<META HTTP-EQUIV="Expires" CONTENT="-1">
-<script src="/static/js/jquery.min.js" type="text/javascript"></script>
-<link rel="stylesheet" type="text/css" href="/static/css/base.css">
-<link rel="stylesheet" type="text/css" href="/static/css/smoothness/jquery-ui-1.8.13.custom.css">
-<script type="text/javascript" src="/static/js/jquery-ui-1.8.12.custom.min.js"></script>
-<script type="text/javascript" src="/static/js/jquery.tooltip.min.js"></script>
 
-<script type="text/javascript">
-$(document).ready(function(){
-       $(".relogin").tooltip({ position: "bottom center", opacity: 0.7});
-       });
-</script>
-<style type="text/css">
+{% block title %}{% if error %}{% if inactive %}{% trans "Activation Pending" %}{% else %}{% trans "Error" %}{% endif %}{% endif %}{% endblock %}
+
+{% block extrahead %}
+       <script type="text/javascript">
+       $(document).ready(function(){
+               $(".relogin").tooltip({ position: "bottom center", opacity: 0.7});
+               });
+       </script>
+       <style type="text/css">
 
-    .tooltip {
-        display: none;
-        background: transparent url(/static/black_arrow_updown.png);
-        font-size: 12px;
-        height: 70px;
-        width: 160px;
-        padding: 25px;
-               padding-top: 30px;
-        color: #fff;
-    }
+           .tooltip {
+               display: none;
+               background: transparent url(/static/black_arrow_updown.png);
+               font-size: 12px;
+               height: 70px;
+               width: 160px;
+               padding: 25px;
+                       padding-top: 30px;
+               color: #fff;
+           }
 
 </style>
 <script type="text/javascript">
@@ -37,87 +31,46 @@ $(document).ready(function(){
        }
 
 </script>
-</head>
-
-
+{% endblock %}
 
-<body>
-       <div id="main">
-                       <div id="header">
-                               <a class="grnetlogo" href="{% url group-routes %}">
-                                       <img class="logoimg" src="/static/grnet_logo.png">
-                               </a>
-                               <div id="title">
-                                       <a href="{% url group-routes %}">Firewall on Demand</a>
-                               </div>
-                               <div class="loginform">
-                                       <div id="formcontent">
-                                               {% if user.is_authenticated %}
-                                               <span class="topmenuuser">{% trans "Welcome" %} <strong>{{user}}</strong></span>
-                                               {% endif %}
-                                               <span {% if user.is_authenticated %}class="topmenuaction"{% else %}class="topmenuuser"{% endif %} >
-                                                               <form action="{% url django.views.i18n.set_language %}" method="post" style="display:inline;" id="langform">
-                                                               {% csrf_token %}
-                                                               <input name="next" type="hidden" value="{{ next }}" />
-                                                               <input id="langsel" name="language" type="hidden" value="" />
-                                                               {% for lang in LANGUAGES %}<a class="select_lang" href="#" onclick="setlang('{{ lang.0 }}'); return false;" title="{{lang.1}}">{% ifnotequal LANGUAGE_CODE lang.0 %}<font style="font-weight:normal;">{% endifnotequal %}{% trans lang.1 %}{% ifnotequal LANGUAGE_CODE lang.0 %}</font>{% endifnotequal %}</a>{% if not forloop.last %} -{% endif %}
-                                                               {% endfor %}
-                                                       </form>
-                                               </span>
-                                               {% if user.is_authenticated %}
-                                               <span class="topmenuaction"><a href="{% url user-profile %}">{% trans "My profile" %}</a></span>
-{% if user.is_superuser %}
-                                               <span class="topmenuaction"><a href="{% url admin:index %}">{% trans "Admin" %}</a></span>
-{% endif %}
-                                               <span class="topmenuaction"><a href="{% url logout %}">{% trans "Logout" %}</a></span>
-                                               {% else %}
-                                               <span class="topmenuaction relogin" title='{% trans "After clicking Retry Login, it is strongly suggested to close your browser and visit the page again" %}'><a href="{% url logout %}">{% trans "Retry Login" %}</a></span>
-                                               {% endif %}
-                                       </div>
-                                       
-                               </div>
-                       </div>
-                       <div id="content">
-                               {% block brcrmb_container %}
-                               <div class="info_content_title">{% if user.is_authenticated %}<a href="{% url group-routes %}">{% trans "My routes" %}</a>{% endif %}
-                               {% block breadcrumbs %}{% endblock %}
-                               </div>
-                               
-                               {% endblock %}
-                               {% block content %}
-                               {% if error %}{% if inactive %}<h2>{% trans "Activation Pending" %}</h2>{% else %}<h2>{% trans "Error" %}</h2>{% endif %}{% endif %}
-                               <div>
-                               {% if missing_attributes %}
-                               <p>{% trans "One or more required shibboleth attributes were not released towards this service" %}</p>
-                               {% endif %}
-                               <p {% if not inactive %}style="color: red;"{% endif %}>{% autoescape off %}{{error}}{% endautoescape %}</p>
-                               {% if missing_attributes %}
-                               <p>
-                               {% trans "Required shibboleth attributes" %}:<br>
-                               <ul>
-                               <li>HTTP_EPPN</li>
-                               <li>HTTP_SHIB_HOMEORGANIZATION</li>
-                               <li>HTTP_SHIB_INETORGPERSON_MAIL</li>
-                               <li>An appropriate HTTP_SHIB_EP_ENTITLEMENT</li>
-                               </ul>
-                               {% trans "Optional" %}:
-                               <ul>
-                               <li>HTTP_SHIB_INETORGPERSON_GIVENNAME</li>
-                               <li>HTTP_SHIB_PERSON_SURNAME</li>
-                               </ul>
-                               </p>
-                               {% endif %}
-                               </div>
 
-                               {% endblock %}
+{% block menublock %}
+       {% if user.is_authenticated %}
+               <span class="topmenuuser">{% trans "Welcome" %} <strong>{{user}}</strong></span>
+       {% endif %}
+       {% if user.is_authenticated %}
+       <span class="topmenuaction"><a href="{% url user-profile %}">{% trans "My profile" %}</a></span>
+       {% if user.is_superuser %}
+               <span class="topmenuaction"><a href="{% url admin:index %}">{% trans "Admin" %}</a></span>
+       {% endif %}
+       <span class="topmenuaction"><a href="{% url logout %}">{% trans "Logout" %}</a></span>
+       {% else %}
+       <span class="topmenuaction relogin" title="After clicking Retry Login, it is strongly suggested to close your browser and visit the page again"><a href="{% url logout %}">{% trans "Retry Login" %}</a></span>
+       {% endif %}
+{% endblock %}
 
-                       </div>
-                       <div id="footer">
-                       {% if user.is_authenticated %}
-                       {% trans "If you have any questions or need help, contact GRNET Helpdesk at <a href='mailto:helpdesk@grnet.gr'>helpdesk@grnet.gr</a> or 800-11-47638." %}<br />
-                       {% endif %}
-                       <a href="http://www.grnet.gr">{% trans "GRNET" %} NOC</a> | <a href="/about/info/">{% trans "Info" %}</a> | <a href="/about/terms-of-service">{% trans "Service Terms" %}</a>
-                       </div>
+{% block content %}
+       {% if error %}{% if inactive %}<h2>{% trans "Activation Pending" %}</h2>{% else %}<h2>{% trans "Error" %}</h2>{% endif %}{% endif %}
+       <div>
+       {% if missing_attributes %}
+       <p>{% trans "One or more required shibboleth attributes were not released towards this service" %}</p>
+       {% endif %}
+       <p {% if not inactive %}style="color: red;"{% endif %}>{% autoescape off %}{{error}}{% endautoescape %}</p>
+       {% if missing_attributes %}
+       <p>
+       {% trans "Required shibboleth attributes" %}:<br>
+       <ul>
+       <li>HTTP_EPPN</li>
+       <li>HTTP_SHIB_HOMEORGANIZATION</li>
+       <li>HTTP_SHIB_INETORGPERSON_MAIL</li>
+       <li>An appropriate HTTP_SHIB_EP_ENTITLEMENT</li>
+       </ul>
+       {% trans "Optional" %}:
+       <ul>
+       <li>HTTP_SHIB_INETORGPERSON_GIVENNAME</li>
+       <li>HTTP_SHIB_PERSON_SURNAME</li>
+       </ul>
+       </p>
+       {% endif %}
        </div>
-</body>
-</html>
+{% endblock %}
diff --git a/templates/footer.html b/templates/footer.html
new file mode 100644 (file)
index 0000000..a8fc3c9
--- /dev/null
@@ -0,0 +1,8 @@
+{% load i18n %}
+<div id="footer">
+       {% if user.is_authenticated %}
+       {% trans "If you have any questions or need help, contact GRNET Helpdesk at <a href='mailto:helpdesk@grnet.gr'>helpdesk@grnet.gr</a> or 800-11-47638." %}<br />
+       {% endif %}
+       <a href="http://www.grnet.gr">{% trans "GRNET" %} NOC</a> | <a href="{% url getinfo %}">{% trans "Info" %}</a> | <a href="{% url gettos %}">{% trans "Service Terms" %}</a>
+       <p style="text-align: center;"><img width="46" height="40" border="0" class="image image-img_assist_custom-46x40 " src="http://noc.grnet.gr/sites/default/files/images/image_PSSYGK.img_assist_custom-46x40.png" alt="Flag ΨΣ" title="Flag ΨΣ"> <img width="49" height="40" border="0" class="image image-img_assist_custom-49x40 " src="http://noc.grnet.gr/sites/default/files/images/image_EEflag.img_assist_custom-49x40.png" alt="EU flag" title="EU flag"> <img width="90" height="40" border="0" class="image image-img_assist_custom-90x40 " src="http://noc.grnet.gr/sites/default/files/images/image_YPDBMTH.img_assist_custom-90x40.png" alt="Flag ΥΠΔΒΜΘ" title="Flag ΥΠΔΒΜΘ"><img width="67" height="40" border="0" class="image image-img_assist_custom-67x40 " src="http://noc.grnet.gr/sites/default/files/images/image_ESPA.img_assist_custom-67x40.png" alt="ESPA" title="ESPA"></p>
+</div>
index 8518579..f705ac9 100644 (file)
@@ -2,6 +2,7 @@
 {% load i18n %}
 
 {% block title %}{% trans "My profile" %}{% endblock %}
+{% block breadcrumbs %}:: {% trans "My profile" %}{% endblock %}
 {% block content %}
 <h3>{% trans "My profile" %}</h3>
 
        <strong>{% trans "First name" %}:</strong> {{user.first_name}} <br>
        <strong>{% trans "Last name" %}:</strong> {{user.last_name}} <br>
        <strong>{% trans "Email" %}:</strong> {{user.email}}<br>
-       <strong>{% trans "Organization" %}:</strong> {{peer}} <br>
-       <strong>{% trans "Admin Networks" %}:</strong> <br>
-       {% for network in peer.networks.all %}
-       {{network}}<br>
-       {% empty %}
-    <span style="color:red">{% blocktrans %}Ooops! Seems you have no networks associated with your peer. Contact Helpdesk to resolve this issue.{% endblocktrans %}</span>
+       <br>
+       <strong>{% trans "My Networks" %}:</strong><br>
+       <table class="display">
+       <tr>
+       <th class="ui-state-default">{% trans "Organization" %}</th><th class="ui-state-default">{% trans "Networks" %}</th>
+       </tr>
+       {% for peer in peers %}
+               <tr class="gradeC {% if forloop.counter|divisibleby:2 %}even{% else %}odd{% endif %}">
+               <td>{{peer}} </td>
+               <td>
+               {% for network in peer.networks.all %}
+               {{network}}<br>
+               {% empty %}
+           <span style="color:red">{% blocktrans %}Ooops! Seems you have no networks associated with your peer. Contact Helpdesk to resolve this issue.{% endblocktrans %}</span>
+               {% endfor %}
+               </td></tr>
        {% endfor %}
-
+       </table>
 </div>
 
-
-
 {% endblock %}
+
diff --git a/templates/review.html b/templates/review.html
deleted file mode 100644 (file)
index 51a5f9b..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-{% extends "base.html" %}
-{% load i18n %}
-{% block title %}{% trans "Review application" %} #{{ application.pk }}{% endblock %}
-{% block content %}
-<style type="text/css">
-.comments {
-       font-style: italic;
-       max-width: 40em;
-}
-.notice {
-       text-align: center;
-       font-style: italic;
-}
-
-#review {
-       max-width: 50em;
-       margin-left: auto;
-       margin-right: auto;
-}
-</style>
-<script>
-       function set_network(net){
-               $("#id_network").val(net);
-       }
-</script>
-<div align="center" id="review">
-<h2>{% trans "Review application" %} #{{ application.pk }} {% trans "by" %} {{ application.applicant }}</h2>
-<p>{% trans "Submitted" %} {{ application.filed|date }}</p>
-{% if application.is_pending %}
-<form method="POST" id="appform">
-{% csrf_token %}
-<fieldset>
-<legend>{% trans "Instance information" %}</legend>
-<table>
-<tr><th>{{ appform.hostname.label_tag }}</th><td>{{ appform.hostname }}<span class="error">{{ appform.hostname.errors|join:", " }}</span></td></tr>
-<tr><th>{{ appform.memory.label_tag }}</th><td>{{ appform.memory }}<span class="error">{{ appform.memory.errors|join:", " }}</span></td></tr>
-<tr><th>{{ appform.vcpus.label_tag }}</th><td>{{ appform.vcpus }}<span class="error">{{ appform.vcpus.errors|join:", " }}</span></td></tr>
-<tr><th>{{ appform.disk_size.label_tag }}</th><td>{{ appform.disk_size }}<span class="error">{{ appform.disk_size.errors|join:", " }}</span></td></tr>
-<tr><th>{{ appform.organization.label_tag }}</th><td>{{ appform.organization }}<span class="error">{{ appform.organization.errors|join:", " }}</span></td></tr>
-<tr><th>{{ appform.hosts_mail_server.label_tag }}</th><td>{{ appform.hosts_mail_server }}<span class="error">{{ appform.hosts_mail_server.errors|join:", " }}</span></td></tr>
-<tr><th>{{ appform.operating_system.label_tag }}</th><td>{{ appform.operating_system }}<span class="error">{{ appform.operating_system.errors|join:", " }}</span></td></tr>
-</table>
-</fieldset>
-
-{% if application.admin_contact_name %}
-<fieldset>
-<legend>{% trans "Administrative contact" %}</legend>
-<table>
-<tr><th>{% trans "Name" %}</th><td>{{ application.admin_contact_name }}</td></tr>
-<tr><th>{% trans "Email" %}</th><td>{{ application.admin_contact_email }}</td></tr>
-<tr><th>{% trans "Phone" %}</th><td>{{ application.admin_contact_phone }}</td></tr>
-</table>
-</fieldset>
-{% endif %}
-
-<fieldset>
-<legend>{% trans "Comments" %}</legend>
-<div class="comments">
-{{ application.comments }}
-</div>
-</fieldset>
-
-<fieldset>
-<legend>{% trans "Placement" %}</legend>
-{% if application.network %}
-<div class="notice">
-{% trans "The user has requested explicit network placement on" %} {{ application.network }} ({{ application.network.cluster.description }})
-</div>
-{% endif %}
-
-<p>{% trans "Choose either a network, or a cluster from the quick list to use the cluster's default network." %}</p>
-<p>{% trans "Network" %}: {{ appform.network }}</p>
-{% if appform.network.errors %}
-<p class="error">{{ appform.network.errors|join:", " }}</p>
-{% endif %}
-<p>{% for cl in fast_clusters %}<a href="#" onclick="set_network('{{ cl.get_default_network.pk }}');">{{ cl.description }} ({{ cl.slug }})</a> {% if not forloop.last %}| {% endif %}{% endfor %}</p>
-</fieldset>
-
-<fieldset>
-<legend>{% trans "Decision" %}</legend>
-<p>{% trans "Comments to the user" %}:</p>
-{% if appform.admin_comments.errors %}
-<p><span class="error">{{ appform.admin_comments.errors }}</span></p>
-{% endif %}
-<p>{{ appform.admin_comments }}</p>
-<p><input type="submit" value="Accept" name="accept"/> <input type="submit" value="Reject" name="reject" /></p>
-</legend>
-</form>
-{% else %}
-<fieldset>
-<legend>{% trans "Instance information" %}</legend>
-<table>
-<tr><th>{{ appform.hostname.label_tag }}</th><td>{{ application.hostname }}</td></tr>
-<tr><th>{{ appform.memory.label_tag }}</th><td>{{ application.memory }}</td></tr>
-<tr><th>{{ appform.vcpus.label_tag }}</th><td>{{ application.vcpus }}</td></tr>
-<tr><th>{{ appform.disk_size.label_tag }}</th><td>{{ application.disk_size }}</td></tr>
-<tr><th>{{ appform.organization.label_tag }}</th><td>{{ application.organization }}</td></tr>
-<tr><th>{{ appform.hosts_mail_server.label_tag }}</th><td>{{ application.hosts_mail_server }}</td></tr>
-<tr><th>{{ appform.operating_system.label_tag }}</th><td>{{ application.operating_system }}</td></tr>
-</table>
-</fieldset>
-
-{% if application.admin_contact_name %}
-<fieldset>
-<legend>{% trans "Administrative contact" %}</legend>
-<table>
-<tr><th>{% trans "Name" %}</th><td>{{ application.admin_contact_name }}</td></tr>
-<tr><th>{% trans "Email" %}</th><td>{{ application.admin_contact_email }}</td></tr>
-<tr><th>{% trans "Phone" %}</th><td>{{ application.admin_contact_phone }}</td></tr>
-</table>
-</fieldset>
-{% endif %}
-
-<fieldset>
-<legend>{% trans "Comments" %}</legend>
-<div class="comments">
-{{ application.comments }}
-</div>
-</fieldset>
-
-<fieldset>
-<legend>{% trans "Placement" %}</legend>
-<p>{% trans "The instance has been placed on" %} {{ application.network }} ({{ application.cluster.description }})</p>
-</fieldset>
-{% endif %}
-
-</div>
-{% endblock %}
diff --git a/templates/rule_action.txt b/templates/rule_action.txt
new file mode 100644 (file)
index 0000000..d3853a5
--- /dev/null
@@ -0,0 +1,24 @@
+{% load tofqdn %}{% ifequal action 'expires' %}Rule {{route.name}} expires {% ifequal expiration_days 0 %}today{% else%}in {{expiration_days}} day{{ expiration_days|pluralize }}{% endifequal %}{% else %}A new rule {{action}} job has spawned
+
+Peer: {{route.applier.get_profile.peer.peer_name}}
+User {{route.applier.username}} requested the {{action}} of the following rule from address {{address}} {% if address|tofqdn %}({{address|tofqdn}}){% endif %}:
+
+Rule name: {{route.name}}{% endifequal %}
+
+Match Statements:
+* Source Address: {{route.source}}
+* Destination Address: {{route.destination}}
+* Protocol: {% if route.protocol.all %}{% for protocol in route.protocol.all %}{{ protocol }}{% if not forloop.last %}, {% endif %}{% endfor %}{% else %}any{% endif %}
+* Ports: {% if route.sourceport.all or route.destinationport.all %}Defined by source/destination ports{% else %}{% if route.port.all %}{% for port in route.port.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}{% else %}any{% endif %}{% endif %}
+* Source Ports: {% if route.port.all %}same as ports{% else %}{% if route.sourceport.all %}{% for port in route.sourceport.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}{% else %}any{% endif %}{% endif %}
+* Destination Ports: {% if route.port.all %}same as ports{% else %}{% if route.destinationport.all %}{% for port in route.destinationport.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}{% else %}any{% endif %}{% endif %}
+
+Then Actions:
+* Action:{% for then in route.then.all %}{{ then }}{% if not forloop.last %}, {% endif %}{% endfor %}
+
+Comments: {% if route.comments %}{{route.comments}}{% else %}-{% endif %}
+
+Expires: {% ifequal action 'removal' %}Now, removal requested{%else%}{{route.expires}}{% endifequal %}
+
+Rule url: {{url}}
+
diff --git a/templates/rule_add_mail.txt b/templates/rule_add_mail.txt
deleted file mode 100644 (file)
index 8b4ebb1..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-{% load tofqdn %}
-A new rule creation job has spawned
-
-Peer: {{route.applier.get_profile.peer.peer_name}}
-User {{route.applier.username}} requested the application of the following rule from address {{address}} {% if address|tofqdn %}({{address|tofqdn}}){% endif %}:
-
-Match
-* Dst Addr:{{route.destination}}
-* Src Addr: {{route.source}}
-* Protocol:{% for protocol in route.protocol.all %}{{ protocol }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Ports:{% for port in route.ports.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Source Ports:{% for port in route.sourceport.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Destination Ports:{% for port in route.destinationport.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-
-*Then:{% for then in route.then.all %}{{ then }}{% if not forloop.last %}, {% endif %}{% endfor %}
diff --git a/templates/rule_delete_mail.txt b/templates/rule_delete_mail.txt
deleted file mode 100644 (file)
index 70f390e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-{% load tofqdn %}
-A new rule removal job has spawned
-
-Peer: {{route.applier.get_profile.peer.peer_name}}
-User {{route.applier.username}} requested the removal of the following rule from address {{address}} {% if address|tofqdn %}({{address|tofqdn}}){% endif %}:
-
-Match
-* Dst Addr:{{route.destination}}
-* Src Addr: {{route.source}}
-* Protocol:{% for protocol in route.protocol.all %}{{ protocol }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Ports:{% for port in route.ports.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Source Ports:{% for port in route.sourceport.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Destination Ports:{% for port in route.destinationport.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-
-*Then:{% for then in route.then.all %}{{ then }}{% if not forloop.last %}, {% endif %}{% endfor %}
diff --git a/templates/rule_edit_mail.txt b/templates/rule_edit_mail.txt
deleted file mode 100644 (file)
index cb325b2..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-{% load tofqdn %}
-A new rule edit job has spawned
-
-Peer: {{route.applier.get_profile.peer.peer_name}}
-User {{route.applier.username}} requested the application of the following rule from address {{address}} {% if address|tofqdn %}({{address|tofqdn}}){% endif %}:
-
-Match
-* Dst Addr:{{route.destination}}
-* Src Addr: {{route.source}}
-* Protocol:{% for protocol in route.protocol.all %}{{ protocol }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Ports:{% for port in route.ports.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Source Ports:{% for port in route.sourceport.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Destination Ports:{% for port in route.destinationport.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-
-*Then:{% for then in route.then.all %}{{ then }}{% if not forloop.last %}, {% endif %}{% endfor %}
diff --git a/templates/rule_expiration.txt b/templates/rule_expiration.txt
deleted file mode 100644 (file)
index bf1b180..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Rule {{route.name}} expires {% ifequal expiration_days 0 %}today{% else%}in {{expiration_days}} day{{ expiration_days|pluralize }}{% endifequal %}
-
-Match
-* Dst Addr:{{route.destination}}
-* Src Addr: {{route.source}}
-* Protocol:{% for protocol in route.protocol.all %}{{ protocol }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Ports:{% for port in route.ports.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Source Ports:{% for port in route.sourceport.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-* Destination Ports:{% for port in route.destinationport.all %}{{ port }}{% if not forloop.last %}, {% endif %}{% endfor %}
-
-*Then:{% for then in route.then.all %}{{ then }}{% if not forloop.last %}, {% endif %}{% endfor %}
-
-Visit {{url}} to edit the rule.
diff --git a/templates/user_keys.html b/templates/user_keys.html
deleted file mode 100644 (file)
index 777b2ec..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-<div id="sshkeys_placeholder">
-<script>
-       $(document).ajaxSend(function(event, xhr, settings) {
-    function getCookie(name) {
-        var cookieValue = null;
-        if (document.cookie && document.cookie != '') {
-            var cookies = document.cookie.split(';');
-            for (var i = 0; i < cookies.length; i++) {
-                var cookie = jQuery.trim(cookies[i]);
-                // Does this cookie string begin with the name we want?
-                if (cookie.substring(0, name.length + 1) == (name + '=')) {
-                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
-                    break;
-                }
-            }
-        }
-        return cookieValue;
-    }
-    function sameOrigin(url) {
-        // url could be relative or scheme relative or absolute
-        var host = document.location.host; // host + port
-        var protocol = document.location.protocol;
-        var sr_origin = '//' + host;
-        var origin = protocol + sr_origin;
-        // Allow absolute or scheme relative URLs to same origin
-        return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
-            (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
-            // or any other URL that isn't scheme relative or absolute i.e relative.
-            !(/^(\/\/|http:|https:).*/.test(url));
-    }
-    function safeMethod(method) {
-        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
-    }
-
-    if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
-        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
-    }
-});
-
-       $(function() {
-       $('.remove_btn').button({
-            icons: {
-                primary: "ui-icon-circle-close"
-            },
-            text: false
-        })
-       $('#add_ssh_key_btn').button();
-       $('#add_ssh_key_btn').click(function() {
-                       str = $('#sshkeyform').serialize();
-            $.ajax({
-                type: "POST",
-                url: "{% url user-keys %}",
-                data: str,
-                success: function(response){
-//                                     var $response=$(response);
-//                                     var resdata =  $response.filter("#sshkeys_placeholder").html();
-                       $("#sshkeys_placeholder").html(response);
-                        }
-        });
-    return false;
-        });
-               $('a[id^="remove_key_"]').click(function() {
-                       var $this = $(this);
-                       var id = $this.attr("id");
-                       var key_id = id.replace("remove_key_", "")
-            $.ajax({
-                type: "GET",
-                url: "{% url delete-key %}"+key_id,
-                success: function(response){
-//                                     var $response=$(response);
-//                                     var resdata =  $response.filter("#sshkeys_placeholder").html();
-                       $("#sshkeys_placeholder").html(response);
-                        }
-        });
-    return false;
-        });
-       });
-       </script>
-
-<style type="text/css">
-.fingerprint {
-       font-family: monospace;
-}
-</style>
-{% load i18n %}
-<p>{% trans "Upload your SSH public keys and have them automatically installed on all newly-created instances. Keys must be in OpenSSH format, either RSA, or DSA, with or without a trailing comment." %}</p>
-
-{% if keys %}
-<table>
-<tr><th>{% trans "Fingerprint" %}</th><th>{% trans "Comment" %}</th></tr>
-{% for key in keys %}
-<tr><td class="fingerprint">{{ key.fingerprint }}</td><td>{{ key.comment|default:"&mdash;" }}</td><td><a class="remove_btn" id="remove_key_{{key.id}}" href="#">{% trans "Delete" %}</a></tr>
-{% endfor %}
-</table>
-{% endif %}
-<h2>{% trans "Add new key" %}</h2>
-{% if msg %}
-<div class="error">{{msg}}</div>
-{% endif %}
-<form method="POST" id="sshkeyform">
-{% csrf_token %}
-{% if form.ssh_pubkey.errors %}
-<div class="error">{{ form.ssh_pubkey.errors }}</div>
-{% endif %}
-{{ form.ssh_pubkey }}<br />
-<button id="add_ssh_key_btn">{% trans "Add key" %}</button>
-</form>
-</div>
-
index 9786be5..9fd6653 100644 (file)
@@ -32,8 +32,6 @@ $(document).ready(function(){
             '{% trans "Cancel" %}': function(){
                 $('#dialog').dialog('close');
             },
-        
-        
         },
         close: function(){
             update_val = $("#hid_mid").val();
@@ -59,6 +57,37 @@ $(document).ready(function(){
     });
     $('#console').parent().css('opacity', 0.9);
        $('#console').parent().css('filter', 'alpha(opacity=90)');
+       $(".button_place #routebutton").button({
+        icons: {
+            primary: "ui-icon-circle-plus"
+        },
+    });
+    $(".edit_button").button({
+        icons: {
+            primary: "ui-icon-wrench"
+        },
+    }).css('width','100px');;
+    $(" .del_button").button({
+        icons: {
+            primary: "ui-icon-circle-close"
+        },
+    }).click(function(){
+        $('#dialog').dialog('open');
+        return false;
+    }).css('width','100px');
+    $("#consolebutton").button({
+        icons: {
+            primary: "ui-icon-image"
+        },
+    }).click(function(){
+        $("#consolebutton").stop().stop();
+        $("#consolebutton").css('color', '#555555');
+        $('#console').dialog('open');
+        return false;
+    });
+       $(".statustootipclass").tooltip();
+    $(".expiresclass").tooltip();
+       $(".commentclass").tooltip();
     var oTable = $('#routes_table').dataTable({
         "bJQueryUI": true,
         "aoColumns": [{
@@ -111,47 +140,13 @@ $(document).ready(function(){
             }
         }
     });
-    
     oTable.fnDraw();
-    
     $('input[name="status_filter"]').click(function(){
-    
         //slice off the last '|' or it doesn't work
         //also be sure to use the third parameter
     });
     
-    $(".button_place #routebutton").button({
-        icons: {
-            primary: "ui-icon-circle-plus"
-        },
-    });
-    $(".edit_button").button({
-        icons: {
-            primary: "ui-icon-wrench"
-        },
-    }).css('width','100px');;
-    $(" .del_button").button({
-        icons: {
-            primary: "ui-icon-circle-close"
-        },
-    }).click(function(){
-        $('#dialog').dialog('open');
-        return false;
-    }).css('width','100px');
-    $("#consolebutton").button({
-        icons: {
-            primary: "ui-icon-image"
-        },
-    }).click(function(){
-        $("#consolebutton").stop().stop();
-        $("#consolebutton").css('color', '#555555');
-        $('#console').dialog('open');
-        return false;
-    });
     
-       $(".statustootipclass").tooltip();
-    $(".expiresclass").tooltip();
-       $(".commentclass").tooltip();
     var reg_exp = '';
     var checkboxs = document.getElementsByName('status_filter');
     for (var i = 0, inp; inp = checkboxs[i]; i++) {
@@ -263,7 +258,6 @@ function delete_route(route){
                                </tbody>
                        </table>
                        </div>
-       <table class="display" width="100%" id="nodes_table">
 <table class="display" width="100%" id="routes_table">
 <thead>
 <tr>
@@ -285,17 +279,10 @@ function delete_route(route){
 
 <tr class="GradeC" >
        <td>{{ route.pk }}</td>
-       <td><span {% if route.comments %}
-       class="commentclass" 
-               style="border-bottom:1px dotted red;" 
-        title="{{route.comments}}"
-               {% endif %}>{{ route.name }}</span></td>
+       <td><span {% if route.comments %} class="commentclass" style="border-bottom:1px dotted red;" title="{{route.comments}}" {% endif %}>{{ route.name }}</span></td>
        <td>{{ route.get_match|safe|escape }}</td>
        <td style="text-align: center;">{{route.get_then|safe|escape}}</td>
-       <td style="text-align: center; "><span 
-               {% if route.status == 'EXPIRED' or route.status == 'ADMININACTIVE' or route.status == 'INACTIVE' or route.status == 'OUTOFSYNC'%}
-           class="statustootipclass" 
-               style="border-bottom:1px dotted red;" 
+       <td style="text-align: center; "><span {% if route.status == 'EXPIRED' or route.status == 'ADMININACTIVE' or route.status == 'INACTIVE' or route.status == 'OUTOFSYNC'%} class="statustootipclass" style="border-bottom:1px dotted red;" 
                title = "{% ifequal route.status 'INACTIVE' %}Suspended by user{% else %}{% ifequal route.status 'ADMININACTIVE' %}Suspended by administrator{% else %}{% ifequal route.status 'EXPIRED' %}Suspended due to expiration{% else %}{% ifequal route.status 'OUTOFSYNC' %}Syncronization error. Configuration in device deffers from rule{% endifequal %}{% endifequal %}{% endifequal %}{% endifequal %}"{% endif %}>{% if route.status == 'EXPIRED' or route.status == 'ADMININACTIVE' or route.status == 'INACTIVE' %}SUSPENDED{% else %}{% if route.status == 'OUTOFSYNC' %}ERROR{% else %}{{route.status}}{% endif %}{% endif %}</span></td>
        {% comment %}<td style="text-align: center;">{{ route.response }}</td>{% endcomment %}
        <td style="text-align: center;">{{ route.applier }}</td>
@@ -304,7 +291,7 @@ function delete_route(route){
                style="border-bottom:2px dashed red;" 
         title="Expires {% ifequal route.days_to_expire '0' %}today{% else%}in {{route.days_to_expire}} day{{ route.days_to_expire|pluralize }}{% endifequal %}"
                {% endif %}{% endif %}>{{ route.expires }}</span></td>
-       <td style="text-align: center;">{% if route.status == 'EXPIRED' %}{% trans "Rule expired" %}{% else %}{% if route.status == 'ADMININACTIVE' %}{% trans "Suspended by administrator" %}{% else %}{% if route.status == 'INACTIVE' %}{% trans "Suspended by user" %}{% else %}{{ route.response }}{% endif %}{% endif %}{% endif %}</td>
+       <td style="text-align: center;">{% if route.status == 'EXPIRED' %}{% trans "Rule expired" %}{% else %}{% if route.status == 'ADMININACTIVE' %}{% trans "Suspended by administrator" %}{% else %}{% if route.status == 'INACTIVE' %}{% trans "Suspended by user" %}{% else %}{{ route.response }}{% if route.status == 'PENDING' %}<img src="/static/dots.gif">{% endif %}{% endif %}{% endif %}{% endif %}</td>
        <td style="text-align: center; width:180px;">
                {% ifequal route.status 'ACTIVE' %}
                <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">{% trans "Edit" %}</a> 
@@ -317,8 +304,12 @@ function delete_route(route){
                {% ifequal route.status 'OUTOFSYNC' %}
                <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">{% trans "ReSync" %}</a>
                {% else %}
+               {% ifequal route.status 'ERROR' %}
+               <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">{% trans "Fix it!" %}</a>
+               {% else %}
                -
                {% endifequal %}
+               {% endifequal %}
                {% endif %}
                {% endifequal %}
                </td>
index 76c729b..e180cb9 100644 (file)
@@ -19,6 +19,8 @@ urlpatterns = patterns('',
     url(r'^fod/delete/(?P<route_slug>[\w\-]+)/$', 'flowspy.flowspec.views.delete_route', name="delete-route"),
     url(r'^fod/login/?', 'flowspy.flowspec.views.user_login', name="login"),
     url(r'^fod/welcome/?', 'flowspy.flowspec.views.welcome', name="welcome"),
+    url(r'^fod/info/?', 'flowspy.flowspec.views.getinfo', name="getinfo"),
+    url(r'^fod/tos/?', 'flowspy.flowspec.views.gettos', name="gettos"),
     url(r'^fod/logout/?', 'flowspy.flowspec.views.user_logout', name="logout"),
     (r'^fod/setlang/?$', 'django.views.i18n.set_language'),
     # Uncomment the admin/doc line below to enable admin documentation: