from django.db.utils import IntegrityError
from django.contrib.auth.views import password_change
from django.core.exceptions import ValidationError
-from django.db.models import Q
+from django.views.decorators.http import require_http_methods
from astakos.im.models import AstakosUser, Invitation, ApprovalTerms
from astakos.im.activation_backends import get_backend, SimpleBackend
from astakos.im.util import get_context, prepare_response, set_cookie, get_query
from astakos.im.forms import *
-from astakos.im.functions import send_greeting, send_feedback, SendMailError, \
- invite as invite_func, logout as auth_logout, activate as activate_func, switch_account_to_shibboleth
-from astakos.im.settings import DEFAULT_CONTACT_EMAIL, DEFAULT_FROM_EMAIL, COOKIE_NAME, COOKIE_DOMAIN, IM_MODULES, SITENAME, LOGOUT_NEXT, LOGGING_LEVEL
+from astakos.im.functions import (send_greeting, send_feedback, SendMailError,
+ invite as invite_func, logout as auth_logout, activate as activate_func
+)
+from astakos.im.settings import (DEFAULT_CONTACT_EMAIL, DEFAULT_FROM_EMAIL,
+ COOKIE_NAME, COOKIE_DOMAIN, IM_MODULES, SITENAME, LOGOUT_NEXT, LOGGING_LEVEL
+)
logger = logging.getLogger(__name__)
return func(request, *args, **kwargs)
return wrapper
+@require_http_methods(["GET", "POST"])
@signed_terms_required
def index(request, login_template_name='im/login.html', profile_template_name='im/profile.html', extra_context={}):
"""
template_name = login_template_name
if request.user.is_authenticated():
return HttpResponseRedirect(reverse('astakos.im.views.edit_profile'))
- return render_response(template_name,
- login_form = LoginForm(request=request),
- context_instance = get_context(request, extra_context))
+
+ return render_response(
+ template_name,
+ login_form = LoginForm(request=request),
+ context_instance = get_context(request, extra_context)
+ )
+@require_http_methods(["GET", "POST"])
@login_required
@signed_terms_required
@transaction.commit_manually
invitation_form = form,
context_instance = context)
+@require_http_methods(["GET", "POST"])
@login_required
@signed_terms_required
def edit_profile(request, template_name='im/profile.html', extra_context={}):
next = request.POST.get('next')
if next:
return redirect(next)
- msg = _('Profile has been updated successfully')
+ msg = _('<p>Profile has been updated successfully</p>')
messages.add_message(request, messages.SUCCESS, msg)
except ValueError, ve:
messages.add_message(request, messages.ERROR, ve)
context_instance = get_context(request,
extra_context))
+@require_http_methods(["GET", "POST"])
def signup(request, template_name='im/signup.html', on_success='im/signup_complete.html', extra_context={}, backend=None):
"""
Allows a user to create a local account.
message = e.message
messages.add_message(request, status, message)
except BaseException, e:
+ logger.exception(e)
status = messages.ERROR
message = _('Something went wrong.')
messages.add_message(request, status, message)
provider = provider,
context_instance=get_context(request, extra_context))
+@require_http_methods(["GET", "POST"])
@login_required
@signed_terms_required
def feedback(request, template_name='im/feedback.html', email_template_name='im/feedback_mail.txt', extra_context={}):
feedback_form = form,
context_instance = get_context(request, extra_context))
+@require_http_methods(["GET", "POST"])
def logout(request, template='registration/logged_out.html', extra_context={}):
"""
Wraps `django.contrib.auth.logout` and delete the cookie.
"""
- msg = 'Cookie deleted for %s' % (request.user.email)
- auth_logout(request)
response = HttpResponse()
- response.delete_cookie(COOKIE_NAME, path='/', domain=COOKIE_DOMAIN)
- logger._log(LOGGING_LEVEL, msg, [])
+ if request.user.is_authenticated():
+ email = request.user.email
+ auth_logout(request)
+ response.delete_cookie(COOKIE_NAME, path='/', domain=COOKIE_DOMAIN)
+ msg = 'Cookie deleted for %s' % email
+ logger._log(LOGGING_LEVEL, msg, [])
next = request.GET.get('next')
if next:
response['Location'] = next
response['Location'] = LOGOUT_NEXT
response.status_code = 301
return response
- messages.add_message(request, messages.SUCCESS, _('You have successfully logged out.'))
+ messages.add_message(request, messages.SUCCESS, _('<p>You have successfully logged out.</p>'))
context = get_context(request, extra_context)
response.write(render_to_string(template, context_instance=context))
return response
+@require_http_methods(["GET", "POST"])
@transaction.commit_manually
def activate(request, greeting_email_template_name='im/welcome_email.txt', helpdesk_email_template_name='im/helpdesk_notification.txt'):
"""
return index(request)
try:
- local_user = AstakosUser.objects.get(~Q(id = user.id), email=user.email, is_active=True)
- except AstakosUser.DoesNotExist:
- try:
- activate_func(user, greeting_email_template_name, helpdesk_email_template_name, verify_email=True)
- response = prepare_response(request, user, next, renew=True)
- transaction.commit()
- return response
- except SendMailError, e:
- message = e.message
- messages.add_message(request, messages.ERROR, message)
- transaction.rollback()
- return index(request)
- except BaseException, e:
- status = messages.ERROR
- message = _('Something went wrong.')
- messages.add_message(request, messages.ERROR, message)
- logger.exception(e)
- transaction.rollback()
- return index(request)
- else:
- try:
- user = switch_account_to_shibboleth(user, local_user, greeting_email_template_name)
- response = prepare_response(request, user, next, renew=True)
- transaction.commit()
- return response
- except SendMailError, e:
- message = e.message
- messages.add_message(request, messages.ERROR, message)
- transaction.rollback()
- return index(request)
- except BaseException, e:
- status = messages.ERROR
- message = _('Something went wrong.')
- messages.add_message(request, messages.ERROR, message)
- logger.exception(e)
- transaction.rollback()
- return index(request)
+ activate_func(user, greeting_email_template_name, helpdesk_email_template_name, verify_email=True)
+ response = prepare_response(request, user, next, renew=True)
+ transaction.commit()
+ return response
+ except SendMailError, e:
+ message = e.message
+ messages.add_message(request, messages.ERROR, message)
+ transaction.rollback()
+ return index(request)
+ except BaseException, e:
+ status = messages.ERROR
+ message = _('Something went wrong.')
+ messages.add_message(request, messages.ERROR, message)
+ logger.exception(e)
+ transaction.rollback()
+ return index(request)
+@require_http_methods(["GET", "POST"])
def approval_terms(request, term_id=None, template_name='im/approval_terms.html', extra_context={}):
term = None
terms = None
approval_terms_form = form,
context_instance = get_context(request, extra_context))
+@require_http_methods(["GET", "POST"])
@signed_terms_required
def change_password(request):
return password_change(request,
post_change_redirect=reverse('astakos.im.views.edit_profile'),
password_change_form=ExtendedPasswordChangeForm)
+@require_http_methods(["GET", "POST"])
+@login_required
+@signed_terms_required
@transaction.commit_manually
def change_email(request, activation_key=None,
email_template_name='registration/email_change_email.txt',
return render_response(form_template_name,
form = form,
context_instance = get_context(request,
- extra_context))
\ No newline at end of file
+ extra_context))