Various fixes for views to use more standard approach

This commit is contained in:
2011-07-19 11:50:54 +01:00
parent aa637553ff
commit 4029aab77d
2 changed files with 40 additions and 44 deletions

View File

@@ -28,7 +28,6 @@ from sso.forms import UserServiceAccountForm, ServiceAccountResetForm, UserLooku
def profile(request): def profile(request):
""" Displays the user's profile page """ """ Displays the user's profile page """
user = request.user
try: try:
profile = request.user.get_profile() profile = request.user.get_profile()
except SSOUser.DoesNotExist: except SSOUser.DoesNotExist:
@@ -38,7 +37,10 @@ def profile(request):
if not profile.primary_character and EVEPlayerCharacter.objects.filter(eveaccount__user=request.user).count(): if not profile.primary_character and EVEPlayerCharacter.objects.filter(eveaccount__user=request.user).count():
return redirect('sso.views.primarychar_change') return redirect('sso.views.primarychar_change')
return render_to_response('sso/profile.html', locals(), context_instance=RequestContext(request)) context = {
'profile': request.user.get_profile()
}
return render_to_response('sso/profile.html', context, context_instance=RequestContext(request))
@login_required @login_required
@@ -92,7 +94,7 @@ def service_add(request):
@login_required @login_required
def service_del(request, serviceid=0): def service_del(request, serviceid=0, confirm_template='sso/serviceaccount/deleteconfirm.html'):
""" Delete a service from a user's account """ """ Delete a service from a user's account """
if serviceid > 0: if serviceid > 0:
@@ -113,71 +115,65 @@ def service_del(request, serviceid=0):
else: else:
messages.add_message(request, messages.INFO, "Service account successfully deleted.") messages.add_message(request, messages.INFO, "Service account successfully deleted.")
else: else:
return render_to_response('sso/serviceaccount/deleteconfirm.html', locals(), context_instance=RequestContext(request)) return render_to_response(confirm_template, locals(), context_instance=RequestContext(request))
return redirect('sso.views.profile') return redirect('sso.views.profile')
@login_required @login_required
def service_reset(request, serviceid=0): def service_reset(request, serviceid, template='sso/serviceaccount/reset.html', complete_template='sso/serviceaccount/resetcomplete.html'):
""" Reset a user's password on a service """ """ Reset a user's password on a service """
if serviceid > 0: acc = get_object_or_404(ServiceAccount, id=serviceid)
try:
acc = ServiceAccount.objects.get(id=serviceid)
except ServiceAccount.DoesNotExist:
return redirect('sso.views.profile')
# If the account is inactive, or the service doesn't require a password, redirect # If the account is inactive, or the service doesn't require a password, redirect
if not acc.active or ('require_password' in acc.service.settings and not acc.service.settings['require_password']): if not acc.active or ('require_password' in acc.service.settings and not acc.service.settings['require_password']):
return redirect('sso.views.profile') return redirect('sso.views.profile')
if acc.user == request.user: # Check if the ServiceAccount belongs to the requesting user
if not request.method == 'POST': if not acc.user == request.user:
form = ServiceAccountResetForm() return redirect('sso.views.profile')
return render_to_response('sso/serviceaccount/reset.html', locals(), context_instance=RequestContext(request))
form = ServiceAccountResetForm(request.POST) if request.method == 'POST':
if form.is_valid(): form = ServiceAccountResetForm(request.POST)
if settings.GENERATE_SERVICE_PASSWORD: if form.is_valid():
passwd = hashlib.sha1('%s%s%s' % (acc.service_uid, settings.SECRET_KEY, random.randint(0, 2147483647))).hexdigest() if settings.GENERATE_SERVICE_PASSWORD:
else: passwd = hashlib.sha1('%s%s%s' % (acc.service_uid, settings.SECRET_KEY, random.randint(0, 2147483647))).hexdigest()
passwd = form.cleaned_data['password']
api = acc.service.api_class
if not api.reset_password(acc.service_uid, passwd):
error = True
return render_to_response('sso/serviceaccount/resetcomplete.html', locals(), context_instance=RequestContext(request))
else: else:
return render_to_response('sso/serviceaccount/reset.html', locals(), context_instance=RequestContext(request)) passwd = form.cleaned_data['password']
return redirect('sso.views.profile') if not acc.service.api_class.reset_password(acc.service_uid, passwd):
error = True
return render_to_response(complete_template, locals(), context_instance=RequestContext(request))
else:
form = ServiceAccountResetForm()
return render_to_response(template, locals(), context_instance=RequestContext(request))
@login_required @login_required
def user_view(request, username=None): def user_view(request, username, template='sso/lookup/user.html'):
""" View a user's profile as a admin """ """ View a user's profile as a admin """
if not request.user.has_perm('sso.can_view_users') and not request.user.has_perm('sso.can_view_users_restricted'): if not request.user.has_perm('sso.can_view_users') and not request.user.has_perm('sso.can_view_users_restricted'):
return redirect('sso.views.profile') return redirect('sso.views.profile')
if username: user = get_object_or_404(User, username=username)
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
return redirect('sso.views.user_lookup')
else:
return redirect('sso.views.user_lookup')
profile = user.get_profile() context = {
'user': user,
'profile': user.get_profile(),
'services': ServiceAccount.objects.select_related('service').filter(user=user).only('service__name', 'service_uid', 'active'),
'characters': EVEPlayerCharacter.objects.select_related('corporation').filter(eveaccount__user=user).only('id', 'name', 'corporation__name'),
}
# If the HR app is installed, check the blacklist
if installed('hr'): if installed('hr'):
if request.user.has_perm('hr.add_blacklist'): if request.user.has_perm('hr.add_blacklist'):
from hr.utils import blacklist_values from hr.utils import blacklist_values
blacklisted = len(blacklist_values(user)) context['blacklisted'] = len(blacklist_values(user))
services = ServiceAccount.objects.select_related('service').filter(user=user).only('service__name', 'service_uid', 'active')
characters = EVEPlayerCharacter.objects.select_related('corporation').filter(eveaccount__user=user).only('id', 'name', 'corporation__name')
return render_to_response('sso/lookup/user.html', locals(), context_instance=RequestContext(request)) return render_to_response(template, context, context_instance=RequestContext(request))
@login_required @login_required

View File

@@ -14,7 +14,7 @@
</div> </div>
<div id="navigation"> <div id="navigation">
<ul> <ul>
{% if request.user %} {% if user %}
<li><a href="{% url sso.views.profile %}">Profile</a></li> <li><a href="{% url sso.views.profile %}">Profile</a></li>
{% if "groups"|installed %} {% if "groups"|installed %}
<li><a href="{% url groups.views.group_list %}">Groups</a></li> <li><a href="{% url groups.views.group_list %}">Groups</a></li>