Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / functions.py @ 7507ea03

History | View | Annotate | Download (11.7 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 27e26a41 Sofia Papagiannaki
47 683cf244 Sofia Papagiannaki
from urllib import quote
48 f36af44a Antony Chazapis
from urlparse import urljoin
49 8f5a3a06 Sofia Papagiannaki
from smtplib import SMTPException
50 751d24cf Sofia Papagiannaki
from datetime import datetime
51 111f3da6 Sofia Papagiannaki
from functools import wraps
52 f36af44a Antony Chazapis
53 1cbce16f Sofia Papagiannaki
from astakos.im.settings import (DEFAULT_CONTACT_EMAIL, SITENAME, BASEURL,
54 8cc49f4d Sofia Papagiannaki
                                 LOGGING_LEVEL, VERIFICATION_EMAIL_SUBJECT,
55 8cc49f4d Sofia Papagiannaki
                                 ADMIN_NOTIFICATION_EMAIL_SUBJECT,
56 8cc49f4d Sofia Papagiannaki
                                 HELPDESK_NOTIFICATION_EMAIL_SUBJECT,
57 8cc49f4d Sofia Papagiannaki
                                 INVITATION_EMAIL_SUBJECT,
58 8cc49f4d Sofia Papagiannaki
                                 GREETING_EMAIL_SUBJECT,
59 8cc49f4d Sofia Papagiannaki
                                 FEEDBACK_EMAIL_SUBJECT,
60 8cc49f4d Sofia Papagiannaki
                                 EMAIL_CHANGE_EMAIL_SUBJECT)
61 aab4d540 Sofia Papagiannaki
from astakos.im.models import AstakosUser
62 f36af44a Antony Chazapis
63 f36af44a Antony Chazapis
logger = logging.getLogger(__name__)
64 f36af44a Antony Chazapis
65 5ce3ce4f Sofia Papagiannaki
66 111f3da6 Sofia Papagiannaki
def logged(func, msg):
67 111f3da6 Sofia Papagiannaki
    @wraps(func)
68 111f3da6 Sofia Papagiannaki
    def with_logging(*args, **kwargs):
69 111f3da6 Sofia Papagiannaki
        email = ''
70 111f3da6 Sofia Papagiannaki
        user = None
71 111f3da6 Sofia Papagiannaki
        if len(args) == 2 and isinstance(args[1], AstakosUser):
72 111f3da6 Sofia Papagiannaki
            user = args[1]
73 111f3da6 Sofia Papagiannaki
        elif len(args) == 1 and isinstance(args[0], HttpRequest):
74 111f3da6 Sofia Papagiannaki
            request = args[0]
75 111f3da6 Sofia Papagiannaki
            user = request.user
76 111f3da6 Sofia Papagiannaki
        email = user.email if user and user.is_authenticated() else ''
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 111f3da6 Sofia Papagiannaki
login = logged(auth_login, '%s logged in.')
84 111f3da6 Sofia Papagiannaki
logout = logged(auth_logout, '%s logged out.')
85 111f3da6 Sofia Papagiannaki
86 5ce3ce4f Sofia Papagiannaki
87 683cf244 Sofia Papagiannaki
def send_verification(user, template_name='im/activation_email.txt'):
88 f36af44a Antony Chazapis
    """
89 683cf244 Sofia Papagiannaki
    Send email to user to verify his/her email and activate his/her account.
90 5ce3ce4f Sofia Papagiannaki

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

126 8f5a3a06 Sofia Papagiannaki
    Raises SendNotificationError
127 683cf244 Sofia Papagiannaki
    """
128 1cbce16f Sofia Papagiannaki
    if not settings.ADMINS:
129 683cf244 Sofia Papagiannaki
        return
130 aab4d540 Sofia Papagiannaki
    dictionary = dictionary or {}
131 3abf6c78 Sofia Papagiannaki
    message = render_to_string(template_name, dictionary)
132 1cbce16f Sofia Papagiannaki
    sender = settings.SERVER_EMAIL
133 8f5a3a06 Sofia Papagiannaki
    try:
134 8cc49f4d Sofia Papagiannaki
        send_mail(_(ADMIN_NOTIFICATION_EMAIL_SUBJECT) % {'user': user.email},
135 8cc49f4d Sofia Papagiannaki
                  message, sender, [i[1] for i in settings.ADMINS])
136 8f5a3a06 Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
137 8f5a3a06 Sofia Papagiannaki
        logger.exception(e)
138 8f5a3a06 Sofia Papagiannaki
        raise SendNotificationError()
139 8f5a3a06 Sofia Papagiannaki
    else:
140 3abf6c78 Sofia Papagiannaki
        msg = 'Sent admin notification for user %s' % dictionary
141 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
142 683cf244 Sofia Papagiannaki
143 5ce3ce4f Sofia Papagiannaki
144 3abf6c78 Sofia Papagiannaki
def send_helpdesk_notification(user, template_name='im/account_notification.txt'):
145 a0be6a0c Sofia Papagiannaki
    """
146 a0be6a0c Sofia Papagiannaki
    Send email to DEFAULT_CONTACT_EMAIL to notify for a new user activation.
147 5ce3ce4f Sofia Papagiannaki

148 a0be6a0c Sofia Papagiannaki
    Raises SendNotificationError
149 a0be6a0c Sofia Papagiannaki
    """
150 a0be6a0c Sofia Papagiannaki
    if not DEFAULT_CONTACT_EMAIL:
151 a0be6a0c Sofia Papagiannaki
        return
152 3abf6c78 Sofia Papagiannaki
    message = render_to_string(
153 3abf6c78 Sofia Papagiannaki
        template_name,
154 3abf6c78 Sofia Papagiannaki
        {'user': user}
155 3abf6c78 Sofia Papagiannaki
    )
156 1cbce16f Sofia Papagiannaki
    sender = settings.SERVER_EMAIL
157 a0be6a0c Sofia Papagiannaki
    try:
158 8cc49f4d Sofia Papagiannaki
        send_mail(_(HELPDESK_NOTIFICATION_EMAIL_SUBJECT) % {'user': user.email},
159 8cc49f4d Sofia Papagiannaki
                  message, sender, [DEFAULT_CONTACT_EMAIL])
160 a0be6a0c Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
161 a0be6a0c Sofia Papagiannaki
        logger.exception(e)
162 a0be6a0c Sofia Papagiannaki
        raise SendNotificationError()
163 a0be6a0c Sofia Papagiannaki
    else:
164 3abf6c78 Sofia Papagiannaki
        msg = 'Sent helpdesk admin notification for %s' % user.email
165 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
166 a0be6a0c Sofia Papagiannaki
167 5ce3ce4f Sofia Papagiannaki
168 683cf244 Sofia Papagiannaki
def send_invitation(invitation, template_name='im/invitation.txt'):
169 683cf244 Sofia Papagiannaki
    """
170 683cf244 Sofia Papagiannaki
    Send invitation email.
171 5ce3ce4f Sofia Papagiannaki

172 8f5a3a06 Sofia Papagiannaki
    Raises SendInvitationError
173 683cf244 Sofia Papagiannaki
    """
174 1fcf4a99 Kostas Papadimitriou
    subject = _(INVITATION_EMAIL_SUBJECT)
175 6ff7a7ca Sofia Papagiannaki
    url = '%s?code=%d' % (urljoin(BASEURL, reverse('index')), invitation.code)
176 aab4d540 Sofia Papagiannaki
    message = render_to_string(template_name, {
177 5ce3ce4f Sofia Papagiannaki
                               'invitation': invitation,
178 5ce3ce4f Sofia Papagiannaki
                               'url': url,
179 5ce3ce4f Sofia Papagiannaki
                               'baseurl': BASEURL,
180 5ce3ce4f Sofia Papagiannaki
                               'site_name': SITENAME,
181 5ce3ce4f Sofia Papagiannaki
                               'support': DEFAULT_CONTACT_EMAIL})
182 1cbce16f Sofia Papagiannaki
    sender = settings.SERVER_EMAIL
183 8f5a3a06 Sofia Papagiannaki
    try:
184 8f5a3a06 Sofia Papagiannaki
        send_mail(subject, message, sender, [invitation.username])
185 8f5a3a06 Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
186 8f5a3a06 Sofia Papagiannaki
        logger.exception(e)
187 8f5a3a06 Sofia Papagiannaki
        raise SendInvitationError()
188 8f5a3a06 Sofia Papagiannaki
    else:
189 111f3da6 Sofia Papagiannaki
        msg = 'Sent invitation %s' % invitation
190 aab4d540 Sofia Papagiannaki
        logger.log(LOGGING_LEVEL, msg)
191 683cf244 Sofia Papagiannaki
192 5ce3ce4f Sofia Papagiannaki
193 683cf244 Sofia Papagiannaki
def send_greeting(user, email_template_name='im/welcome_email.txt'):
194 683cf244 Sofia Papagiannaki
    """
195 683cf244 Sofia Papagiannaki
    Send welcome email.
196 5ce3ce4f Sofia Papagiannaki

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

258 27e26a41 Sofia Papagiannaki
    Raises SendGreetingError, ValidationError
259 683cf244 Sofia Papagiannaki
    """
260 683cf244 Sofia Papagiannaki
    user.is_active = True
261 23b9b72f Sofia Papagiannaki
    if verify_email:
262 23b9b72f Sofia Papagiannaki
        user.email_verified = True
263 683cf244 Sofia Papagiannaki
    user.save()
264 23b9b72f Sofia Papagiannaki
    send_helpdesk_notification(user, helpdesk_email_template_name)
265 683cf244 Sofia Papagiannaki
    send_greeting(user, email_template_name)
266 683cf244 Sofia Papagiannaki
267 5ce3ce4f Sofia Papagiannaki
268 142e3647 Sofia Papagiannaki
def switch_account_to_shibboleth(user, local_user, greeting_template_name='im/welcome_email.txt'):
269 23b9b72f Sofia Papagiannaki
    if not user or not isinstance(user, AstakosUser):
270 23b9b72f Sofia Papagiannaki
        return
271 5ce3ce4f Sofia Papagiannaki
272 23b9b72f Sofia Papagiannaki
    if not local_user or not isinstance(user, AstakosUser):
273 23b9b72f Sofia Papagiannaki
        return
274 5ce3ce4f Sofia Papagiannaki
275 23b9b72f Sofia Papagiannaki
    if not user.provider == 'shibboleth':
276 23b9b72f Sofia Papagiannaki
        return
277 5ce3ce4f Sofia Papagiannaki
278 23b9b72f Sofia Papagiannaki
    user.delete()
279 23b9b72f Sofia Papagiannaki
    local_user.provider = 'shibboleth'
280 23b9b72f Sofia Papagiannaki
    local_user.third_party_identifier = user.third_party_identifier
281 23b9b72f Sofia Papagiannaki
    local_user.save()
282 142e3647 Sofia Papagiannaki
    send_greeting(local_user, greeting_template_name)
283 23b9b72f Sofia Papagiannaki
    return local_user
284 23b9b72f Sofia Papagiannaki
285 5ce3ce4f Sofia Papagiannaki
286 8f5a3a06 Sofia Papagiannaki
def invite(invitation, inviter, email_template_name='im/welcome_email.txt'):
287 f36af44a Antony Chazapis
    """
288 f36af44a Antony Chazapis
    Send an invitation email and upon success reduces inviter's invitation by one.
289 5ce3ce4f Sofia Papagiannaki

290 8f5a3a06 Sofia Papagiannaki
    Raises SendInvitationError
291 f36af44a Antony Chazapis
    """
292 18ffbee1 Sofia Papagiannaki
    invitation.inviter = inviter
293 18ffbee1 Sofia Papagiannaki
    invitation.save()
294 683cf244 Sofia Papagiannaki
    send_invitation(invitation, email_template_name)
295 f36af44a Antony Chazapis
    inviter.invitations = max(0, inviter.invitations - 1)
296 d552ecb7 Antony Chazapis
    inviter.save()
297 59f598f1 Sofia Papagiannaki
298 5ce3ce4f Sofia Papagiannaki
299 8f5a3a06 Sofia Papagiannaki
class SendMailError(Exception):
300 18ffbee1 Sofia Papagiannaki
    pass
301 8f5a3a06 Sofia Papagiannaki
302 5ce3ce4f Sofia Papagiannaki
303 8f5a3a06 Sofia Papagiannaki
class SendAdminNotificationError(SendMailError):
304 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
305 8f5a3a06 Sofia Papagiannaki
        self.message = _('Failed to send notification')
306 18ffbee1 Sofia Papagiannaki
        super(SendAdminNotificationError, self).__init__()
307 8f5a3a06 Sofia Papagiannaki
308 5ce3ce4f Sofia Papagiannaki
309 18ffbee1 Sofia Papagiannaki
class SendVerificationError(SendMailError):
310 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
311 8f5a3a06 Sofia Papagiannaki
        self.message = _('Failed to send verification')
312 18ffbee1 Sofia Papagiannaki
        super(SendVerificationError, self).__init__()
313 8f5a3a06 Sofia Papagiannaki
314 5ce3ce4f Sofia Papagiannaki
315 18ffbee1 Sofia Papagiannaki
class SendInvitationError(SendMailError):
316 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
317 8f5a3a06 Sofia Papagiannaki
        self.message = _('Failed to send invitation')
318 18ffbee1 Sofia Papagiannaki
        super(SendInvitationError, self).__init__()
319 8f5a3a06 Sofia Papagiannaki
320 5ce3ce4f Sofia Papagiannaki
321 18ffbee1 Sofia Papagiannaki
class SendGreetingError(SendMailError):
322 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
323 8f5a3a06 Sofia Papagiannaki
        self.message = _('Failed to send greeting')
324 18ffbee1 Sofia Papagiannaki
        super(SendGreetingError, self).__init__()
325 8f5a3a06 Sofia Papagiannaki
326 5ce3ce4f Sofia Papagiannaki
327 18ffbee1 Sofia Papagiannaki
class SendFeedbackError(SendMailError):
328 8f5a3a06 Sofia Papagiannaki
    def __init__(self):
329 8f5a3a06 Sofia Papagiannaki
        self.message = _('Failed to send feedback')
330 49790d9d Sofia Papagiannaki
        super(SendFeedbackError, self).__init__()
331 49790d9d Sofia Papagiannaki
332 5ce3ce4f Sofia Papagiannaki
333 49790d9d Sofia Papagiannaki
class ChangeEmailError(SendMailError):
334 49790d9d Sofia Papagiannaki
    def __init__(self):
335 49790d9d Sofia Papagiannaki
        self.message = _('Failed to send change email')
336 35f8ccf1 Sofia Papagiannaki
        super(ChangeEmailError, self).__init__()
337 a0be6a0c Sofia Papagiannaki
338 5ce3ce4f Sofia Papagiannaki
339 a0be6a0c Sofia Papagiannaki
class SendNotificationError(SendMailError):
340 a0be6a0c Sofia Papagiannaki
    def __init__(self):
341 a0be6a0c Sofia Papagiannaki
        self.message = _('Failed to send notification email')
342 a0be6a0c Sofia Papagiannaki
        super(SendNotificationError, self).__init__()