diff --git a/app/sso/tasks.py b/app/sso/tasks.py index afb027a..7af87ab 100644 --- a/app/sso/tasks.py +++ b/app/sso/tasks.py @@ -91,7 +91,6 @@ def update_user_access(user, **kwargs): for servacc in ServiceAccount.objects.filter(user=user): servacc.active = 0 servacc.save() - pass else: # For each of the user's services, check they're in a valid group for it and enable/disable as needed. for servacc in ServiceAccount.objects.filter(user=user): @@ -99,12 +98,10 @@ def update_user_access(user, **kwargs): if servacc.active: servacc.active = 0 servacc.save() - pass else: if not servacc.active: servacc.active = 1 servacc.save() - pass notifyurls = AuthAPIKey.objects.filter(active=True).exclude(callback='') if notifyurls.count(): diff --git a/app/sso/templates/sso/lookup/user.html b/app/sso/templates/sso/lookup/user.html index 0f4678c..6bb66fe 100644 --- a/app/sso/templates/sso/lookup/user.html +++ b/app/sso/templates/sso/lookup/user.html @@ -19,6 +19,9 @@ {% if "hr"|installed %}
  • Blacklist Status: {% if blacklisted %}BLACKLISTED ({{ blacklisted }} items){% else %}OK{% endif %}
  • {% endif %} +{% if user.ip_addresses.count %} +
  • IP Address Lookup ({{ user.ip_addresses.count }} associated addresses)
  • +{% endif %}

    diff --git a/app/sso/templates/sso/ssouseripaddress_list.html b/app/sso/templates/sso/ssouseripaddress_list.html new file mode 100644 index 0000000..9b825a4 --- /dev/null +++ b/app/sso/templates/sso/ssouseripaddress_list.html @@ -0,0 +1,25 @@ +{% extends "base.html" %} + +{% block title %}IP Search: {% if kuser %}{{ kuser }}{% else %}{{ ip }}{% endif %}{% endblock %} + +{% block content %} +

    IP Search: {% if kuser %}{{ kuser }}{% else %}{{ ip }}{% endif %}

    + +{% if object_list %} + + + + + +{% for object in object_list %} + + + + + +{% endfor %} + +
    IP AddressUserFirst UseLast Use
    {{ object.ip_address }}{{ object.user }} (Profile){{ object.first_seen }}{{ object.last_seen }}
    +{% endif %} + +{% endblock %} diff --git a/app/sso/urls.py b/app/sso/urls.py index ca131ef..bdacf9d 100644 --- a/app/sso/urls.py +++ b/app/sso/urls.py @@ -7,7 +7,7 @@ from sso import views urlpatterns = patterns('', ('^$', views.profile), - (r'^profile/$', views.profile), + url(r'^profile/$', views.profile, name='sso-profile'), (r'^profile/add/service', views.service_add), (r'^profile/del/service/$', views.service_del), (r'^profile/del/service/(?P\d+)/$', views.service_del), @@ -23,6 +23,8 @@ urlpatterns = patterns('', (r'^users/$', views.user_lookup), url(r'^users/(?P.*)/addnote/$', login_required(views.AddUserNote.as_view()), name='sso-addusernote'), url(r'^users/(?P.*)/$', views.user_view, name='sso-viewuser'), + + url(r'^address/$', login_required(views.UserIPAddressView.as_view()), name='sso-ipaddress'), ) urlpatterns += patterns('django.views.generic.simple', diff --git a/app/sso/views.py b/app/sso/views.py index 07e6ab5..df43a43 100644 --- a/app/sso/views.py +++ b/app/sso/views.py @@ -13,7 +13,7 @@ from django.contrib.auth.decorators import login_required from django.template import RequestContext from django.core import serializers from django.conf import settings -from django.views.generic import FormView +from django.views.generic import FormView, ListView from gargoyle import gargoyle from gargoyle.decorators import switch_is_active @@ -23,7 +23,7 @@ from eve_api.models import EVEAccount, EVEPlayerCharacter from eve_api.tasks import import_apikey, import_apikey_result, update_user_access from eve_proxy.models import ApiAccessLog from reddit.tasks import update_user_flair -from sso.models import ServiceAccount, Service, SSOUser, ExistingUser, ServiceError +from sso.models import ServiceAccount, Service, SSOUser, ExistingUser, ServiceError, SSOUserIPAddress from sso.forms import UserServiceAccountForm, ServiceAccountResetForm, UserLookupForm, APIPasswordForm, EmailChangeForm, PrimaryCharacterForm, UserNoteForm @login_required @@ -258,13 +258,13 @@ def refresh_access(request, userid=0, corpid=0, allianceid=0): for u in users: update_user_access.delay(u.id) messages.add_message(request, messages.INFO, "%s accounts queued for update." % users.count()) - return redirect('eveapi-corporation', corporationid=corpid) + return redirect('eveapi-corporation', pk=corpid) if allianceid > 0 and request.user.has_perm('sso.can_refresh_users'): users = User.objects.filter(eveaccount__characters__corporation__alliance__id=allianceid).distinct() for u in users: update_user_access.delay(u.id) messages.add_message(request, messages.INFO, "%s accounts queued for update." % users.count()) - return redirect('eveapi-alliance', allianceid=allianceid) + return redirect('eveapi-alliance', pk=allianceid) else: update_user_access(request.user.id) messages.add_message(request, messages.INFO, "User access updated.") @@ -366,3 +366,28 @@ class AddUserNote(FormView): obj.save() return super(AddUserNote, self).form_valid(form) + + +class UserIPAddressView(ListView): + + model = SSOUserIPAddress + + def dispatch(self, request, *args, **kwargs): + if not request.user.has_perm('sso.can_view_users_restricted'): + return HttpResponseForbidden() + return super(AddUserNote, self).dispatch(request, *args, **kwargs) + + def get_queryset(self): + if self.request.GET.has_key('user'): + qs = self.model.objects.filter(user__username__exact=self.request.GET.get('user')) + else: + qs = self.model.objects.filter(ip_address__contains=self.request.GET.get('ip', '')) + return qs.order_by('-last_seen') + + def get_context_data(self, **kwargs): + ctx = super(UserIPAddressView, self).get_context_data(**kwargs) + ctx.update({ + 'ip': self.request.GET.get('ip', None), + 'kuser': self.request.GET.get('user', None), + }) + return ctx