Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / functions.py @ 63836eda

History | View | Annotate | Download (11.9 kB)

1 f36af44a Antony Chazapis
# Copyright 2011 GRNET S.A. All rights reserved.
2 5ce3ce4f Sofia Papagiannaki
#
3 f36af44a Antony Chazapis
# Redistribution and use in source and binary forms, with or
4 f36af44a Antony Chazapis
# without modification, are permitted provided that the following
5 f36af44a Antony Chazapis
# conditions are met:
6 5ce3ce4f Sofia Papagiannaki
#
7 f36af44a Antony Chazapis
#   1. Redistributions of source code must retain the above
8 f36af44a Antony Chazapis
#      copyright notice, this list of conditions and the following
9 f36af44a Antony Chazapis
#      disclaimer.
10 5ce3ce4f Sofia Papagiannaki
#
11 f36af44a Antony Chazapis
#   2. Redistributions in binary form must reproduce the above
12 f36af44a Antony Chazapis
#      copyright notice, this list of conditions and the following
13 f36af44a Antony Chazapis
#      disclaimer in the documentation and/or other materials
14 f36af44a Antony Chazapis
#      provided with the distribution.
15 5ce3ce4f Sofia Papagiannaki
#
16 f36af44a Antony Chazapis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 f36af44a Antony Chazapis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 f36af44a Antony Chazapis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 f36af44a Antony Chazapis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 f36af44a Antony Chazapis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 f36af44a Antony Chazapis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 f36af44a Antony Chazapis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 f36af44a Antony Chazapis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 f36af44a Antony Chazapis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 f36af44a Antony Chazapis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 f36af44a Antony Chazapis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 f36af44a Antony Chazapis
# POSSIBILITY OF SUCH DAMAGE.
28 5ce3ce4f Sofia Papagiannaki
#
29 f36af44a Antony Chazapis
# The views and conclusions contained in the software and
30 f36af44a Antony Chazapis
# documentation are those of the authors and should not be
31 f36af44a Antony Chazapis
# interpreted as representing official policies, either expressed
32 f36af44a Antony Chazapis
# or implied, of GRNET S.A.
33 f36af44a Antony Chazapis
34 f36af44a Antony Chazapis
import logging
35 8f5a3a06 Sofia Papagiannaki
import socket
36 f36af44a Antony Chazapis
37 f36af44a Antony Chazapis
from django.utils.translation import ugettext as _
38 f36af44a Antony Chazapis
from django.template.loader import render_to_string
39 f36af44a Antony Chazapis
from django.core.mail import send_mail
40 f36af44a Antony Chazapis
from django.core.urlresolvers import reverse
41 49790d9d Sofia Papagiannaki
from django.template import Context, loader
42 bf0c6de5 Sofia Papagiannaki
from django.contrib.auth import (
43 bf0c6de5 Sofia Papagiannaki
    login as auth_login,
44 c0b26605 Sofia Papagiannaki
    logout as auth_logout
45 bf0c6de5 Sofia Papagiannaki
)
46 1cbce16f Sofia Papagiannaki
from django.conf import settings
47 9a06d96f Olga Brani
from django.contrib.auth.models import AnonymousUser
48 27e26a41 Sofia Papagiannaki
49 683cf244 Sofia Papagiannaki
from urllib import quote
50 f36af44a Antony Chazapis
from urlparse import urljoin
51 8f5a3a06 Sofia Papagiannaki
from smtplib import SMTPException
52 751d24cf Sofia Papagiannaki
from datetime import datetime
53 111f3da6 Sofia Papagiannaki
from functools import wraps
54 f36af44a Antony Chazapis
55 bf0c6de5 Sofia Papagiannaki
from astakos.im.settings import (
56 c0b26605 Sofia Papagiannaki
    DEFAULT_CONTACT_EMAIL, SITENAME, BASEURL, LOGGING_LEVEL,
57 c0b26605 Sofia Papagiannaki
    VERIFICATION_EMAIL_SUBJECT, ACCOUNT_CREATION_SUBJECT,
58 c0b26605 Sofia Papagiannaki
    GROUP_CREATION_SUBJECT, HELPDESK_NOTIFICATION_EMAIL_SUBJECT,
59 c0b26605 Sofia Papagiannaki
    INVITATION_EMAIL_SUBJECT, GREETING_EMAIL_SUBJECT, FEEDBACK_EMAIL_SUBJECT,
60 c0b26605 Sofia Papagiannaki
    EMAIL_CHANGE_EMAIL_SUBJECT
61 bf0c6de5 Sofia Papagiannaki
)
62 ae497612 Olga Brani
import astakos.im.messages as astakos_messages
63 f36af44a Antony Chazapis
64 f36af44a Antony Chazapis
logger = logging.getLogger(__name__)
65 f36af44a Antony Chazapis
66 5ce3ce4f Sofia Papagiannaki
67 111f3da6 Sofia Papagiannaki
def logged(func, msg):
68 111f3da6 Sofia Papagiannaki
    @wraps(func)
69 111f3da6 Sofia Papagiannaki
    def with_logging(*args, **kwargs):
70 111f3da6 Sofia Papagiannaki
        email = ''
71 111f3da6 Sofia Papagiannaki
        user = None
72 9a06d96f Olga Brani
        try:
73 111f3da6 Sofia Papagiannaki
            request = args[0]
74 9a06d96f Olga Brani
            email = request.user.email
75 9a06d96f Olga Brani
        except (KeyError, AttributeError), e:
76 9a06d96f Olga Brani
            email = ''
77 111f3da6 Sofia Papagiannaki
        r = func(*args, **kwargs)
78 c9e378c7 Sofia Papagiannaki
        if LOGGING_LEVEL:
79 aab4d540 Sofia Papagiannaki
            logger.log(LOGGING_LEVEL, msg % email)
80 111f3da6 Sofia Papagiannaki
        return r
81 111f3da6 Sofia Papagiannaki
    return with_logging
82 111f3da6 Sofia Papagiannaki
83 bf0c6de5 Sofia Papagiannaki
84 bf0c6de5 Sofia Papagiannaki
def login(request, user):
85 bf0c6de5 Sofia Papagiannaki
    auth_login(request, user)
86 c3c2212a Sofia Papagiannaki
    from astakos.im.models import SessionCatalog
87 c3c2212a Sofia Papagiannaki
    SessionCatalog(
88 c0b26605 Sofia Papagiannaki
        session_key=request.session.session_key,
89 c3c2212a Sofia Papagiannaki
        user=user
90 c3c2212a Sofia Papagiannaki
    ).save()
91 bf0c6de5 Sofia Papagiannaki
92 bf0c6de5 Sofia Papagiannaki
login = logged(login, '%s logged in.')
93 111f3da6 Sofia Papagiannaki
logout = logged(auth_logout, '%s logged out.')
94 111f3da6 Sofia Papagiannaki
95 5ce3ce4f Sofia Papagiannaki
96 683cf244 Sofia Papagiannaki
def send_verification(user, template_name='im/activation_email.txt'):
97 f36af44a Antony Chazapis
    """
98 683cf244 Sofia Papagiannaki
    Send email to user to verify his/her email and activate his/her account.
99 5ce3ce4f Sofia Papagiannaki

100 8f5a3a06 Sofia Papagiannaki
    Raises SendVerificationError
101 f36af44a Antony Chazapis
    """
102 6ff7a7ca Sofia Papagiannaki
    url = '%s?auth=%s&next=%s' % (urljoin(BASEURL, reverse('activate')),
103 5ce3ce4f Sofia Papagiannaki
                                  quote(user.auth_token),
104 5ce3ce4f Sofia Papagiannaki
                                  quote(urljoin(BASEURL, reverse('index'))))
105 683cf244 Sofia Papagiannaki
    message = render_to_string(template_name, {
106 5ce3ce4f Sofia Papagiannaki
                               'user': user,
107 5ce3ce4f Sofia Papagiannaki
                               'url': url,
108 5ce3ce4f Sofia Papagiannaki
                               'baseurl': BASEURL,
109 5ce3ce4f Sofia Papagiannaki
                               'site_name': SITENAME,
110 5ce3ce4f Sofia Papagiannaki
                               'support': DEFAULT_CONTACT_EMAIL})
111 1cbce16f Sofia Papagiannaki
    sender = settings.SERVER_EMAIL
112 8f5a3a06 Sofia Papagiannaki
    try:
113 1fcf4a99 Kostas Papadimitriou
        send_mail(_(VERIFICATION_EMAIL_SUBJECT), message, sender, [user.email])
114 8f5a3a06 Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
115 8f5a3a06 Sofia Papagiannaki
        logger.exception(e)
116 8f5a3a06 Sofia Papagiannaki
        raise SendVerificationError()
117 8f5a3a06 Sofia Papagiannaki
    else:
118 111f3da6 Sofia Papagiannaki
        msg = 'Sent activation %s' % user.email
119 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
120 683cf244 Sofia Papagiannaki
121 5ce3ce4f Sofia Papagiannaki
122 751d24cf Sofia Papagiannaki
def send_activation(user, template_name='im/activation_email.txt'):
123 751d24cf Sofia Papagiannaki
    send_verification(user, template_name)
124 751d24cf Sofia Papagiannaki
    user.activation_sent = datetime.now()
125 751d24cf Sofia Papagiannaki
    user.save()
126 683cf244 Sofia Papagiannaki
127 5ce3ce4f Sofia Papagiannaki
128 9a06d96f Olga Brani
def _send_admin_notification(template_name,
129 9a06d96f Olga Brani
                             dictionary=None,
130 9a06d96f Olga Brani
                             subject='alpha2 testing notification',):
131 683cf244 Sofia Papagiannaki
    """
132 1cbce16f Sofia Papagiannaki
    Send notification email to settings.ADMINS.
133 5ce3ce4f Sofia Papagiannaki

134 8f5a3a06 Sofia Papagiannaki
    Raises SendNotificationError
135 683cf244 Sofia Papagiannaki
    """
136 1cbce16f Sofia Papagiannaki
    if not settings.ADMINS:
137 683cf244 Sofia Papagiannaki
        return
138 aab4d540 Sofia Papagiannaki
    dictionary = dictionary or {}
139 3abf6c78 Sofia Papagiannaki
    message = render_to_string(template_name, dictionary)
140 1cbce16f Sofia Papagiannaki
    sender = settings.SERVER_EMAIL
141 8f5a3a06 Sofia Papagiannaki
    try:
142 9a06d96f Olga Brani
        send_mail(subject,
143 8cc49f4d Sofia Papagiannaki
                  message, sender, [i[1] for i in settings.ADMINS])
144 8f5a3a06 Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
145 8f5a3a06 Sofia Papagiannaki
        logger.exception(e)
146 8f5a3a06 Sofia Papagiannaki
        raise SendNotificationError()
147 8f5a3a06 Sofia Papagiannaki
    else:
148 4327c8fc Kostas Papadimitriou
        msg = 'Sent admin notification for user %s' % dictionary.get('email',
149 4327c8fc Kostas Papadimitriou
                                                                     None)
150 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
151 683cf244 Sofia Papagiannaki
152 5ce3ce4f Sofia Papagiannaki
153 9a06d96f Olga Brani
def send_account_creation_notification(template_name, dictionary=None):
154 9a06d96f Olga Brani
    user = dictionary.get('user', AnonymousUser())
155 29b87e7c Sofia Papagiannaki
    subject = _(ACCOUNT_CREATION_SUBJECT) % {'user':user.get('email', '')}
156 9a06d96f Olga Brani
    return _send_admin_notification(template_name, dictionary, subject=subject)
157 9a06d96f Olga Brani
158 9a06d96f Olga Brani
159 9a06d96f Olga Brani
def send_group_creation_notification(template_name, dictionary=None):
160 c3c2212a Sofia Papagiannaki
    group = dictionary.get('group')
161 c3c2212a Sofia Papagiannaki
    if not group:
162 c3c2212a Sofia Papagiannaki
        return
163 29b87e7c Sofia Papagiannaki
    subject = _(GROUP_CREATION_SUBJECT) % {'group':group.get('name', '')}
164 9a06d96f Olga Brani
    return _send_admin_notification(template_name, dictionary, subject=subject)
165 9a06d96f Olga Brani
166 9a06d96f Olga Brani
167 f9aea9c8 Sofia Papagiannaki
def send_helpdesk_notification(user, template_name='im/helpdesk_notification.txt'):
168 a0be6a0c Sofia Papagiannaki
    """
169 a0be6a0c Sofia Papagiannaki
    Send email to DEFAULT_CONTACT_EMAIL to notify for a new user activation.
170 5ce3ce4f Sofia Papagiannaki

171 a0be6a0c Sofia Papagiannaki
    Raises SendNotificationError
172 a0be6a0c Sofia Papagiannaki
    """
173 a0be6a0c Sofia Papagiannaki
    if not DEFAULT_CONTACT_EMAIL:
174 a0be6a0c Sofia Papagiannaki
        return
175 3abf6c78 Sofia Papagiannaki
    message = render_to_string(
176 3abf6c78 Sofia Papagiannaki
        template_name,
177 3abf6c78 Sofia Papagiannaki
        {'user': user}
178 3abf6c78 Sofia Papagiannaki
    )
179 1cbce16f Sofia Papagiannaki
    sender = settings.SERVER_EMAIL
180 a0be6a0c Sofia Papagiannaki
    try:
181 9a06d96f Olga Brani
        send_mail(
182 9a06d96f Olga Brani
            _(HELPDESK_NOTIFICATION_EMAIL_SUBJECT) % {'user': user.email},
183 9a06d96f Olga Brani
            message, sender, [DEFAULT_CONTACT_EMAIL])
184 a0be6a0c Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
185 a0be6a0c Sofia Papagiannaki
        logger.exception(e)
186 a0be6a0c Sofia Papagiannaki
        raise SendNotificationError()
187 a0be6a0c Sofia Papagiannaki
    else:
188 3abf6c78 Sofia Papagiannaki
        msg = 'Sent helpdesk admin notification for %s' % user.email
189 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
190 a0be6a0c Sofia Papagiannaki
191 5ce3ce4f Sofia Papagiannaki
192 683cf244 Sofia Papagiannaki
def send_invitation(invitation, template_name='im/invitation.txt'):
193 683cf244 Sofia Papagiannaki
    """
194 683cf244 Sofia Papagiannaki
    Send invitation email.
195 5ce3ce4f Sofia Papagiannaki

196 8f5a3a06 Sofia Papagiannaki
    Raises SendInvitationError
197 683cf244 Sofia Papagiannaki
    """
198 1fcf4a99 Kostas Papadimitriou
    subject = _(INVITATION_EMAIL_SUBJECT)
199 6ff7a7ca Sofia Papagiannaki
    url = '%s?code=%d' % (urljoin(BASEURL, reverse('index')), invitation.code)
200 aab4d540 Sofia Papagiannaki
    message = render_to_string(template_name, {
201 5ce3ce4f Sofia Papagiannaki
                               'invitation': invitation,
202 5ce3ce4f Sofia Papagiannaki
                               'url': url,
203 5ce3ce4f Sofia Papagiannaki
                               'baseurl': BASEURL,
204 5ce3ce4f Sofia Papagiannaki
                               'site_name': SITENAME,
205 5ce3ce4f Sofia Papagiannaki
                               'support': DEFAULT_CONTACT_EMAIL})
206 1cbce16f Sofia Papagiannaki
    sender = settings.SERVER_EMAIL
207 8f5a3a06 Sofia Papagiannaki
    try:
208 8f5a3a06 Sofia Papagiannaki
        send_mail(subject, message, sender, [invitation.username])
209 8f5a3a06 Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
210 8f5a3a06 Sofia Papagiannaki
        logger.exception(e)
211 8f5a3a06 Sofia Papagiannaki
        raise SendInvitationError()
212 8f5a3a06 Sofia Papagiannaki
    else:
213 111f3da6 Sofia Papagiannaki
        msg = 'Sent invitation %s' % invitation
214 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
215 c0b26605 Sofia Papagiannaki
        invitation.inviter.invitations = max(0, invitation.inviter.invitations - 1)
216 9a06d96f Olga Brani
        invitation.inviter.save()
217 683cf244 Sofia Papagiannaki
218 5ce3ce4f Sofia Papagiannaki
219 683cf244 Sofia Papagiannaki
def send_greeting(user, email_template_name='im/welcome_email.txt'):
220 683cf244 Sofia Papagiannaki
    """
221 683cf244 Sofia Papagiannaki
    Send welcome email.
222 5ce3ce4f Sofia Papagiannaki

223 f36af44a Antony Chazapis
    Raises SMTPException, socket.error
224 f36af44a Antony Chazapis
    """
225 4f78c22c Sofia Papagiannaki
    subject = _(GREETING_EMAIL_SUBJECT)
226 f36af44a Antony Chazapis
    message = render_to_string(email_template_name, {
227 5ce3ce4f Sofia Papagiannaki
                               'user': user,
228 5ce3ce4f Sofia Papagiannaki
                               'url': urljoin(BASEURL, reverse('index')),
229 5ce3ce4f Sofia Papagiannaki
                               'baseurl': BASEURL,
230 5ce3ce4f Sofia Papagiannaki
                               'site_name': SITENAME,
231 5ce3ce4f Sofia Papagiannaki
                               'support': DEFAULT_CONTACT_EMAIL})
232 1cbce16f Sofia Papagiannaki
    sender = settings.SERVER_EMAIL
233 8f5a3a06 Sofia Papagiannaki
    try:
234 8f5a3a06 Sofia Papagiannaki
        send_mail(subject, message, sender, [user.email])
235 8f5a3a06 Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
236 8f5a3a06 Sofia Papagiannaki
        logger.exception(e)
237 8f5a3a06 Sofia Papagiannaki
        raise SendGreetingError()
238 8f5a3a06 Sofia Papagiannaki
    else:
239 111f3da6 Sofia Papagiannaki
        msg = 'Sent greeting %s' % user.email
240 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
241 8f5a3a06 Sofia Papagiannaki
242 5ce3ce4f Sofia Papagiannaki
243 8f5a3a06 Sofia Papagiannaki
def send_feedback(msg, data, user, email_template_name='im/feedback_mail.txt'):
244 4f78c22c Sofia Papagiannaki
    subject = _(FEEDBACK_EMAIL_SUBJECT)
245 8f5a3a06 Sofia Papagiannaki
    from_email = user.email
246 8f5a3a06 Sofia Papagiannaki
    recipient_list = [DEFAULT_CONTACT_EMAIL]
247 8f5a3a06 Sofia Papagiannaki
    content = render_to_string(email_template_name, {
248 8f5a3a06 Sofia Papagiannaki
        'message': msg,
249 8f5a3a06 Sofia Papagiannaki
        'data': data,
250 8f5a3a06 Sofia Papagiannaki
        'user': user})
251 8f5a3a06 Sofia Papagiannaki
    try:
252 8f5a3a06 Sofia Papagiannaki
        send_mail(subject, content, from_email, recipient_list)
253 8f5a3a06 Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
254 8f5a3a06 Sofia Papagiannaki
        logger.exception(e)
255 8f5a3a06 Sofia Papagiannaki
        raise SendFeedbackError()
256 8f5a3a06 Sofia Papagiannaki
    else:
257 111f3da6 Sofia Papagiannaki
        msg = 'Sent feedback from %s' % user.email
258 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
259 f36af44a Antony Chazapis
260 5ce3ce4f Sofia Papagiannaki
261 49790d9d Sofia Papagiannaki
def send_change_email(ec, request, email_template_name='registration/email_change_email.txt'):
262 49790d9d Sofia Papagiannaki
    try:
263 34a76cdb Kostas Papadimitriou
        url = ec.get_url()
264 49790d9d Sofia Papagiannaki
        url = request.build_absolute_uri(url)
265 49790d9d Sofia Papagiannaki
        t = loader.get_template(email_template_name)
266 49790d9d Sofia Papagiannaki
        c = {'url': url, 'site_name': SITENAME}
267 1cbce16f Sofia Papagiannaki
        from_email = settings.SERVER_EMAIL
268 1fcf4a99 Kostas Papadimitriou
        send_mail(_(EMAIL_CHANGE_EMAIL_SUBJECT),
269 9a06d96f Olga Brani
                  t.render(Context(c)), from_email, [ec.new_email_address])
270 49790d9d Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
271 49790d9d Sofia Papagiannaki
        logger.exception(e)
272 49790d9d Sofia Papagiannaki
        raise ChangeEmailError()
273 49790d9d Sofia Papagiannaki
    else:
274 111f3da6 Sofia Papagiannaki
        msg = 'Sent change email for %s' % ec.user.email
275 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
276 f36af44a Antony Chazapis
277 5ce3ce4f Sofia Papagiannaki
278 f9aea9c8 Sofia Papagiannaki
def activate(
279 f9aea9c8 Sofia Papagiannaki
    user,
280 f9aea9c8 Sofia Papagiannaki
    email_template_name='im/welcome_email.txt',
281 f9aea9c8 Sofia Papagiannaki
    helpdesk_email_template_name='im/helpdesk_notification.txt',
282 f9aea9c8 Sofia Papagiannaki
    verify_email=False
283 f9aea9c8 Sofia Papagiannaki
):
284 683cf244 Sofia Papagiannaki
    """
285 683cf244 Sofia Papagiannaki
    Activates the specific user and sends email.
286 5ce3ce4f Sofia Papagiannaki

287 27e26a41 Sofia Papagiannaki
    Raises SendGreetingError, ValidationError
288 683cf244 Sofia Papagiannaki
    """
289 683cf244 Sofia Papagiannaki
    user.is_active = True
290 4bdd7e3d Kostas Papadimitriou
    user.email_verified = True
291 f1ab6639 Kostas Papadimitriou
    if not user.activation_sent:
292 f1ab6639 Kostas Papadimitriou
        user.activation_sent = datetime.now()
293 683cf244 Sofia Papagiannaki
    user.save()
294 23b9b72f Sofia Papagiannaki
    send_helpdesk_notification(user, helpdesk_email_template_name)
295 683cf244 Sofia Papagiannaki
    send_greeting(user, email_template_name)
296 683cf244 Sofia Papagiannaki
297 5ce3ce4f Sofia Papagiannaki
298 9a06d96f Olga Brani
def switch_account_to_shibboleth(user, local_user,
299 9a06d96f Olga Brani
                                 greeting_template_name='im/welcome_email.txt'):
300 9a06d96f Olga Brani
    try:
301 9a06d96f Olga Brani
        provider = user.provider
302 9a06d96f Olga Brani
    except AttributeError:
303 23b9b72f Sofia Papagiannaki
        return
304 9a06d96f Olga Brani
    else:
305 9a06d96f Olga Brani
        if not provider == 'shibboleth':
306 9a06d96f Olga Brani
            return
307 9a06d96f Olga Brani
        user.delete()
308 9a06d96f Olga Brani
        local_user.provider = 'shibboleth'
309 9a06d96f Olga Brani
        local_user.third_party_identifier = user.third_party_identifier
310 9a06d96f Olga Brani
        local_user.save()
311 9a06d96f Olga Brani
        send_greeting(local_user, greeting_template_name)
312 9a06d96f Olga Brani
        return local_user
313 59f598f1 Sofia Papagiannaki
314 5ce3ce4f Sofia Papagiannaki
315 8f5a3a06 Sofia Papagiannaki
class SendMailError(Exception):
316 18ffbee1 Sofia Papagiannaki
    pass
317 8f5a3a06 Sofia Papagiannaki
318 5ce3ce4f Sofia Papagiannaki
319 8f5a3a06 Sofia Papagiannaki
class SendAdminNotificationError(SendMailError):
320 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
321 ae497612 Olga Brani
        self.message = _(astakos_messages.ADMIN_NOTIFICATION_SEND_ERR)
322 18ffbee1 Sofia Papagiannaki
        super(SendAdminNotificationError, self).__init__()
323 8f5a3a06 Sofia Papagiannaki
324 5ce3ce4f Sofia Papagiannaki
325 18ffbee1 Sofia Papagiannaki
class SendVerificationError(SendMailError):
326 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
327 ae497612 Olga Brani
        self.message = _(astakos_messages.VERIFICATION_SEND_ERR)
328 18ffbee1 Sofia Papagiannaki
        super(SendVerificationError, self).__init__()
329 8f5a3a06 Sofia Papagiannaki
330 5ce3ce4f Sofia Papagiannaki
331 18ffbee1 Sofia Papagiannaki
class SendInvitationError(SendMailError):
332 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
333 ae497612 Olga Brani
        self.message = _(astakos_messages.INVITATION_SEND_ERR)
334 18ffbee1 Sofia Papagiannaki
        super(SendInvitationError, self).__init__()
335 8f5a3a06 Sofia Papagiannaki
336 5ce3ce4f Sofia Papagiannaki
337 18ffbee1 Sofia Papagiannaki
class SendGreetingError(SendMailError):
338 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
339 ae497612 Olga Brani
        self.message = _(astakos_messages.GREETING_SEND_ERR)
340 18ffbee1 Sofia Papagiannaki
        super(SendGreetingError, self).__init__()
341 8f5a3a06 Sofia Papagiannaki
342 5ce3ce4f Sofia Papagiannaki
343 18ffbee1 Sofia Papagiannaki
class SendFeedbackError(SendMailError):
344 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
345 ae497612 Olga Brani
        self.message = _(astakos_messages.FEEDBACK_SEND_ERR)
346 49790d9d Sofia Papagiannaki
        super(SendFeedbackError, self).__init__()
347 49790d9d Sofia Papagiannaki
348 5ce3ce4f Sofia Papagiannaki
349 49790d9d Sofia Papagiannaki
class ChangeEmailError(SendMailError):
350 49790d9d Sofia Papagiannaki
    def __init__(self):
351 ae497612 Olga Brani
        self.message = self.message = _(astakos_messages.CHANGE_EMAIL_SEND_ERR)
352 35f8ccf1 Sofia Papagiannaki
        super(ChangeEmailError, self).__init__()
353 a0be6a0c Sofia Papagiannaki
354 5ce3ce4f Sofia Papagiannaki
355 a0be6a0c Sofia Papagiannaki
class SendNotificationError(SendMailError):
356 a0be6a0c Sofia Papagiannaki
    def __init__(self):
357 ae497612 Olga Brani
        self.message = _(astakos_messages.NOTIFICATION_SEND_ERR)
358 a0be6a0c Sofia Papagiannaki
        super(SendNotificationError, self).__init__()