diff --git a/flowspec/models.py b/flowspec/models.py index b2d903154ea9c715f94f1b6fe7a8266413b54443..5a9f8fd20c3b19163e7b3376ec7b7ec7d3fe7ed4 100644 --- a/flowspec/models.py +++ b/flowspec/models.py @@ -170,6 +170,21 @@ class Route(models.Model): else: return None + @property + def applier_username_nice(self): + if self.applier: + if self.applier.first_name or self.applier.last_name: + fn = self.applier.first_name if self.applier.first_name else "" + ln = self.applier.last_name if self.applier.last_name else "" + ret = "{0} {1}".format(fn, ln).strip() + elif self.applier.email: + ret = self.applier.email + else: + ret = self.applier.username + return ret + else: + return None + def __unicode__(self): return self.name @@ -214,7 +229,7 @@ class Route(models.Model): peer = username.peer_tag else: peer = None - send_message("[%s] Adding rule %s. Please wait..." % (self.applier.username, self.name), peer) + send_message("[%s] Adding rule %s. Please wait..." % (self.applier_username_nice, self.name), peer) response = add.delay(self) logger.info('Got add job id: %s' % response) fqdn = Site.objects.get_current().domain @@ -235,7 +250,7 @@ class Route(models.Model): user_mail = '%s' % self.applier.email user_mail = user_mail.split(';') send_new_mail( - settings.EMAIL_SUBJECT_PREFIX + 'Rule %s creation request submitted by %s' % (self.name, self.applier.username), + settings.EMAIL_SUBJECT_PREFIX + 'Rule %s creation request submitted by %s' % (self.name, self.applier_username_nice), mail_body, settings.SERVER_EMAIL, user_mail, get_peer_techc_mails(self.applier, username) @@ -264,7 +279,7 @@ class Route(models.Model): send_message( '[%s] Editing rule %s. Please wait...' % ( - self.applier.username, + self.applier_username_nice, self.name ), peer ) @@ -291,7 +306,7 @@ class Route(models.Model): user_mail = '%s' % self.applier.email user_mail = user_mail.split(';') send_new_mail( - settings.EMAIL_SUBJECT_PREFIX + 'Rule %s edit request submitted by %s' % (self.name, self.applier.username), + settings.EMAIL_SUBJECT_PREFIX + 'Rule %s edit request submitted by %s' % (self.name, self.applier_username_nice), mail_body, settings.SERVER_EMAIL, user_mail, get_peer_techc_mails(self.applier, username) ) @@ -323,7 +338,7 @@ class Route(models.Model): peer = None send_message( '[%s] Suspending rule %s. %sPlease wait...' % ( - self.applier.username, + self.applier_username_nice, self.name, reason_text ), peer @@ -351,7 +366,7 @@ class Route(models.Model): user_mail = '%s' % self.applier.email user_mail = user_mail.split(';') send_new_mail( - settings.EMAIL_SUBJECT_PREFIX + 'Rule %s removal request submitted by %s' % (self.name, self.applier.username), + settings.EMAIL_SUBJECT_PREFIX + 'Rule %s removal request submitted by %s' % (self.name, self.applier_username_nice), mail_body, settings.SERVER_EMAIL, user_mail, diff --git a/flowspec/tasks.py b/flowspec/tasks.py index bd9da9c3813eda80d7f0ae686e31a885cb4478e6..69d0b99995748dcf91fb2a18f3da5cd8f631b98b 100644 --- a/flowspec/tasks.py +++ b/flowspec/tasks.py @@ -61,22 +61,22 @@ def add(route, callback=None): route.status = status route.response = response route.save() - announce("[%s] Rule add: %s - Result: %s" % (route.applier, route.name, response), route.applier, route) + announce("[%s] Rule add: %s - Result: %s" % (route.applier_username_nice, route.name, response), route.applier, route) except TimeLimitExceeded: route.status = "ERROR" route.response = "Task timeout" route.save() - announce("[%s] Rule add: %s - Result: %s" % (route.applier, route.name, route.response), route.applier, route) + announce("[%s] Rule add: %s - Result: %s" % (route.applier_username_nice, route.name, route.response), route.applier, route) except SoftTimeLimitExceeded: route.status = "ERROR" route.response = "Task timeout" route.save() - announce("[%s] Rule add: %s - Result: %s" % (route.applier, route.name, route.response), route.applier, route) + announce("[%s] Rule add: %s - Result: %s" % (route.applier_username_nice, route.name, route.response), route.applier, route) except Exception: route.status = "ERROR" route.response = "Error" route.save() - announce("[%s] Rule add: %s - Result: %s" % (route.applier, route.name, route.response), route.applier, route) + announce("[%s] Rule add: %s - Result: %s" % (route.applier_username_nice, route.name, route.response), route.applier, route) @task(ignore_result=True) @@ -95,22 +95,22 @@ def edit(route, callback=None): route.status = status route.response = response route.save() - announce("[%s] Rule edit: %s - Result: %s" % (route.applier, route.name, response), route.applier, route) + announce("[%s] Rule edit: %s - Result: %s" % (route.applier_username_nice, route.name, response), route.applier, route) except TimeLimitExceeded: route.status = "ERROR" route.response = "Task timeout" route.save() - announce("[%s] Rule edit: %s - Result: %s" % (route.applier, route.name, route.response), route.applier, route) + announce("[%s] Rule edit: %s - Result: %s" % (route.applier_username_nice, route.name, route.response), route.applier, route) except SoftTimeLimitExceeded: route.status = "ERROR" route.response = "Task timeout" route.save() - announce("[%s] Rule edit: %s - Result: %s" % (route.applier, route.name, route.response), route.applier, route) + announce("[%s] Rule edit: %s - Result: %s" % (route.applier_username_nice, route.name, route.response), route.applier, route) except Exception: route.status = "ERROR" route.response = "Error" route.save() - announce("[%s] Rule edit: %s - Result: %s" % (route.applier, route.name, route.response), route.applier, route) + announce("[%s] Rule edit: %s - Result: %s" % (route.applier_username_nice, route.name, route.response), route.applier, route) @task(ignore_result=True) @@ -133,22 +133,22 @@ def delete(route, **kwargs): route.status = status route.response = response route.save() - announce("[%s] Suspending rule : %s%s- Result %s" % (route.applier, route.name, reason_text, response), route.applier, route) + announce("[%s] Suspending rule : %s%s- Result %s" % (route.applier_username_nice, route.name, reason_text, response), route.applier, route) except TimeLimitExceeded: route.status = "ERROR" route.response = "Task timeout" route.save() - announce("[%s] Suspending rule : %s - Result: %s" % (route.applier, route.name, route.response), route.applier, route) + announce("[%s] Suspending rule : %s - Result: %s" % (route.applier_username_nice, route.name, route.response), route.applier, route) except SoftTimeLimitExceeded: route.status = "ERROR" route.response = "Task timeout" route.save() - announce("[%s] Suspending rule : %s - Result: %s" % (route.applier, route.name, route.response), route.applier, route) + announce("[%s] Suspending rule : %s - Result: %s" % (route.applier_username_nice, route.name, route.response), route.applier, route) except Exception: route.status = "ERROR" route.response = "Error" route.save() - announce("[%s] Suspending rule : %s - Result: %s" % (route.applier, route.name, route.response), route.applier, route) + announce("[%s] Suspending rule : %s - Result: %s" % (route.applier_username_nice, route.name, route.response), route.applier, route) # May not work in the first place... proxy is not aware of Route models @@ -176,7 +176,7 @@ def batch_delete(routes, **kwargs): route.response = response route.expires = datetime.date.today() route.save() - announce("[%s] Rule removal: %s%s- Result %s" % (route.applier, route.name, reason_text, response), route.applier, route) + announce("[%s] Rule removal: %s%s- Result %s" % (route.applier_username_nice, route.name, reason_text, response), route.applier, route) else: return False diff --git a/flowspec/views.py b/flowspec/views.py index 3d58ac4deeb8f0748fbd0645f87817dd0e625e2f..d61a31fab64ec5647c71d9d45446a93c39cbff31 100644 --- a/flowspec/views.py +++ b/flowspec/views.py @@ -178,7 +178,7 @@ def group_routes_ajax(request): query |= Q(applier__userprofile__in=peer.user_profile.all()) all_group_routes = Route.objects.filter(query) jresp = {} - routes = build_routes_json(all_group_routes) + routes = build_routes_json(all_group_routes, request.user.is_superuser) jresp['aaData'] = routes return HttpResponse(json.dumps(jresp), mimetype='application/json') @@ -199,12 +199,12 @@ def overview_routes_ajax(request): if request.user.is_superuser or request.user.has_perm('accounts.overview'): all_group_routes = Route.objects.all() jresp = {} - routes = build_routes_json(all_group_routes) + routes = build_routes_json(all_group_routes, request.user.is_superuser) jresp['aaData'] = routes return HttpResponse(json.dumps(jresp), mimetype='application/json') -def build_routes_json(groutes): +def build_routes_json(groutes, is_superuser): routes = [] for r in groutes.prefetch_related( 'applier', @@ -229,14 +229,13 @@ def build_routes_json(groutes): rd['status'] = r.status # in case there is no applier (this should not occur) try: - if r.applier.first_name or r.applier.last_name: - fn = r.applier.first_name if r.applier.first_name else "" - ln = r.applier.last_name if r.applier.last_name else "" - rd['applier'] = "{0} {1}".format(fn, ln).strip() - elif r.applier.email: - rd['applier'] = r.applier.email - else: - rd['applier'] = r.applier.username + #rd['applier'] = r.applier.username + userinfo = r.applier_username_nice + #if is_superuser: + # applier_username = r.applier.username + # if applier_username != userinfo: + # userinfo += " ("+applier_username+")" + rd['applier'] = userinfo except: rd['applier'] = 'unknown' rd['peer'] = '' @@ -885,6 +884,7 @@ def routedetails(request, route_slug): 'route': route, 'mytime': now, 'tz' : settings.TIME_ZONE, + 'is_superuser' : request.user.is_superuser, 'route_comments_len' : len(str(route.comments)) }) diff --git a/templates/dashboard.html b/templates/dashboard.html index c632ef3a8da4956eaecf689a9af5af9fbe9fbc05..cc0ac6e560669a33e9a05c8ed3cd58af8b3b6059 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -66,7 +66,7 @@ <div class="timeline-heading"> <h4 class="timeline-title"><a href="{{ route.get_absolute_url }}">{{route.name}}</a></h4> <p> - <small class="text-muted"><i class="fa fa-pencil-square-o"></i> {% trans "Last update" %}: {{route.last_updated}} {% trans "by" %} {{route.applier}}</small> + <small class="text-muted"><i class="fa fa-pencil-square-o"></i> {% trans "Last update" %}: {{route.last_updated}} {% trans "by" %} {{route.applier_username_nice}}</small> </p> <p> <small class="text-muted"><i class="fa fa-clock-o"></i> {% trans "Expires" %}: {{ route.expires|date:"d M y" }}</small> diff --git a/templates/flowspy/route_details.html b/templates/flowspy/route_details.html index dc24a79203a14de1cc9c2767631e73c051130b1b..076f497f86da6996b90e41e3c71e2f6dafccd507 100644 --- a/templates/flowspy/route_details.html +++ b/templates/flowspy/route_details.html @@ -25,7 +25,9 @@ function myreloadPage() { </div> <div class="col-md-12"> <div> - <i class="fa fa-pencil-square-o"></i> {% trans "Last rule edit" %}: {{route.last_updated}} {% trans "by" %} {{route.applier}} + <i class="fa fa-pencil-square-o"></i> {% trans "Last rule edit" %}: {{route.last_updated}} {% trans "by" %} {{route.applier_username_nice}} + {% if is_superuser %} ({{route.applier}}) {% endif %} + </div> <div> <h2>{% trans 'About' %}</h2> diff --git a/templates/rule_action.txt b/templates/rule_action.txt index e88b2d5dece2e4a3857678e16249e4b24487ca76..d156753b8ddafed6f5930c0a58983c8c51c18f98 100644 --- a/templates/rule_action.txt +++ b/templates/rule_action.txt @@ -1,7 +1,7 @@ {% 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: {{peer.peer_name}} -User {{route.applier.username}} requested the {{action}} of the following rule from address {{address}} {% if address|tofqdn %}({{address|tofqdn}}){% endif %}: +User {{route.applier_username_nice}} requested the {{action}} of the following rule from address {{address}} {% if address|tofqdn %}({{address|tofqdn}}){% endif %}: Rule name: {{route.name}}{% endifequal %}