Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / functions.py @ 7233d542

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 c0b26605 Sofia Papagiannaki
import astakos.im.models
64 f36af44a Antony Chazapis
65 f36af44a Antony Chazapis
logger = logging.getLogger(__name__)
66 f36af44a Antony Chazapis
67 5ce3ce4f Sofia Papagiannaki
68 111f3da6 Sofia Papagiannaki
def logged(func, msg):
69 111f3da6 Sofia Papagiannaki
    @wraps(func)
70 111f3da6 Sofia Papagiannaki
    def with_logging(*args, **kwargs):
71 111f3da6 Sofia Papagiannaki
        email = ''
72 111f3da6 Sofia Papagiannaki
        user = None
73 9a06d96f Olga Brani
        try:
74 111f3da6 Sofia Papagiannaki
            request = args[0]
75 9a06d96f Olga Brani
            email = request.user.email
76 9a06d96f Olga Brani
        except (KeyError, AttributeError), e:
77 9a06d96f Olga Brani
            email = ''
78 111f3da6 Sofia Papagiannaki
        r = func(*args, **kwargs)
79 c9e378c7 Sofia Papagiannaki
        if LOGGING_LEVEL:
80 aab4d540 Sofia Papagiannaki
            logger.log(LOGGING_LEVEL, msg % email)
81 111f3da6 Sofia Papagiannaki
        return r
82 111f3da6 Sofia Papagiannaki
    return with_logging
83 111f3da6 Sofia Papagiannaki
84 bf0c6de5 Sofia Papagiannaki
85 bf0c6de5 Sofia Papagiannaki
def login(request, user):
86 bf0c6de5 Sofia Papagiannaki
    auth_login(request, user)
87 c0b26605 Sofia Papagiannaki
    astakos.im.models.SessionCatalog(
88 c0b26605 Sofia Papagiannaki
        session_key=request.session.session_key,
89 c0b26605 Sofia Papagiannaki
        user=user).save()
90 bf0c6de5 Sofia Papagiannaki
91 bf0c6de5 Sofia Papagiannaki
login = logged(login, '%s logged in.')
92 111f3da6 Sofia Papagiannaki
logout = logged(auth_logout, '%s logged out.')
93 111f3da6 Sofia Papagiannaki
94 5ce3ce4f Sofia Papagiannaki
95 683cf244 Sofia Papagiannaki
def send_verification(user, template_name='im/activation_email.txt'):
96 f36af44a Antony Chazapis
    """
97 683cf244 Sofia Papagiannaki
    Send email to user to verify his/her email and activate his/her account.
98 5ce3ce4f Sofia Papagiannaki

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

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

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

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

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

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