Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / functions.py @ b22de10a

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 3abf6c78 Sofia Papagiannaki
        msg = 'Sent admin notification for user %s' % dictionary
149 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
150 683cf244 Sofia Papagiannaki
151 5ce3ce4f Sofia Papagiannaki
152 9a06d96f Olga Brani
def send_account_creation_notification(template_name, dictionary=None):
153 9a06d96f Olga Brani
    user = dictionary.get('user', AnonymousUser())
154 29b87e7c Sofia Papagiannaki
    subject = _(ACCOUNT_CREATION_SUBJECT) % {'user':user.get('email', '')}
155 9a06d96f Olga Brani
    return _send_admin_notification(template_name, dictionary, subject=subject)
156 9a06d96f Olga Brani
157 9a06d96f Olga Brani
158 9a06d96f Olga Brani
def send_group_creation_notification(template_name, dictionary=None):
159 c3c2212a Sofia Papagiannaki
    group = dictionary.get('group')
160 c3c2212a Sofia Papagiannaki
    if not group:
161 c3c2212a Sofia Papagiannaki
        return
162 29b87e7c Sofia Papagiannaki
    subject = _(GROUP_CREATION_SUBJECT) % {'group':group.get('name', '')}
163 9a06d96f Olga Brani
    return _send_admin_notification(template_name, dictionary, subject=subject)
164 9a06d96f Olga Brani
165 9a06d96f Olga Brani
166 f9aea9c8 Sofia Papagiannaki
def send_helpdesk_notification(user, template_name='im/helpdesk_notification.txt'):
167 a0be6a0c Sofia Papagiannaki
    """
168 a0be6a0c Sofia Papagiannaki
    Send email to DEFAULT_CONTACT_EMAIL to notify for a new user activation.
169 5ce3ce4f Sofia Papagiannaki

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

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

222 f36af44a Antony Chazapis
    Raises SMTPException, socket.error
223 f36af44a Antony Chazapis
    """
224 4f78c22c Sofia Papagiannaki
    subject = _(GREETING_EMAIL_SUBJECT)
225 f36af44a Antony Chazapis
    message = render_to_string(email_template_name, {
226 5ce3ce4f Sofia Papagiannaki
                               'user': user,
227 5ce3ce4f Sofia Papagiannaki
                               'url': urljoin(BASEURL, reverse('index')),
228 5ce3ce4f Sofia Papagiannaki
                               'baseurl': BASEURL,
229 5ce3ce4f Sofia Papagiannaki
                               'site_name': SITENAME,
230 5ce3ce4f Sofia Papagiannaki
                               'support': DEFAULT_CONTACT_EMAIL})
231 1cbce16f Sofia Papagiannaki
    sender = settings.SERVER_EMAIL
232 8f5a3a06 Sofia Papagiannaki
    try:
233 8f5a3a06 Sofia Papagiannaki
        send_mail(subject, message, sender, [user.email])
234 8f5a3a06 Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
235 8f5a3a06 Sofia Papagiannaki
        logger.exception(e)
236 8f5a3a06 Sofia Papagiannaki
        raise SendGreetingError()
237 8f5a3a06 Sofia Papagiannaki
    else:
238 111f3da6 Sofia Papagiannaki
        msg = 'Sent greeting %s' % user.email
239 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
240 8f5a3a06 Sofia Papagiannaki
241 5ce3ce4f Sofia Papagiannaki
242 8f5a3a06 Sofia Papagiannaki
def send_feedback(msg, data, user, email_template_name='im/feedback_mail.txt'):
243 4f78c22c Sofia Papagiannaki
    subject = _(FEEDBACK_EMAIL_SUBJECT)
244 8f5a3a06 Sofia Papagiannaki
    from_email = user.email
245 8f5a3a06 Sofia Papagiannaki
    recipient_list = [DEFAULT_CONTACT_EMAIL]
246 8f5a3a06 Sofia Papagiannaki
    content = render_to_string(email_template_name, {
247 8f5a3a06 Sofia Papagiannaki
        'message': msg,
248 8f5a3a06 Sofia Papagiannaki
        'data': data,
249 8f5a3a06 Sofia Papagiannaki
        'user': user})
250 8f5a3a06 Sofia Papagiannaki
    try:
251 8f5a3a06 Sofia Papagiannaki
        send_mail(subject, content, from_email, recipient_list)
252 8f5a3a06 Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
253 8f5a3a06 Sofia Papagiannaki
        logger.exception(e)
254 8f5a3a06 Sofia Papagiannaki
        raise SendFeedbackError()
255 8f5a3a06 Sofia Papagiannaki
    else:
256 111f3da6 Sofia Papagiannaki
        msg = 'Sent feedback from %s' % user.email
257 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
258 f36af44a Antony Chazapis
259 5ce3ce4f Sofia Papagiannaki
260 49790d9d Sofia Papagiannaki
def send_change_email(ec, request, email_template_name='registration/email_change_email.txt'):
261 49790d9d Sofia Papagiannaki
    try:
262 49790d9d Sofia Papagiannaki
        url = reverse('email_change_confirm',
263 5ce3ce4f Sofia Papagiannaki
                      kwargs={'activation_key': ec.activation_key})
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 23b9b72f Sofia Papagiannaki
    if verify_email:
291 23b9b72f Sofia Papagiannaki
        user.email_verified = True
292 683cf244 Sofia Papagiannaki
    user.save()
293 23b9b72f Sofia Papagiannaki
    send_helpdesk_notification(user, helpdesk_email_template_name)
294 683cf244 Sofia Papagiannaki
    send_greeting(user, email_template_name)
295 683cf244 Sofia Papagiannaki
296 5ce3ce4f Sofia Papagiannaki
297 9a06d96f Olga Brani
def switch_account_to_shibboleth(user, local_user,
298 9a06d96f Olga Brani
                                 greeting_template_name='im/welcome_email.txt'):
299 9a06d96f Olga Brani
    try:
300 9a06d96f Olga Brani
        provider = user.provider
301 9a06d96f Olga Brani
    except AttributeError:
302 23b9b72f Sofia Papagiannaki
        return
303 9a06d96f Olga Brani
    else:
304 9a06d96f Olga Brani
        if not provider == 'shibboleth':
305 9a06d96f Olga Brani
            return
306 9a06d96f Olga Brani
        user.delete()
307 9a06d96f Olga Brani
        local_user.provider = 'shibboleth'
308 9a06d96f Olga Brani
        local_user.third_party_identifier = user.third_party_identifier
309 9a06d96f Olga Brani
        local_user.save()
310 9a06d96f Olga Brani
        send_greeting(local_user, greeting_template_name)
311 9a06d96f Olga Brani
        return local_user
312 59f598f1 Sofia Papagiannaki
313 5ce3ce4f Sofia Papagiannaki
314 8f5a3a06 Sofia Papagiannaki
class SendMailError(Exception):
315 18ffbee1 Sofia Papagiannaki
    pass
316 8f5a3a06 Sofia Papagiannaki
317 5ce3ce4f Sofia Papagiannaki
318 8f5a3a06 Sofia Papagiannaki
class SendAdminNotificationError(SendMailError):
319 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
320 ae497612 Olga Brani
        self.message = _(astakos_messages.ADMIN_NOTIFICATION_SEND_ERR)
321 18ffbee1 Sofia Papagiannaki
        super(SendAdminNotificationError, self).__init__()
322 8f5a3a06 Sofia Papagiannaki
323 5ce3ce4f Sofia Papagiannaki
324 18ffbee1 Sofia Papagiannaki
class SendVerificationError(SendMailError):
325 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
326 ae497612 Olga Brani
        self.message = _(astakos_messages.VERIFICATION_SEND_ERR)
327 18ffbee1 Sofia Papagiannaki
        super(SendVerificationError, self).__init__()
328 8f5a3a06 Sofia Papagiannaki
329 5ce3ce4f Sofia Papagiannaki
330 18ffbee1 Sofia Papagiannaki
class SendInvitationError(SendMailError):
331 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
332 ae497612 Olga Brani
        self.message = _(astakos_messages.INVITATION_SEND_ERR)
333 18ffbee1 Sofia Papagiannaki
        super(SendInvitationError, self).__init__()
334 8f5a3a06 Sofia Papagiannaki
335 5ce3ce4f Sofia Papagiannaki
336 18ffbee1 Sofia Papagiannaki
class SendGreetingError(SendMailError):
337 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
338 ae497612 Olga Brani
        self.message = _(astakos_messages.GREETING_SEND_ERR)
339 18ffbee1 Sofia Papagiannaki
        super(SendGreetingError, self).__init__()
340 8f5a3a06 Sofia Papagiannaki
341 5ce3ce4f Sofia Papagiannaki
342 18ffbee1 Sofia Papagiannaki
class SendFeedbackError(SendMailError):
343 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
344 ae497612 Olga Brani
        self.message = _(astakos_messages.FEEDBACK_SEND_ERR)
345 49790d9d Sofia Papagiannaki
        super(SendFeedbackError, self).__init__()
346 49790d9d Sofia Papagiannaki
347 5ce3ce4f Sofia Papagiannaki
348 49790d9d Sofia Papagiannaki
class ChangeEmailError(SendMailError):
349 49790d9d Sofia Papagiannaki
    def __init__(self):
350 ae497612 Olga Brani
        self.message = self.message = _(astakos_messages.CHANGE_EMAIL_SEND_ERR)
351 35f8ccf1 Sofia Papagiannaki
        super(ChangeEmailError, self).__init__()
352 a0be6a0c Sofia Papagiannaki
353 5ce3ce4f Sofia Papagiannaki
354 a0be6a0c Sofia Papagiannaki
class SendNotificationError(SendMailError):
355 a0be6a0c Sofia Papagiannaki
    def __init__(self):
356 ae497612 Olga Brani
        self.message = _(astakos_messages.NOTIFICATION_SEND_ERR)
357 a0be6a0c Sofia Papagiannaki
        super(SendNotificationError, self).__init__()