Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (12 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 27e26a41 Sofia Papagiannaki
from django.core.exceptions import ValidationError
42 49790d9d Sofia Papagiannaki
from django.template import Context, loader
43 111f3da6 Sofia Papagiannaki
from django.contrib.auth import login as auth_login, logout as auth_logout
44 111f3da6 Sofia Papagiannaki
from django.http import HttpRequest
45 1cbce16f Sofia Papagiannaki
from django.conf import settings
46 9a06d96f Olga Brani
from django.contrib.auth.models import AnonymousUser
47 27e26a41 Sofia Papagiannaki
48 683cf244 Sofia Papagiannaki
from urllib import quote
49 f36af44a Antony Chazapis
from urlparse import urljoin
50 8f5a3a06 Sofia Papagiannaki
from smtplib import SMTPException
51 751d24cf Sofia Papagiannaki
from datetime import datetime
52 111f3da6 Sofia Papagiannaki
from functools import wraps
53 f36af44a Antony Chazapis
54 1cbce16f Sofia Papagiannaki
from astakos.im.settings import (DEFAULT_CONTACT_EMAIL, SITENAME, BASEURL,
55 8cc49f4d Sofia Papagiannaki
                                 LOGGING_LEVEL, VERIFICATION_EMAIL_SUBJECT,
56 9a06d96f Olga Brani
                                 ACCOUNT_CREATION_SUBJECT,
57 9a06d96f Olga Brani
                                 GROUP_CREATION_SUBJECT,
58 8cc49f4d Sofia Papagiannaki
                                 HELPDESK_NOTIFICATION_EMAIL_SUBJECT,
59 8cc49f4d Sofia Papagiannaki
                                 INVITATION_EMAIL_SUBJECT,
60 8cc49f4d Sofia Papagiannaki
                                 GREETING_EMAIL_SUBJECT,
61 8cc49f4d Sofia Papagiannaki
                                 FEEDBACK_EMAIL_SUBJECT,
62 8cc49f4d Sofia Papagiannaki
                                 EMAIL_CHANGE_EMAIL_SUBJECT)
63 9a06d96f Olga Brani
import astakos.im.models
64 ae497612 Olga Brani
import astakos.im.messages as astakos_messages
65 f36af44a Antony Chazapis
66 f36af44a Antony Chazapis
logger = logging.getLogger(__name__)
67 f36af44a Antony Chazapis
68 5ce3ce4f Sofia Papagiannaki
69 111f3da6 Sofia Papagiannaki
def logged(func, msg):
70 111f3da6 Sofia Papagiannaki
    @wraps(func)
71 111f3da6 Sofia Papagiannaki
    def with_logging(*args, **kwargs):
72 111f3da6 Sofia Papagiannaki
        email = ''
73 111f3da6 Sofia Papagiannaki
        user = None
74 9a06d96f Olga Brani
        try:
75 111f3da6 Sofia Papagiannaki
            request = args[0]
76 9a06d96f Olga Brani
            email = request.user.email
77 9a06d96f Olga Brani
        except (KeyError, AttributeError), e:
78 9a06d96f Olga Brani
            email = ''
79 111f3da6 Sofia Papagiannaki
        r = func(*args, **kwargs)
80 c9e378c7 Sofia Papagiannaki
        if LOGGING_LEVEL:
81 aab4d540 Sofia Papagiannaki
            logger.log(LOGGING_LEVEL, msg % email)
82 111f3da6 Sofia Papagiannaki
        return r
83 111f3da6 Sofia Papagiannaki
    return with_logging
84 111f3da6 Sofia Papagiannaki
85 111f3da6 Sofia Papagiannaki
login = logged(auth_login, '%s logged in.')
86 111f3da6 Sofia Papagiannaki
logout = logged(auth_logout, '%s logged out.')
87 111f3da6 Sofia Papagiannaki
88 5ce3ce4f Sofia Papagiannaki
89 683cf244 Sofia Papagiannaki
def send_verification(user, template_name='im/activation_email.txt'):
90 f36af44a Antony Chazapis
    """
91 683cf244 Sofia Papagiannaki
    Send email to user to verify his/her email and activate his/her account.
92 5ce3ce4f Sofia Papagiannaki

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

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

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

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

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

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