Revision aab4d540 snf-astakos-app/astakos/im/views.py
b/snf-astakos-app/astakos/im/views.py | ||
---|---|---|
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
|
34 | 34 |
import logging |
35 |
import socket |
|
36 | 35 |
|
37 |
from smtplib import SMTPException |
|
38 | 36 |
from urllib import quote |
39 | 37 |
from functools import wraps |
38 |
from datetime import datetime, timedelta |
|
40 | 39 |
|
41 | 40 |
from django.contrib import messages |
42 | 41 |
from django.contrib.auth.decorators import login_required |
43 | 42 |
from django.contrib.auth.views import password_change |
44 |
from django.core.exceptions import ValidationError |
|
45 |
from django.core.mail import send_mail |
|
46 | 43 |
from django.core.urlresolvers import reverse |
47 | 44 |
from django.db import transaction |
48 | 45 |
from django.db.models import Q |
... | ... | |
51 | 48 |
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden, \ |
52 | 49 |
HttpResponseRedirect, HttpResponseBadRequest |
53 | 50 |
from django.shortcuts import redirect |
54 |
from django.template.loader import render_to_string
|
|
51 |
from django.template import RequestContext, loader
|
|
55 | 52 |
from django.utils.http import urlencode |
56 | 53 |
from django.utils.translation import ugettext as _ |
57 |
from django.views.generic.create_update import * |
|
58 |
from django.views.generic.list_detail import * |
|
54 |
from django.views.generic.create_update import (create_object, delete_object, |
|
55 |
get_model_and_form_class |
|
56 |
) |
|
57 |
from django.views.generic.list_detail import object_list, object_detail |
|
59 | 58 |
|
60 |
from astakos.im.models import AstakosUser, Invitation, ApprovalTerms, AstakosGroup, Resource |
|
59 |
from astakos.im.models import (AstakosUser, ApprovalTerms, AstakosGroup, Resource, |
|
60 |
EmailChange, GroupKind, Membership) |
|
61 | 61 |
from astakos.im.activation_backends import get_backend, SimpleBackend |
62 | 62 |
from astakos.im.util import get_context, prepare_response, set_cookie, get_query |
63 |
from astakos.im.forms import * |
|
64 |
from astakos.im.functions import send_greeting, send_feedback, SendMailError, \ |
|
65 |
invite as invite_func, logout as auth_logout, activate as activate_func, \ |
|
63 |
from astakos.im.forms import (LoginForm, InvitationForm, ProfileForm, FeedbackForm, |
|
64 |
SignApprovalTermsForm, ExtendedPasswordChangeForm, EmailChangeForm, |
|
65 |
AstakosGroupCreationForm, AstakosGroupSearchForm |
|
66 |
) |
|
67 |
from astakos.im.functions import (send_feedback, SendMailError, |
|
68 |
invite as invite_func, logout as auth_logout, activate as activate_func, |
|
66 | 69 |
switch_account_to_shibboleth, send_admin_notification, SendNotificationError |
67 |
from astakos.im.settings import DEFAULT_CONTACT_EMAIL, DEFAULT_FROM_EMAIL, COOKIE_NAME, COOKIE_DOMAIN, IM_MODULES, SITENAME, LOGOUT_NEXT, LOGGING_LEVEL |
|
70 |
) |
|
71 |
from astakos.im.settings import (COOKIE_NAME, COOKIE_DOMAIN, SITENAME, LOGOUT_NEXT, |
|
72 |
LOGGING_LEVEL |
|
73 |
) |
|
68 | 74 |
|
69 | 75 |
logger = logging.getLogger(__name__) |
70 | 76 |
|
... | ... | |
77 | 83 |
if tab is None: |
78 | 84 |
tab = template.partition('_')[0].partition('.html')[0] |
79 | 85 |
kwargs.setdefault('tab', tab) |
80 |
html = render_to_string(template, kwargs, context_instance=context_instance) |
|
86 |
html = loader.render_to_string(template, kwargs, context_instance=context_instance)
|
|
81 | 87 |
response = HttpResponse(html, status=status) |
82 | 88 |
if reset_cookie: |
83 | 89 |
set_cookie(response, context_instance['request'].user) |
... | ... | |
114 | 120 |
return wrapper |
115 | 121 |
|
116 | 122 |
@signed_terms_required |
117 |
def index(request, login_template_name='im/login.html', profile_template_name='im/profile.html', extra_context={}):
|
|
123 |
def index(request, login_template_name='im/login.html', extra_context=None):
|
|
118 | 124 |
""" |
119 | 125 |
If there is logged on user renders the profile page otherwise renders login page. |
120 | 126 |
|
... | ... | |
146 | 152 |
@login_required |
147 | 153 |
@signed_terms_required |
148 | 154 |
@transaction.commit_manually |
149 |
def invite(request, template_name='im/invitations.html', extra_context={}):
|
|
155 |
def invite(request, template_name='im/invitations.html', extra_context=None):
|
|
150 | 156 |
""" |
151 | 157 |
Allows a user to invite somebody else. |
152 | 158 |
|
... | ... | |
222 | 228 |
|
223 | 229 |
@login_required |
224 | 230 |
@signed_terms_required |
225 |
def edit_profile(request, template_name='im/profile.html', extra_context={}):
|
|
231 |
def edit_profile(request, template_name='im/profile.html', extra_context=None):
|
|
226 | 232 |
""" |
227 | 233 |
Allows a user to edit his/her profile. |
228 | 234 |
|
... | ... | |
251 | 257 |
|
252 | 258 |
* LOGIN_URL: login uri |
253 | 259 |
""" |
260 |
extra_context = extra_context or {} |
|
254 | 261 |
form = ProfileForm(instance=request.user) |
255 | 262 |
extra_context['next'] = request.GET.get('next') |
256 | 263 |
reset_cookie = False |
... | ... | |
279 | 286 |
context_instance = get_context(request, |
280 | 287 |
extra_context)) |
281 | 288 |
|
282 |
def signup(request, template_name='im/signup.html', on_success='im/signup_complete.html', extra_context={}, backend=None):
|
|
289 |
def signup(request, template_name='im/signup.html', on_success='im/signup_complete.html', extra_context=None, backend=None):
|
|
283 | 290 |
""" |
284 | 291 |
Allows a user to create a local account. |
285 | 292 |
|
... | ... | |
338 | 345 |
if additional_email != user.email: |
339 | 346 |
user.additionalmail_set.create(email=additional_email) |
340 | 347 |
msg = 'Additional email: %s saved for user %s.' % (additional_email, user.email) |
341 |
logger._log(LOGGING_LEVEL, msg, [])
|
|
348 |
logger.log(LOGGING_LEVEL, msg)
|
|
342 | 349 |
if user and user.is_active: |
343 | 350 |
next = request.POST.get('next', '') |
344 | 351 |
return prepare_response(request, user, next=next) |
... | ... | |
359 | 366 |
|
360 | 367 |
@login_required |
361 | 368 |
@signed_terms_required |
362 |
def feedback(request, template_name='im/feedback.html', email_template_name='im/feedback_mail.txt', extra_context={}):
|
|
369 |
def feedback(request, template_name='im/feedback.html', email_template_name='im/feedback_mail.txt', extra_context=None):
|
|
363 | 370 |
""" |
364 | 371 |
Allows a user to send feedback. |
365 | 372 |
|
... | ... | |
399 | 406 |
try: |
400 | 407 |
send_feedback(msg, data, request.user, email_template_name) |
401 | 408 |
except SendMailError, e: |
402 |
status = messages.ERROR |
|
403 | 409 |
messages.error(request, message) |
404 | 410 |
else: |
405 | 411 |
message = _('Feedback successfully sent') |
406 |
messages.succeess(request, message)
|
|
412 |
messages.success(request, message) |
|
407 | 413 |
return render_response(template_name, |
408 | 414 |
feedback_form = form, |
409 | 415 |
context_instance = get_context(request, extra_context)) |
410 | 416 |
|
411 | 417 |
@signed_terms_required |
412 |
def logout(request, template='registration/logged_out.html', extra_context={}):
|
|
418 |
def logout(request, template='registration/logged_out.html', extra_context=None):
|
|
413 | 419 |
""" |
414 | 420 |
Wraps `django.contrib.auth.logout` and delete the cookie. |
415 | 421 |
""" |
... | ... | |
419 | 425 |
auth_logout(request) |
420 | 426 |
response.delete_cookie(COOKIE_NAME, path='/', domain=COOKIE_DOMAIN) |
421 | 427 |
msg = 'Cookie deleted for %s' % email |
422 |
logger._log(LOGGING_LEVEL, msg, [])
|
|
428 |
logger.log(LOGGING_LEVEL, msg)
|
|
423 | 429 |
next = request.GET.get('next') |
424 | 430 |
if next: |
425 | 431 |
response['Location'] = next |
... | ... | |
431 | 437 |
return response |
432 | 438 |
messages.success(request, _('You have successfully logged out.')) |
433 | 439 |
context = get_context(request, extra_context) |
434 |
response.write(render_to_string(template, context_instance=context)) |
|
440 |
response.write(loader.render_to_string(template, context_instance=context))
|
|
435 | 441 |
return response |
436 | 442 |
|
437 | 443 |
@transaction.commit_manually |
... | ... | |
505 | 511 |
transaction.rollback() |
506 | 512 |
return index(request) |
507 | 513 |
|
508 |
def approval_terms(request, term_id=None, template_name='im/approval_terms.html', extra_context={}):
|
|
514 |
def approval_terms(request, term_id=None, template_name='im/approval_terms.html', extra_context=None):
|
|
509 | 515 |
term = None |
510 | 516 |
terms = None |
511 | 517 |
if not term_id: |
... | ... | |
515 | 521 |
pass |
516 | 522 |
else: |
517 | 523 |
try: |
518 |
term = ApprovalTerms.objects.get(id=term_id)
|
|
519 |
except ApprovalTermDoesNotExist, e: |
|
524 |
term = ApprovalTerms.objects.get(id=term_id) |
|
525 |
except ApprovalTerms.DoesNotExist, e:
|
|
520 | 526 |
pass |
521 | 527 |
|
522 | 528 |
if not term: |
... | ... | |
558 | 564 |
email_template_name='registration/email_change_email.txt', |
559 | 565 |
form_template_name='registration/email_change_form.html', |
560 | 566 |
confirm_template_name='registration/email_change_done.html', |
561 |
extra_context={}):
|
|
567 |
extra_context=None):
|
|
562 | 568 |
if activation_key: |
563 | 569 |
try: |
564 | 570 |
user = EmailChange.objects.change_email(activation_key) |
... | ... | |
657 | 663 |
) |
658 | 664 |
except SendNotificationError, e: |
659 | 665 |
messages.error(request, e, fail_silently=True) |
660 |
return redirect(post_save_redirect, new_object)
|
|
666 |
return HttpResponseRedirect(post_save_redirect % new_object.__dict__)
|
|
661 | 667 |
else: |
662 | 668 |
now = datetime.now() |
663 | 669 |
data = { |
Also available in: Unified diff