Merge branch 'develop'

This commit is contained in:
2012-03-29 22:52:56 +01:00
5 changed files with 60 additions and 8 deletions

View File

@@ -91,7 +91,6 @@ def update_user_access(user, **kwargs):
for servacc in ServiceAccount.objects.filter(user=user): for servacc in ServiceAccount.objects.filter(user=user):
servacc.active = 0 servacc.active = 0
servacc.save() servacc.save()
pass
else: else:
# For each of the user's services, check they're in a valid group for it and enable/disable as needed. # 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): for servacc in ServiceAccount.objects.filter(user=user):
@@ -99,12 +98,10 @@ def update_user_access(user, **kwargs):
if servacc.active: if servacc.active:
servacc.active = 0 servacc.active = 0
servacc.save() servacc.save()
pass
else: else:
if not servacc.active: if not servacc.active:
servacc.active = 1 servacc.active = 1
servacc.save() servacc.save()
pass
notifyurls = AuthAPIKey.objects.filter(active=True).exclude(callback='') notifyurls = AuthAPIKey.objects.filter(active=True).exclude(callback='')
if notifyurls.count(): if notifyurls.count():

View File

@@ -19,6 +19,9 @@
{% if "hr"|installed %} {% if "hr"|installed %}
<li><b>Blacklist Status: {% if blacklisted %}<font color='red'>BLACKLISTED</font> ({{ blacklisted }} items){% else %}<font color='geen'>OK</font>{% endif %}</b></li> <li><b>Blacklist Status: {% if blacklisted %}<font color='red'>BLACKLISTED</font> ({{ blacklisted }} items){% else %}<font color='geen'>OK</font>{% endif %}</b></li>
{% endif %} {% endif %}
{% if user.ip_addresses.count %}
<li><a href="{% url sso-ipaddress %}?user={{ user.username }}">IP Address Lookup</a> ({{ user.ip_addresses.count }} associated addresses)</li>
{% endif %}
</p> </p>
<p> <p>

View File

@@ -0,0 +1,25 @@
{% extends "base.html" %}
{% block title %}IP Search: {% if kuser %}{{ kuser }}{% else %}{{ ip }}{% endif %}{% endblock %}
{% block content %}
<h1>IP Search: {% if kuser %}{{ kuser }}{% else %}{{ ip }}{% endif %}</h1>
{% if object_list %}
<table>
<thead>
<tr><th>IP Address</th><th>User</th><th>First Use</th><th>Last Use</th></tr>
</thead>
<tbody>
{% for object in object_list %}
<tr><td><a href="{% url sso-ipaddress %}?ip={{ object.ip_address }}">{{ object.ip_address }}</a></td>
<td><a href="{% url sso-ipaddress %}?user={{ object.user.username }}">{{ object.user }}</a> (<a href="{% url sso-viewuser object.user.username %}">Profile</a>)</td>
<td>{{ object.first_seen }}</td>
<td>{{ object.last_seen }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{% endblock %}

View File

@@ -7,7 +7,7 @@ from sso import views
urlpatterns = patterns('', urlpatterns = patterns('',
('^$', views.profile), ('^$', views.profile),
(r'^profile/$', views.profile), url(r'^profile/$', views.profile, name='sso-profile'),
(r'^profile/add/service', views.service_add), (r'^profile/add/service', views.service_add),
(r'^profile/del/service/$', views.service_del), (r'^profile/del/service/$', views.service_del),
(r'^profile/del/service/(?P<serviceid>\d+)/$', views.service_del), (r'^profile/del/service/(?P<serviceid>\d+)/$', views.service_del),
@@ -23,6 +23,8 @@ urlpatterns = patterns('',
(r'^users/$', views.user_lookup), (r'^users/$', views.user_lookup),
url(r'^users/(?P<username>.*)/addnote/$', login_required(views.AddUserNote.as_view()), name='sso-addusernote'), url(r'^users/(?P<username>.*)/addnote/$', login_required(views.AddUserNote.as_view()), name='sso-addusernote'),
url(r'^users/(?P<username>.*)/$', views.user_view, name='sso-viewuser'), url(r'^users/(?P<username>.*)/$', views.user_view, name='sso-viewuser'),
url(r'^address/$', login_required(views.UserIPAddressView.as_view()), name='sso-ipaddress'),
) )
urlpatterns += patterns('django.views.generic.simple', urlpatterns += patterns('django.views.generic.simple',

View File

@@ -13,7 +13,7 @@ from django.contrib.auth.decorators import login_required
from django.template import RequestContext from django.template import RequestContext
from django.core import serializers from django.core import serializers
from django.conf import settings from django.conf import settings
from django.views.generic import FormView from django.views.generic import FormView, ListView
from gargoyle import gargoyle from gargoyle import gargoyle
from gargoyle.decorators import switch_is_active 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_api.tasks import import_apikey, import_apikey_result, update_user_access
from eve_proxy.models import ApiAccessLog from eve_proxy.models import ApiAccessLog
from reddit.tasks import update_user_flair 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 from sso.forms import UserServiceAccountForm, ServiceAccountResetForm, UserLookupForm, APIPasswordForm, EmailChangeForm, PrimaryCharacterForm, UserNoteForm
@login_required @login_required
@@ -258,13 +258,13 @@ def refresh_access(request, userid=0, corpid=0, allianceid=0):
for u in users: for u in users:
update_user_access.delay(u.id) update_user_access.delay(u.id)
messages.add_message(request, messages.INFO, "%s accounts queued for update." % users.count()) 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'): if allianceid > 0 and request.user.has_perm('sso.can_refresh_users'):
users = User.objects.filter(eveaccount__characters__corporation__alliance__id=allianceid).distinct() users = User.objects.filter(eveaccount__characters__corporation__alliance__id=allianceid).distinct()
for u in users: for u in users:
update_user_access.delay(u.id) update_user_access.delay(u.id)
messages.add_message(request, messages.INFO, "%s accounts queued for update." % users.count()) 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: else:
update_user_access(request.user.id) update_user_access(request.user.id)
messages.add_message(request, messages.INFO, "User access updated.") messages.add_message(request, messages.INFO, "User access updated.")
@@ -366,3 +366,28 @@ class AddUserNote(FormView):
obj.save() obj.save()
return super(AddUserNote, self).form_valid(form) 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