Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / dispatch.py @ 1e47e49d

History | View | Annotate | Download (3.5 kB)

1
# Copyright 2012, 2013 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
#from pithos.backends import connect_backend
35
from pithos.api.util import hashmap_md5, get_backend
36

    
37
from django.core.mail import send_mail
38

    
39
from django.conf import settings
40

    
41
import socket
42
from smtplib import SMTPException
43

    
44

    
45
def update_md5(m):
46
    if m['resource'] != 'object' or m['details']['action'] != 'object update':
47
        return
48

    
49
    backend = get_backend()
50
    backend.pre_exec()
51

    
52
    path = m['value']
53
    account, container, name = path.split('/', 2)
54
    version = m['details']['version']
55
    meta = None
56
    try:
57
        meta = backend.get_object_meta(
58
            account, account, container, name, 'pithos', version)
59
        if meta['checksum'] == '':
60
            size, hashmap = backend.get_object_hashmap(
61
                account, account, container, name, version)
62
            checksum = hashmap_md5(backend, hashmap, size)
63
            backend.update_object_checksum(
64
                account, account, container, name, version, checksum)
65
            print 'INFO: Updated checksum for path "%s"' % (path,)
66
    except Exception, e:
67
        print 'WARNING: Can not update checksum for path "%s" (%s)' % (path, e)
68

    
69
    backend.post_exec()
70
    backend.close()
71

    
72

    
73
def send_sharing_notification(m):
74
    if m['resource'] != 'sharing':
75
        return
76

    
77
    members = m['details']['members']
78
    user = m['details']['user']
79
    path = m['value']
80
    account, container, name = path.split('/', 2)
81

    
82
    subject = 'Invitation to a Pithos+ shared object'
83
    from_email = settings.SERVER_EMAIL
84
    recipient_list = members
85
    message = ("User %s has invited you to a Pithos+ shared object."
86
               "You can view it under \"Shared to me\" at \"%s\".")
87
    message = message % (user, path)
88
    try:
89
        send_mail(subject, message, from_email, recipient_list)
90
        print 'INFO: Sharing notification sent for path "%s" to %s' % (
91
            path, ','.join(recipient_list))
92
    except (SMTPException, socket.error) as e:
93
        print 'WARNING: Can not update send email for sharing "%s" (%s)' % (
94
            path, e)