mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-18 04:09:29 +00:00
Massive reworking on the user lookup form to support various other lookup types (Character/Reddit ID)
This commit is contained in:
27
sso/forms.py
27
sso/forms.py
@@ -17,7 +17,6 @@ class EveAPIForm(forms.Form):
|
|||||||
def clean(self):
|
def clean(self):
|
||||||
if not len(self.cleaned_data['api_key']) == 64:
|
if not len(self.cleaned_data['api_key']) == 64:
|
||||||
raise forms.ValidationError("API Key provided is invalid (Not 64 characters long)")
|
raise forms.ValidationError("API Key provided is invalid (Not 64 characters long)")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
eaccount = EVEAccount.objects.get(api_user_id=self.cleaned_data['user_id'])
|
eaccount = EVEAccount.objects.get(api_user_id=self.cleaned_data['user_id'])
|
||||||
except EVEAccount.DoesNotExist:
|
except EVEAccount.DoesNotExist:
|
||||||
@@ -61,11 +60,29 @@ class RedditAccountForm(forms.Form):
|
|||||||
class UserLookupForm(forms.Form):
|
class UserLookupForm(forms.Form):
|
||||||
""" User Lookup Form """
|
""" User Lookup Form """
|
||||||
|
|
||||||
|
choices = [ (1, "Auth Username"),
|
||||||
|
(2, "Character"),
|
||||||
|
(3, "Reddit ID") ]
|
||||||
|
|
||||||
|
type = forms.ChoiceField(label = u'Search type', choices = choices)
|
||||||
username = forms.CharField(label = u'User ID', max_length=64)
|
username = forms.CharField(label = u'User ID', max_length=64)
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
try:
|
|
||||||
acc = User.objects.get(username=self.cleaned_data['username'])
|
if self.cleaned_data['type'] == 1:
|
||||||
except User.DoesNotExist:
|
try:
|
||||||
raise forms.ValidationError("User doesn't exist")
|
acc = User.objects.filter(username=self.cleaned_data['username'])
|
||||||
|
except User.DoesNotExist:
|
||||||
|
raise forms.ValidationError("User doesn't exist")
|
||||||
|
elif self.cleaned_data['type'] == 2:
|
||||||
|
try:
|
||||||
|
acc = EVEPlayerCharacter.filter(name=self.cleaned_data['username'])
|
||||||
|
except User.DoesNotExist:
|
||||||
|
raise forms.ValidationError("Character doesn't exist")
|
||||||
|
elif self.cleaned_data['type'] == 3:
|
||||||
|
try:
|
||||||
|
acc = RedditAccount.filter(name=self.cleaned_data['username'])
|
||||||
|
except User.DoesNotExist:
|
||||||
|
raise forms.ValidationError("Account doesn't exist")
|
||||||
|
|
||||||
return self.cleaned_data
|
return self.cleaned_data
|
||||||
|
|||||||
@@ -18,6 +18,6 @@ urlpatterns = patterns('',
|
|||||||
(r'^profile/del/reddit/(?P<redditid>\d+)/$', views.reddit_del),
|
(r'^profile/del/reddit/(?P<redditid>\d+)/$', views.reddit_del),
|
||||||
(r'^profile/characters$', views.characters),
|
(r'^profile/characters$', views.characters),
|
||||||
(r'^profile/characters/(?P<charid>.*)/$', views.characters),
|
(r'^profile/characters/(?P<charid>.*)/$', views.characters),
|
||||||
(r'^users/(?P<user>.*)/$', views.user_view),
|
(r'^users/(?P<username>.*)/$', views.user_view),
|
||||||
(r'^users/$', views.user_view),
|
(r'^users/$', views.user_lookup),
|
||||||
)
|
)
|
||||||
|
|||||||
99
sso/views.py
99
sso/views.py
@@ -155,7 +155,6 @@ def service_del(request, serviceid=0):
|
|||||||
return HttpResponseRedirect(reverse('sso.views.profile'))
|
return HttpResponseRedirect(reverse('sso.views.profile'))
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
print request.POST
|
|
||||||
if 'confirm-delete' in request.POST:
|
if 'confirm-delete' in request.POST:
|
||||||
acc.delete()
|
acc.delete()
|
||||||
request.user.message_set.create(message="Service account successfully deleted.")
|
request.user.message_set.create(message="Service account successfully deleted.")
|
||||||
@@ -190,14 +189,11 @@ def service_reset(request, serviceid=0, accept=0):
|
|||||||
def reddit_add(request):
|
def reddit_add(request):
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = RedditAccountForm(request.POST)
|
form = RedditAccountForm(request.POST)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
|
|
||||||
acc = RedditAccount()
|
acc = RedditAccount()
|
||||||
|
|
||||||
acc.user = request.user
|
acc.user = request.user
|
||||||
acc.username = form.cleaned_data['username']
|
acc.username = form.cleaned_data['username']
|
||||||
acc.api_update()
|
acc.api_update()
|
||||||
|
|
||||||
acc.save()
|
acc.save()
|
||||||
|
|
||||||
request.user.message_set.create(message="Reddit account %s successfully added." % acc.username)
|
request.user.message_set.create(message="Reddit account %s successfully added." % acc.username)
|
||||||
@@ -225,47 +221,60 @@ def reddit_del(request, redditid=0):
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def user_view(request, user=None):
|
def user_view(request, username=None):
|
||||||
|
if username:
|
||||||
|
user = User.objects.get(username=username)
|
||||||
|
else:
|
||||||
|
return HttpResponseRedirect(reverse('sso.views.user_lookup'))
|
||||||
|
|
||||||
|
profile = user.get_profile()
|
||||||
|
is_admin = request.user.is_staff
|
||||||
|
if is_admin:
|
||||||
|
try:
|
||||||
|
services = ServiceAccount.objects.filter(user=user).all()
|
||||||
|
except ServiceAccount.DoesNotExist:
|
||||||
|
services = None
|
||||||
|
try:
|
||||||
|
reddits = RedditAccount.objects.filter(user=user).all()
|
||||||
|
except ServiceAccount.DoesNotExist:
|
||||||
|
reddits = None
|
||||||
|
try:
|
||||||
|
eveaccounts = EVEAccount.objects.filter(user=user).all()
|
||||||
|
characters = []
|
||||||
|
for acc in eveaccounts:
|
||||||
|
chars = acc.characters.all()
|
||||||
|
for char in chars:
|
||||||
|
characters.append({'name': char.name, 'corp': char.corporation.name})
|
||||||
|
except EVEAccount.DoesNotExist:
|
||||||
|
eveaccounts = None
|
||||||
|
|
||||||
|
return render_to_response('sso/lookup/user.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
def user_lookup(request):
|
||||||
form = UserLookupForm()
|
form = UserLookupForm()
|
||||||
|
|
||||||
if user:
|
if request.method == 'POST':
|
||||||
user = user
|
form = UserLookupForm(request.POST)
|
||||||
elif request.method == 'POST':
|
|
||||||
form = UserLookupForm(request.POST)
|
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
user = form.cleaned_data['username']
|
users = None
|
||||||
else:
|
uids = []
|
||||||
return render_to_response('sso/userlookup.html', locals(), context_instance=RequestContext(request))
|
if form.cleaned_data['type'] == '1':
|
||||||
else:
|
users = User.objects.filter(username=form.cleaned_data['username'])
|
||||||
return render_to_response('sso/userlookup.html', locals(), context_instance=RequestContext(request))
|
elif form.cleaned_data['type'] == '2':
|
||||||
|
uid = EVEAccount.objects.filter(characters__name=form.cleaned_data['username']).values('user')
|
||||||
|
for u in uid: uids.append(u['user'])
|
||||||
|
users = User.objects.filter(id__in=uids)
|
||||||
|
elif form.cleaned_data['type'] == '3':
|
||||||
|
uid = RedditAccount.objects.filter(username=form.cleaned_data['username']).values('user')
|
||||||
|
for u in uid: uids.append(u['user'])
|
||||||
|
users = User.objects.filter(id__in=uids)
|
||||||
|
else:
|
||||||
|
request.user.message_set.create(message="Error parsing form, Type: %s, Value: %s" % (form.cleaned_data['type'], form.cleaned_data['username']))
|
||||||
|
return HttpResponseRedirect(reverse('sso.views.user_lookup'))
|
||||||
|
|
||||||
is_admin = request.user.is_staff
|
if users and len(users) == 1:
|
||||||
|
return HttpResponseRedirect(reverse(user_view, kwargs={'username': users[0].username}))
|
||||||
user = User.objects.get(username=user)
|
elif users and len(users) > 1:
|
||||||
profile = user.get_profile()
|
render_to_response('sso/lookup/lookuplist.html', locals(), context_instance=RequestContext(request))
|
||||||
|
|
||||||
if is_admin:
|
return render_to_response('sso/lookup/userlookup.html', locals(), context_instance=RequestContext(request))
|
||||||
try:
|
|
||||||
services = ServiceAccount.objects.filter(user=user).all()
|
|
||||||
except ServiceAccount.DoesNotExist:
|
|
||||||
services = None
|
|
||||||
|
|
||||||
try:
|
|
||||||
reddits = RedditAccount.objects.filter(user=user).all()
|
|
||||||
except ServiceAccount.DoesNotExist:
|
|
||||||
reddits = None
|
|
||||||
|
|
||||||
try:
|
|
||||||
eveaccounts = EVEAccount.objects.filter(user=user).all()
|
|
||||||
|
|
||||||
characters = []
|
|
||||||
|
|
||||||
for acc in eveaccounts:
|
|
||||||
chars = acc.characters.all()
|
|
||||||
for char in chars:
|
|
||||||
characters.append({'name': char.name, 'corp': char.corporation.name})
|
|
||||||
|
|
||||||
except EVEAccount.DoesNotExist:
|
|
||||||
eveaccounts = None
|
|
||||||
|
|
||||||
return render_to_response('sso/user.html', locals(), context_instance=RequestContext(request))
|
|
||||||
|
|||||||
15
templates/sso/lookup/lookuplist.html
Normal file
15
templates/sso/lookup/lookuplist.html
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}User Lookup List{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<p>More than one user was found matching your criteria:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
{% for user in users %}
|
||||||
|
<li><a href="/users/{{ user.name }}/">{{ user.name }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user