From 6ee21ffd7e1ac6443ab91f4937bddd37e7cdfe8a Mon Sep 17 00:00:00 2001 From: Leonidas Poulopoulos <leopoul@noc.grnet.gr> Date: Mon, 28 Nov 2011 16:42:48 +0200 Subject: [PATCH] Added group view on initial page --- accounts/models.py | 2 +- flowspec/admin.py | 2 + flowspec/views.py | 14 +++++ peers/models.py | 6 +- peers/sql/peer.sql | 118 +++++++++++++++++++++++++++++++++++++ templates/user_routes.html | 2 + urls.py | 2 +- 7 files changed, 141 insertions(+), 5 deletions(-) create mode 100644 peers/sql/peer.sql diff --git a/accounts/models.py b/accounts/models.py index 404da7fe..e00611b4 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -5,7 +5,7 @@ from flowspy.peers.models import * class UserProfile(models.Model): user = models.OneToOneField(User) - domain = models.ForeignKey(Peer) + peer = models.ForeignKey(Peer) def get_address_space(self): networks = self.domain.networks.all() diff --git a/flowspec/admin.py b/flowspec/admin.py index 35052d16..19193f09 100644 --- a/flowspec/admin.py +++ b/flowspec/admin.py @@ -1,5 +1,6 @@ from django.contrib import admin from flowspy.flowspec.models import * +from flowspy.accounts.models import * from utils import proxy as PR class RouteAdmin(admin.ModelAdmin): @@ -36,6 +37,7 @@ class RouteAdmin(admin.ModelAdmin): #admin.site.register(MatchAddress) admin.site.register(MatchPort) admin.site.register(MatchDscp) +admin.site.register(UserProfile) #admin.site.register(MatchFragmentType) #admin.site.register(MatchIcmpCode) #admin.site.register(MatchIcmpType) diff --git a/flowspec/views.py b/flowspec/views.py index 4b5b3e0f..c8756a12 100644 --- a/flowspec/views.py +++ b/flowspec/views.py @@ -14,6 +14,7 @@ from django.template.loader import get_template from django.utils import simplejson from django.core.urlresolvers import reverse from django.contrib import messages +from flowspy.accounts.models import * from django.forms.models import model_to_dict @@ -32,6 +33,19 @@ def user_routes(request): return render_to_response('user_routes.html', {'routes': user_routes}, context_instance=RequestContext(request)) +@login_required +def group_routes(request): + if request.user.is_anonymous(): + return HttpResponseRedirect(reverse('login')) + peer = request.user.get_profile().peer + 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}, + context_instance=RequestContext(request)) + + @login_required def add_route(request): if request.method == "GET": diff --git a/peers/models.py b/peers/models.py index 8b796595..5ec65b45 100644 --- a/peers/models.py +++ b/peers/models.py @@ -1,5 +1,6 @@ from django.db import models from utils.whois import * +from django.contrib.auth.models import User # Create your models here. class PeerRange(models.Model): @@ -15,8 +16,9 @@ class Peer(models.Model): peer_name = models.CharField(max_length=128) peer_as = models.IntegerField() peer_tag = models.CharField(max_length=64) - domain_name = models.CharField(max_length=128) + domain_name = models.CharField(max_length=128, null=True, blank=True) networks = models.ManyToManyField(PeerRange, null=True, blank=True) + def __unicode__(self): return self.peer_name class Meta: @@ -34,5 +36,3 @@ class Peer(models.Model): self.save() - - diff --git a/peers/sql/peer.sql b/peers/sql/peer.sql new file mode 100644 index 00000000..a2eddbae --- /dev/null +++ b/peers/sql/peer.sql @@ -0,0 +1,118 @@ +INSERT INTO `peer` (`peer_id`, `peer_name`, `peer_as`, `peer_tag`, `domain_name`) VALUES +(0, 'Εθνικό Δίκτυο Έρευνας και Τεχνολογίας', '5408', 'GRNET', 'grnet.gr'), +(1, 'Ανωτάτη Σχολή Καλών Τεχνών', '65079', 'ASFA', 'asfa.gr'), +(2, 'Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης', '5470', 'AUTH', 'auth.gr'), +(3, 'Γεωπονικό Πανεπιστήμιο Αθηνών', '65078', 'AUA', 'aua.gr'), +(4, 'Δημοκρίτειο Πανεπιστήμιο Θράκης', '8253', 'DUTH', 'duth.gr'), +(5, 'Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών', '8643', 'UOA', 'uoa.gr'), +(6, 'Εθνικό Μετσόβιο Πολυτεχνείο', '3323', 'NTUA', 'ntua.gr'), +(7, 'Ιόνιο Πανεπιστήμιο', '8618', 'IONIO', 'ionio.gr'), +(8, 'Οικονομικό Πανεπιστήμιο Αθηνών', '8611', 'AUEB', 'aueb.gr'), +(9, 'Πανεπιστήμιο Αιγαίου', '8617', 'AEGEAN', 'aegean.gr'), +(10, 'Πανεπιστήμιο Θεσσαλίας', '65077', 'UTH', 'uth.gr'), +(11, 'Πανεπιστήμιο Ιωαννίνων', '8581', 'UOI', 'uoi.gr'), +(12, 'Πανεπιστήμιο Κρήτης', '6867', 'UOC', 'uoc.gr'), +(13, 'Πανεπιστήμιο Μακεδονίας Οικονομικών και Κοινωνικών Επιστημών', '12364', 'UOM', 'uom.gr'), +(14, 'Πανεπιστήμιο Πατρών', '65024', 'UPATRAS', 'upatras'), +(15, 'Πανεπιστήμιο Πειραιά', '12402', 'UNIPI', 'unipi.gr'), +(16, 'Πάντειο Πανεπιστήμιο Κοινωνικών & Πολιτικών Επιστημών', '65088', 'PANTEION', 'panteion.gr'), +(17, 'Πολυτεχνείο Κρήτης', '8278', 'TUC', 'tuc.gr'), +(18, 'Σχολή Ικάρων', '65086', 'HAFA', 'hafa.gr'), +(19, 'Χαροκόπειο Πανεπιστήμιο', '65083', 'HUA', 'hua.gr'), +(20, 'ΤΕΙ Αθηνών', '9069', 'TEIATH', 'teiath.gr'), +(21, 'ΤΕΙ Ηπείρου', '65074', 'TEIEP', 'teiep.gr'), +(22, 'ΤΕΙ Κρήτης', '8762', 'TEICRETE', 'teiher.gr'), +(23, 'ΤΕΙ Θεσσαλονίκης', '5489', 'TEITHE', 'teithe.gr'), +(24, 'ΤΕΙ Καβάλας', '65073', 'TEIKAV', 'teikav.edu.gr'), +(25, 'ΤΕΙ Καλαμάτας', '65072', 'TEIKAL', 'teikal.gr'), +(26, 'ΤΕΙ Δυτικής Μακεδονίας', '65087', 'TEIKOZ', 'teikoz.gr'), +(27, 'ΤΕΙ Λαμίας', '65071', 'TEILAM', 'teilam.gr'), +(28, 'ΤΕΙ Λάρισας', '8700', 'TEILAR', 'teilar.gr'), +(29, 'ΤΕΙ Μεσολογγίου', '65070', 'TEIMES', 'teimes.gr'), +(30, 'ΤΕΙ Πάτρας', '20551', 'TEIPAT', 'teipat.gr'), +(31, 'ΤΕΙ Πειραιά', '65068', 'TEIPIR', 'teipir.gr'), +(32, 'ΤΕΙ Σερρών', '65067', 'TEISER', 'teiser.gr'), +(33, 'ΤΕΙ Χαλκίδας', '65081', 'TEIHAL', 'teihal.gr'), +(34, 'ΕΚΕΦΕ-Δημόκριτος', '2546', 'ARIADNET', 'ariadne-t.gr'), +(35, 'Γενική Γραμματεία Έρευνας και Τεχνολογίας', '65066', 'GSRT', 'gsrt.gr'), +(37, 'Εθνικό Κέντρο Τεκμηρίωσης-ΕΙΕ', '65075', 'EKT', 'ekt.gr'), +(38, 'Εθνικό Κέντρο Διαβήτη', '65065', 'HNDC', 'hndc.gr'), +(42, 'Ινστιτούτο Pasteur', '65085', 'PASTEUR', 'pasteur.gr'), +(43, 'Ίδρυμα Τεχνολογίας και Έρευνας', '8522', 'FORTH', 'forth.gr'), +(44, 'OTE - Συγκρότημα Εργαστηρίων Νέων Τεχνολογιών & Υπηρεσιών', '65089', 'OTERND', 'oteresearch.gr'), +(46, 'Κέντρο Ερευνών για Θέματα Ισότητας', '65084', 'KETHI', 'kethi.gr'), +(47, 'Εθνικό Ίδρυμα Ερευνών', '65075', 'EIE', 'eie.gr'), +(49, 'Ελληνικό Κέντρο Θαλασσίων Ερευνών', '65064', 'HCMR', 'hcmr.gr'), +(50, 'GR-IX - OTE', '6799', 'OTENET', 'OTENET.GR'), +(53, 'GR-IX - Forthnet', '1241', 'FORTHNET', 'FORTHNET.GR'), +(54, 'GR-IX - HOL', '3329', 'HOL', 'HOL.GR'), +(58, 'Πανελλήνιο Σχολικό Δίκτυο', '8248', 'SCH', 'sch.gr'), +(59, 'Διαχείριση ΕΔΕΤ', '65057', 'GRNETADM', 'admin.grnet.gr'), +(60, 'Ινστιτούτο Πολιτιστικής & Εκπαιδευτικής Τεχνολογίας', '65063', 'CETI', 'ceti.gr'), +(62, 'GR-IX - VODAFONE', '12361', 'VODAFONE', 'VODAFONE.GR'), +(63, 'ΕΚΕΤΑ - Ινστιτούτο Πληροφορικής και Τηλεματικής (ΙΠΤΗΛ)', '65051', 'IPTHL', 'iti.gr'), +(64, 'GR-IX - TELLAS', '25472', 'TELLAS', 'tellas.gr'), +(66, 'Κέντρο Ερευνών ΝΕΣΤΩΡ', '65060', 'NESTOR', 'nestor.org.gr'), +(69, 'Υπουργείο Παιδείας, Δια Βίου Μάθησης και Θρησκευμάτων', '65059', 'YPEPTH', 'ypepth.gr'), +(70, 'Εθνικό Αστεροσκοπείο Αθηνών', '15690', 'NOA', 'noa.gr'), +(71, 'ΕΙΧΗΜΥΘ', '15948', 'ICEHT', 'iceht.gr'), +(72, 'Ε.ΚΕ.ΒΕ "ΑΛΕΞΑΝΔΡΟΣ ΦΛΕΜΙΓΚ"', '65056', 'FLEMING', 'fleming.gr'), +(73, 'GR-IX - Wind', '15617', 'WIND', 'TELESTET.GR'), +(75, 'Ελληνικός Οργανισμός Τυποποίησης - ΕΛΟΤ', '65058', 'ELOT', 'elot.gr'), +(76, 'Οργανισμός Αντισεισμικού Σχεδιασμού και Προστασίας', '65055', 'OASP', 'oasp.gr'), +(78, 'Α.Σ.ΠΑΙ.Τ.Ε.', '65069', 'SELETE', 'aspete.gr'), +(79, 'Ελληνικό Ανοικτό Πανεπιστήμιο', '20813', 'EAP', 'eap.gr'), +(81, 'GEANT - European High Speed Research Network', '20965', 'GEANT', 'geant.net'), +(82, 'CEDEFOP - Ευρωπαϊκό Κέντρο για την Ανάπτυξη της Επαγγελματικής Κατάρτισης', '15536', 'CEDEFOP', 'cedefop.eu.int'), +(83, 'Διεθνές Κέντρο Δημόσιας Διοίκησης Θεσσαλονίκης - UNTC', '65054', 'UNTC', 'untcentre.org'), +(84, 'Βουλή των Ελλήνων', '65053', 'VOULI', 'parliament.gr'), +(86, 'Δίκτυο ΣΥΖΕΥΞΙΣ', '65052', 'SYZEYXIS', 'syzeyxis.gr'), +(87, 'GR-IX - NETONE', '9151', 'NETONE', 'netone.gr'), +(88, 'Πανεπιστήμιο Πελοποννήσου', '65049', 'UOP', 'uop.gr'), +(89, 'Ρυθμιστική Αρχή Ενέργειας - ΡΑΕ', '65050', 'RAE', 'rae.gr'), +(90, 'Κέντρο Ανανεώσιμων Πηγών Ενέργειας - ΚΑΠΕ', '65046', 'KAPE', 'cres.gr'), +(91, 'Ινστιτούτο Γεωλογικών & Μεταλλευτικών Ερευνών - ΙΓΜΕ', '65048', 'IGME', 'igme.gr'), +(92, 'Ίδρυμα Ευγενίδου', '65045', 'EVGENIDIO', 'eugenfound.edu.gr'), +(93, 'Ανώτατη Εκκλησιαστική Σχολή Θεσσαλονίκης', '65044', 'OIPP', 'oipp.gr'), +(94, 'Γεωργική & Βιοτεχνική Σχολή Θεσσαλονίκης', '65042', 'GEWRGIKH', 'afs.edu.gr'), +(95, 'Ακαδημία Αθηνών - Ίδρυμα Ιατροβιολογικών Ερευνών', '65043', 'IIBEAA', 'bioacademy.gr'), +(96, 'Ινστιτούτο Τεχνικής Σεισμολογίας & Αντισεισμικών Κατασκευών - ΙΤΣΑΚ', '65039', 'ITSAK', 'itsak.gr'), +(98, 'GR-IX - ORANGE (EQUANT)', '4004', 'ORANGE', 'orange-ftgroup.com'), +(99, 'GR-IX - VIVODI', '21284', 'VIVODI', 'vivodi.gr'), +(106, 'ΤΕΙ Ιονίων Νήσων', '65041', 'TEIION', 'teiion.gr'), +(108, 'Γενική Γραμματεία Εθνικής Στατιστικής Υπηρεσίας Ελλάδας', '65035', 'STAT', 'statistics.gr'), +(109, 'Στρατιωτική Σχολή Ευελπίδων/ΓΕΠ', '65033', 'SSE', 'sse.gr'), +(112, 'Σχολή Ναυτικών Δοκίμων', '65031', 'SND', 'snd.edu.gr, hna.gr'), +(113, 'Ινστιτούτο Έρευνας Μουσικής & Ακουστικής', '65032', 'IRMA', 'iema.gr'), +(114, 'Ελληνικό Ινστιτούτο Υγιεινής & Ασφάλειας της Εργασίας', '65030', 'ELINYAE', 'elinyae.gr'), +(116, 'Πανεπιστήμιο Δυτικής Μακεδονίας', '65029', 'UOWM', 'uowm.gr'), +(122, 'Υπηρεσία Φοιτητικού DSL - Δίκτυο Τερματισμού Συνδέσεων Χρηστών', '197121', 'EDUDSL', 'edudsl.gr'), +(123, 'Πανεπιστήμιο Στερεάς Ελλάδας', '65027', 'UCG', 'ucg.gr'), +(124, 'Υπηρεσία Φοιτητικού DSL "ΔΙΟΔΟΣ" - Υπηρεσία Μητρώου ΓΓΕΤ (Πληροφ. Σύστημα)', '65026', 'PSDIODOS', 'diodos.net.gr'), +(125, 'Αρχαιολογική Εταιρεία εν Αθήναις', '65025', 'ARCHET', 'archetai.gr'), +(126, 'Ακαδημία Αθηνών', '65016', 'ACADEMY', 'academyofathens.gr'), +(128, 'Ερευνητικό Ακαδημαϊκό Ινστιτούτο Τεχνολογίας Υπολογιστών', '6744', 'CTI', 'cti.gr'), +(130, 'Μεσογειακό Αγρονομικό Ινστιτούτο Χανίων', '65022', 'MAICH', 'maich.gr'), +(132, 'Ινστιτούτο Βιομηχανικών Συστημάτων', '65020', 'ISI', 'isi.gr'), +(134, 'Νόησις - Κέντρο Διάδοσης Επιστημών και Μουσείο Τεχνολογίας', '65018', 'NOESIS', 'tmth.edu.gr'), +(136, 'Ίδρυμα Κρατικών Υποτροφιών', '65019', 'IKY', 'IKYPD'), +(138, 'AS112 ΕΔΕΤ', '112', 'GRNET-AS112', NULL), +(139, 'K-Root server ΕΔΕΤ', '25152', 'GRNKROOT', NULL), +(140, 'Διεθνές Πανεπιστήμιο Ελλάδας', '65036', 'IHU', 'ihu.edu.gr'), +(141, 'ΕΚΕΤΑ - Εθνικό Κέντρο Έρευνας και Τεχνολογικής Ανάπτυξης', '47616', 'CERTH', 'certh.gr'), +(142, 'Αμερικανική Σχολή Κλασικών Σπουδών', '65017', 'ASCSA', 'Asca.edu.gr'), +(143, 'Εθνικό Οπτικοακουστικό Αρχείο', '65015', 'AVARCH', 'avarchive.gr'), +(144, 'Αμερικάνικο κολέγιο Ανατολία', '65014', 'ACT', 'Anatolia.edu.act.edu'), +(145, 'GR-IX - ON Telecoms', '41920', 'ONTELECM', 'ontelecoms.com'), +(146, 'GR-IX - CYTA', '6866', 'CYTA', NULL), +(148, 'Ινστιτούτο Επεξεργασίας Λόγου', '65082', 'ILSP', 'ilsp.gr'), +(149, 'Hellas Grid (HG)', '65037', 'HG', 'hellasgrid.gr'), +(150, 'Google', '15169', 'GOOGLE', 'google.com'), +(151, 'EGV', '50555', 'EGV', 'opengov.gr'), +(152, 'RIPE', '3333', 'RIPE', 'ripe.net'), +(160, 'Ανώτερη Σχολή Τουριστικής Εκπαίδευσης (ΡΟΔΟΣ)', '65012', 'ASTER', 'aster.edu.gr'), +(162, 'Σχολή Μονίμων Υπαξιωματικών', '65013', 'SMY', NULL), +(166, 'GR-IX - Verizon', '702', 'VERIZON', NULL), +(167, 'Πανεπιστήμιο Δυτικής Ελλάδας', '65034', 'UWG', 'uwg.edu.gr'), +(170, 'Ανωτάτη Διακλαδική Σχολή Πολέμου - ΑΔΙΣΠΟ', '65038', 'ADISPO', 'adispo.gr'), +(171, 'Ινστιτούτο Πληροφοριακών Συστημάτων και Προσoμοίωσης (ΙΠΣΥΠ/IMIS)', '65011', 'IMIS', NULL); diff --git a/templates/user_routes.html b/templates/user_routes.html index 86629def..46ff25f5 100644 --- a/templates/user_routes.html +++ b/templates/user_routes.html @@ -112,6 +112,7 @@ function delete_route(route){ <th style="text-align: center;">{% trans "Then" %}</th> <th style="text-align: center;">{% trans "Status" %}</th> {% comment %}<th style="text-align: center;">{% trans "Details" %}</th>{% endcomment %} + <th style="text-align: center;">{% trans "Applier" %}</th> <th style="text-align: center;">{% trans "Expires" %}</th> <th style="text-align: center;">{% trans "Response" %}</th> <th style="text-align: center; width:120px;">{% trans "Actions" %}</th> @@ -127,6 +128,7 @@ function delete_route(route){ <td style="text-align: center;">{{route.get_then|safe|escape}}</td> <td style="text-align: center;">{% if route.is_online %}Online{% else %}Offline{% endif %}</td> {% comment %}<td style="text-align: center;">{{ route.response }}</td>{% endcomment %} + <td style="text-align: center;">{{ route.applier }}</td> <td style="text-align: center;">{{ route.expires }}</td> <td style="text-align: center;">{{ route.response }}</td> <td style="text-align: center;"> diff --git a/urls.py b/urls.py index f102de2f..2c7f60ca 100644 --- a/urls.py +++ b/urls.py @@ -8,7 +8,7 @@ urlpatterns = patterns('', # Example: # (r'^flowspy/', include('flowspy.foo.urls')), (r'^poll/', include('flowspy.poller.urls')), - url(r'^/?$', 'flowspy.flowspec.views.user_routes', name="user-routes"), + url(r'^/?$', 'flowspy.flowspec.views.group_routes', name="group-routes"), url(r'^add/?$', 'flowspy.flowspec.views.add_route', name="add-route"), url(r'^edit/(?P<route_slug>\w+)/$', 'flowspy.flowspec.views.edit_route', name="edit-route"), url(r'^delete/(?P<route_slug>\w+)/$', 'flowspy.flowspec.views.delete_route', name="delete-route"), -- GitLab