Exemplo n.º 1
0
    def check_for_expiring_submissions(self, store):
        threshold = datetime_now() - timedelta(
            GLSettings.memory_copy.tip_expiration_threshold)
        for itip in store.find(models.InternalTip,
                               models.InternalTip.expiration_date < threshold):
            for rtip in itip.receivertips:
                user = rtip.receiver.user
                language = user.language
                node_desc = db_admin_serialize_node(store, language)
                notification_desc = db_get_notification(store, language)
                context_desc = admin_serialize_context(
                    store, rtip.internaltip.context, language)
                receiver_desc = admin_serialize_receiver(
                    rtip.receiver, language)
                tip_desc = serialize_rtip(store, rtip, user.language)

                data = {
                    'type': u'tip_expiration',
                    'node': node_desc,
                    'context': context_desc,
                    'receiver': receiver_desc,
                    'notification': notification_desc,
                    'tip': tip_desc
                }

                subject, body = Templating().get_mail_subject_and_body(data)

                mail = models.Mail({
                    'address': data['receiver']['mail_address'],
                    'subject': subject,
                    'body': body
                })

                store.add(mail)
Exemplo n.º 2
0
def get_tip_export(store, user_id, rtip_id):
    rtip = db_access_rtip(store, user_id, rtip_id)

    files = []
    for rf in store.find(models.ReceiverFile, models.ReceiverFile.receivertip_id == rtip_id):
        rf.downloads += 1
        file_dict = serialize_receiver_file(rf)
        file_dict['name'] = 'files/' + file_dict['name']
        files.append(copy.deepcopy(file_dict))

    receiver = rtip.receiver
    user_language = receiver.user.language

    export_dict = {
        'type': u'export_template',
        'node': db_admin_serialize_node(store, user_language),
        'notification': db_get_notification(store, user_language),
        'tip': serialize_rtip(store, rtip, user_language),
        'context': admin_serialize_context(store, rtip.internaltip.context, user_language),
        'receiver': admin_serialize_receiver(receiver, user_language),
        'comments': db_get_comment_list(rtip),
        'messages': db_get_message_list(rtip),
        'files': []
    }

    export_template = Templating().format_template(export_dict['notification']['export_template'], export_dict).encode('utf-8')

    export_dict['files'].append({'buf': export_template, 'name': "data.txt"})

    return export_dict
Exemplo n.º 3
0
def get_tip_export(store, user_id, rtip_id, language):
    rtip = db_access_rtip(store, user_id, rtip_id)

    receiver = rtip.receiver

    export_dict = {
        'type': u'export_template',
        'node': db_admin_serialize_node(store, language),
        'notification': db_get_notification(store, language),
        'tip': serialize_rtip(store, rtip, language),
        'context': admin_serialize_context(store, rtip.internaltip.context, language),
        'receiver': admin_serialize_receiver(receiver, language),
        'comments': db_get_comment_list(rtip),
        'messages': db_get_message_list(rtip),
        'files': []
    }

    export_template = Templating().format_template(export_dict['notification']['export_template'], export_dict).encode('utf-8')

    export_dict['files'].append({'buf': export_template, 'name': "data.txt"})

    for rf in store.find(models.ReceiverFile, models.ReceiverFile.receivertip_id == rtip_id):
        rf.downloads += 1
        file_dict = serialize_receiver_file(rf)
        file_dict['name'] = 'files/' + file_dict['name']
        export_dict['files'].append(copy.deepcopy(file_dict))

    return export_dict
Exemplo n.º 4
0
    def serialize_obj(self, store, key, obj, language):
        obj_id = obj.id

        cache_key = key + '-' + obj_id + '-' + language
        cache_obj = None

        if cache_key not in self.cache:
            if key == 'user':
                cache_obj = user_serialize_user(store, obj, language)
            elif key == 'context':
                cache_obj = admin_serialize_context(store, obj, language)
            elif key == 'tip':
                itip = store.find(models.InternalTip,
                                  id=obj.internaltip_id).one()
                cache_obj = serialize_rtip(store, obj, itip, language)
            elif key == 'message':
                cache_obj = serialize_message(store, obj)
            elif key == 'comment':
                cache_obj = serialize_comment(store, obj)
            elif key == 'file':
                cache_obj = models.serializers.serialize_ifile(store, obj)

            self.cache[cache_key] = cache_obj

        return self.cache[cache_key]
Exemplo n.º 5
0
    def serialize_obj(self, session, key, obj, tid, language):
        obj_id = obj.id

        cache_key = gen_cache_key(key, tid, obj_id, language)
        cache_obj = None

        if cache_key not in self.cache:
            if key == 'user':
                cache_obj = user_serialize_user(session, obj, language)
            elif key == 'context':
                cache_obj = admin_serialize_context(session, obj, language)
            elif key == 'tip':
                itip = session.query(models.InternalTip).filter(
                    models.InternalTip.id == obj.internaltip_id).one()
                cache_obj = serialize_rtip(session, obj, itip, language)
            elif key == 'message':
                cache_obj = serialize_message(session, obj)
            elif key == 'comment':
                cache_obj = serialize_comment(session, obj)
            elif key == 'file':
                cache_obj = models.serializers.serialize_ifile(session, obj)

            self.cache[cache_key] = cache_obj

        return self.cache[cache_key]
Exemplo n.º 6
0
    def check_for_expiring_submissions(self, store):
        threshold = datetime_now() + timedelta(GLSettings.memory_copy.notif.tip_expiration_threshold)
        for rtip in store.find(models.ReceiverTip, models.ReceiverTip.internaltip_id == models.InternalTip.id,
                                                   models.InternalTip.expiration_date < threshold):
            user = rtip.receiver.user
            language = user.language
            node_desc = db_admin_serialize_node(store, language)
            notification_desc = db_get_notification(store, language)
            context_desc = admin_serialize_context(store, rtip.internaltip.context, language)
            receiver_desc = admin_serialize_receiver(rtip.receiver, language)
            tip_desc = serialize_rtip(store, rtip, user.language)

            data = {
               'type': u'tip_expiration',
               'node': node_desc,
               'context': context_desc,
               'receiver': receiver_desc,
               'notification': notification_desc,
               'tip': tip_desc
            }

            subject, body = Templating().get_mail_subject_and_body(data)

            mail = models.Mail({
               'address': data['receiver']['mail_address'],
               'subject': subject,
               'body': body
            })

            store.add(mail)
Exemplo n.º 7
0
def db_create_identityaccessrequest_notifications(session, tid, itip, rtip, iar):
    users = session.query(models.User).filter(models.User.role == u'custodian', models.User.notification == True)
    for user in users:
        node = db_admin_serialize_node(session, tid, user.language)
        context = session.query(models.Context).filter(models.Context.id == itip.context_id, models.Context.tid == tid).one()

        data = {
            'type': 'identity_access_request'
        }

        data['user'] = user_serialize_user(session, user, user.language)
        data['tip'] = serialize_rtip(session, rtip, itip, user.language)
        data['context'] = admin_serialize_context(session, context, user.language)
        data['iar'] = serialize_identityaccessrequest(session, iar)
        data['node'] = db_admin_serialize_node(session, tid, user.language)

        if data['node']['mode'] != u'whistleblowing.it':
            data['notification'] = db_get_notification(session, tid, user.language)
        else:
            data['notification'] = db_get_notification(session, 1, user.language)

        subject, body = Templating().get_mail_subject_and_body(data)

        session.add(models.Mail({
            'address': data['user']['mail_address'],
            'subject': subject,
            'body': body,
            'tid': tid
        }))
Exemplo n.º 8
0
def db_create_identityaccessrequest_notifications(session, tid, itip, rtip,
                                                  iar):
    users = session.query(models.User).filter(models.User.role == u'custodian',
                                              models.User.notification == True)
    for user in users:
        node = db_admin_serialize_node(session, tid, user.language)
        context = session.query(models.Context).filter(
            models.Context.id == itip.context_id,
            models.Context.tid == tid).one()

        data = {'type': 'identity_access_request'}

        data['user'] = user_serialize_user(session, user, user.language)
        data['tip'] = serialize_rtip(session, rtip, itip, user.language)
        data['context'] = admin_serialize_context(session, context,
                                                  user.language)
        data['iar'] = serialize_identityaccessrequest(session, iar)
        data['node'] = db_admin_serialize_node(session, tid, user.language)

        if data['node']['mode'] == u'default':
            data['notification'] = db_get_notification(session, tid,
                                                       user.language)
        else:
            data['notification'] = db_get_notification(session, 1,
                                                       user.language)

        subject, body = Templating().get_mail_subject_and_body(data)

        session.add(
            models.Mail({
                'address': data['user']['mail_address'],
                'subject': subject,
                'body': body,
                'tid': tid
            }))
Exemplo n.º 9
0
def get_tip_export(session, tid, user_id, rtip_id, language):
    rtip, itip = db_access_rtip(session, tid, user_id, rtip_id)

    user, context = session.query(models.User, models.Context) \
                           .filter(models.User.id == rtip.receiver_id,
                                   models.Context.id == models.InternalTip.context_id,
                                   models.InternalTip.id == rtip.internaltip_id,
                                   models.User.tid == tid).one()

    rtip_dict = serialize_rtip(session, rtip, itip, language)

    export_dict = {
        'type':
        'export_template',
        'node':
        db_admin_serialize_node(session, tid, language),
        'notification':
        db_get_notification(session, tid, language),
        'tip':
        rtip_dict,
        'crypto_tip_prv_key':
        rtip.crypto_tip_prv_key,
        'user':
        user_serialize_user(session, user, language),
        'context':
        admin_serialize_context(session, context, language),
        'comments':
        rtip_dict['comments'],
        'messages':
        rtip_dict['messages'],
        'files': [],
        'submission_statuses':
        db_retrieve_all_submission_statuses(session, tid, language)
    }

    for rfile in session.query(models.ReceiverFile).filter(
            models.ReceiverFile.receivertip_id == rtip_id):
        rfile.last_access = datetime_now()
        rfile.downloads += 1
        file_dict = models.serializers.serialize_rfile(session, tid, rfile)
        file_dict['name'] = 'files/' + file_dict['name']
        file_dict['path'] = os.path.join(Settings.attachments_path,
                                         file_dict['filename'])
        file_dict['forged'] = False
        export_dict['files'].append(file_dict)

    for wf in session.query(models.WhistleblowerFile).filter(
            models.WhistleblowerFile.receivertip_id == models.ReceiverTip.id,
            models.ReceiverTip.internaltip_id == rtip.internaltip_id,
            models.InternalTip.id == rtip.internaltip_id):
        file_dict = models.serializers.serialize_wbfile(session, tid, wf)
        file_dict['name'] = 'files_from_recipients/' + file_dict['name']
        file_dict['path'] = os.path.join(Settings.attachments_path,
                                         file_dict['filename'])
        file_dict[
            'forged'] = True  # To be removed as soon it will be encrypted
        export_dict['files'].append(file_dict)

    return export_dict
Exemplo n.º 10
0
    def process_ReceiverTip(self, store, rtip, data):
        language = rtip.receiver.user.language

        data['tip'] = serialize_rtip(store, rtip, language)
        data['context'] = admin_serialize_context(store, rtip.internaltip.context, language)
        data['receiver'] = admin_serialize_receiver(rtip.receiver, language)

        self.process_mail_creation(store, data)
Exemplo n.º 11
0
def get_tip_export(session, tid, user_id, rtip_id, language):
    rtip, itip = db_access_rtip(session, tid, user_id, rtip_id)

    user, context = session.query(models.User, models.Context) \
                           .filter(models.User.id == rtip.receiver_id,
                                   models.Context.id == models.InternalTip.context_id,
                                   models.InternalTip.id == rtip.internaltip_id,
                                   models.UserTenant.user_id == models.User.id,
                                   models.UserTenant.tenant_id == tid).one()

    rtip_dict = serialize_rtip(session, rtip, itip, language)

    export_dict = {
        'type': u'export_template',
        'node': db_admin_serialize_node(session, tid, language),
        'notification': db_get_notification(session, tid, language),
        'tip': rtip_dict,
        'user': user_serialize_user(session, user, language),
        'context': admin_serialize_context(session, context, language),
        'comments': rtip_dict['comments'],
        'messages': rtip_dict['messages'],
        'files': []
    }

    export_template = Templating().format_template(
        export_dict['notification']['export_template'],
        export_dict).encode('utf-8')

    export_template = msdos_encode(text_type(export_template,
                                             'utf-8')).encode('utf-8')

    export_dict['files'].append({
        'fo': BytesIO(export_template),
        'name': "data.txt"
    })

    for rfile in session.query(models.ReceiverFile).filter(
            models.ReceiverFile.receivertip_id == rtip_id):
        rfile.last_access = datetime_now()
        rfile.downloads += 1
        file_dict = models.serializers.serialize_rfile(session, tid, rfile)
        file_dict['name'] = 'files/' + file_dict['name']
        file_dict['path'] = os.path.join(Settings.attachments_path,
                                         file_dict['filename'])
        export_dict['files'].append(file_dict)

    for wf in session.query(models.WhistleblowerFile).filter(
            models.WhistleblowerFile.receivertip_id == models.ReceiverTip.id,
            models.ReceiverTip.internaltip_id == rtip.internaltip_id,
            models.InternalTip.id == rtip.internaltip_id):
        file_dict = models.serializers.serialize_wbfile(session, tid, wf)
        file_dict['name'] = 'files_from_recipients/' + file_dict['name']
        file_dict['path'] = os.path.join(Settings.attachments_path,
                                         file_dict['filename'])
        export_dict['files'].append(file_dict)

    return export_dict
Exemplo n.º 12
0
def get_tip_export(store, user_id, rtip_id, language):
    rtip = db_access_rtip(store, user_id, rtip_id)

    receiver = rtip.receiver

    rtip_dict = serialize_rtip(store, rtip, language)

    export_dict = {
        'type':
        u'export_template',
        'node':
        db_admin_serialize_node(store, language),
        'notification':
        db_get_notification(store, language),
        'tip':
        serialize_rtip(store, rtip, language),
        'context':
        admin_serialize_context(store, rtip.internaltip.context, language),
        'receiver':
        admin_serialize_receiver(store, receiver, language),
        'comments':
        rtip_dict['comments'],
        'messages':
        rtip_dict['messages'],
        'files': []
    }

    export_template = Templating().format_template(
        export_dict['notification']['export_template'],
        export_dict).encode('utf-8')

    export_template = msdos_encode(export_template)

    export_dict['files'].append({'buf': export_template, 'name': "data.txt"})

    for rf in store.find(models.ReceiverFile,
                         models.ReceiverFile.receivertip_id == rtip_id):
        rf.downloads += 1
        file_dict = models.serializers.serialize_rfile(rf)
        file_dict['name'] = 'files/' + file_dict['name']
        export_dict['files'].append(file_dict)

    rtips_ids = [rt.id for rt in rtip.internaltip.receivertips]
    wfs = store.find(models.WhistleblowerFile,
                     In(models.WhistleblowerFile.receivertip_id, rtips_ids))

    for wf in wfs:
        file_dict = models.serializers.serialize_wbfile(wf)
        file_dict['name'] = 'files_from_recipients/' + file_dict['name']
        export_dict['files'].append(file_dict)

    return export_dict
Exemplo n.º 13
0
    def process_Message(self, store, message, data):
        # if the message is destinated to the whistleblower no mail should be sent
        if message.type == u"receiver":
            return

        language = message.receivertip.receiver.user.language

        data['message'] = serialize_message(message)
        data['tip'] = serialize_rtip(store, message.receivertip, language)
        data['context'] = admin_serialize_context(store, message.receivertip.internaltip.context, language)
        data['receiver'] = admin_serialize_receiver(message.receivertip.receiver, language)

        self.process_mail_creation(store, data)
Exemplo n.º 14
0
    def process_Comment(self, store, comment, data):
        for rtip in comment.internaltip.receivertips:
            if comment.type == u'receiver' and comment.author == rtip.receiver.user.name:
                continue

            language = rtip.receiver.user.language

            dataX = copy.deepcopy(data)
            dataX['comment'] = serialize_comment(comment)
            dataX['tip'] = serialize_rtip(store, rtip, language)
            dataX['context'] = admin_serialize_context(store, comment.internaltip.context, language)
            dataX['receiver'] = admin_serialize_receiver(rtip.receiver, language)

            self.process_mail_creation(store, dataX)
Exemplo n.º 15
0
def db_create_identity_access_reply_notifications(session, itip, rtip, iar):
    """
    Transaction for the creation of notifications related to identity access replies
    :param session: An ORM session
    :param itip: A itip ID of the tip involved in the request
    :param iar: A identity access request model
    """
    from globaleaks.handlers.rtip import serialize_rtip

    for user in session.query(models.User) \
                       .filter(models.User.id == rtip.receiver_id,
                               models.User.notification.is_(True)):
        context = session.query(
            models.Context).filter(models.Context.id == itip.context_id).one()

        data = {
            'type':
            'identity_access_authorized'
            if iar.reply == 'authorized' else 'identity_access_denied'
        }

        data['user'] = user_serialize_user(session, user, user.language)
        data['tip'] = serialize_rtip(session, rtip, itip, user.language)
        data['context'] = admin_serialize_context(session, context,
                                                  user.language)
        data['iar'] = serialize_identityaccessrequest(session, iar)
        data['node'] = db_admin_serialize_node(session, user.tid,
                                               user.language)

        if data['node']['mode'] == 'default':
            data['notification'] = db_get_notification(session, user.tid,
                                                       user.language)
        else:
            data['notification'] = db_get_notification(session, 1,
                                                       user.language)

        subject, body = Templating().get_mail_subject_and_body(data)

        session.add(
            models.Mail({
                'address': data['user']['mail_address'],
                'subject': subject,
                'body': body,
                'tid': user.tid
            }))
Exemplo n.º 16
0
def db_create_identityaccessrequest_notifications(session, tid, itip, rtip,
                                                  iar):
    """
    Transaction for the creation of notifications related to identity access requests
    :param session: An ORM session
    :param tid: A tenant ID on which the request is issued
    :param itip: A itip ID of the tip involved in the request
    :param rtip: A rtip ID of the rtip involved in the request
    :param iar: A identity access request model
    """
    for user in session.query(models.User).filter(
            models.User.role == 'custodian', models.User.tid == tid,
            models.User.notification.is_(True)):
        context = session.query(models.Context).filter(
            models.Context.id == itip.context_id,
            models.Context.tid == tid).one()

        data = {'type': 'identity_access_request'}

        data['user'] = user_serialize_user(session, user, user.language)
        data['tip'] = serialize_rtip(session, rtip, itip, user.language)
        data['context'] = admin_serialize_context(session, context,
                                                  user.language)
        data['iar'] = serialize_identityaccessrequest(session, iar)
        data['node'] = db_admin_serialize_node(session, tid, user.language)

        if data['node']['mode'] == 'default':
            data['notification'] = db_get_notification(session, tid,
                                                       user.language)
        else:
            data['notification'] = db_get_notification(session, 1,
                                                       user.language)

        subject, body = Templating().get_mail_subject_and_body(data)

        session.add(
            models.Mail({
                'address': data['user']['mail_address'],
                'subject': subject,
                'body': body,
                'tid': tid
            }))
Exemplo n.º 17
0
def get_tip_export(store, user_id, rtip_id, language):
    rtip = db_access_rtip(store, user_id, rtip_id)

    receiver = rtip.receiver

    rtip_dict = serialize_rtip(store, rtip, language)

    export_dict = {
        'type': u'export_template',
        'node': db_admin_serialize_node(store, language),
        'notification': db_get_notification(store, language),
        'tip': serialize_rtip(store, rtip, language),
        'context': admin_serialize_context(store, rtip.internaltip.context, language),
        'receiver': admin_serialize_receiver(receiver, language),
        'comments': rtip_dict['comments'],
        'messages': rtip_dict['messages'],
        'files': []
    }

    export_template = Templating().format_template(export_dict['notification']['export_template'], export_dict).encode('utf-8')

    export_template = msdos_encode(export_template)

    export_dict['files'].append({'buf': export_template, 'name': "data.txt"})

    for rf in store.find(models.ReceiverFile, models.ReceiverFile.receivertip_id == rtip_id):
        rf.downloads += 1
        file_dict = models.serializers.serialize_rfile(rf)
        file_dict['name'] = 'files/' + file_dict['name']
        export_dict['files'].append(copy.deepcopy(file_dict))

    rtips_ids = [rt.id for rt in rtip.internaltip.receivertips]
    wfs = store.find(models.WhistleblowerFile, In(models.WhistleblowerFile.receivertip_id, rtips_ids))

    for wf in wfs:
        file_dict = models.serializers.serialize_wbfile(wf)
        file_dict['name'] = 'files_from_recipients/' + file_dict['name']
        export_dict['files'].append(copy.deepcopy(file_dict))

    return export_dict
Exemplo n.º 18
0
def serialize_content(store, cache, key, obj, language):
    obj_id = obj.id

    cache_key = key + obj_id + language

    if cache_key not in cache:
        if key == 'tip':
            cache_obj = serialize_rtip(store, obj, language)
        elif key == 'context':
            cache_obj = admin_serialize_context(store, obj, language)
        elif key == 'receiver':
            cache_obj = admin_serialize_receiver(obj, language)
        elif key == 'message':
            cache_obj = serialize_message(obj)
        elif key == 'comment':
            cache_obj = serialize_comment(obj)
        elif key == 'file':
            cache_obj = serialize_internalfile(obj)

        cache[cache_key] = cache_obj

    return copy.deepcopy(cache[cache_key])
Exemplo n.º 19
0
def get_tip_export(session, tid, user_id, rtip_id, language):
    rtip, itip = db_access_rtip(session, tid, user_id, rtip_id)

    user, context = session.query(models.User, models.Context) \
                           .filter(models.User.id == rtip.receiver_id,
                                   models.Context.id == models.InternalTip.context_id,
                                   models.InternalTip.id == rtip.internaltip_id,
                                   models.User.tid == tid).one()

    rtip_dict = serialize_rtip(session, rtip, itip, language)

    return {
        'type': 'export_template',
        'node': db_admin_serialize_node(session, tid, language),
        'notification': db_get_notification(session, tid, language),
        'tip': rtip_dict,
        'crypto_tip_prv_key': Base64Encoder.decode(rtip.crypto_tip_prv_key),
        'user': user_serialize_user(session, user, language),
        'context': admin_serialize_context(session, context, language),
        'submission_statuses':
        db_get_submission_statuses(session, tid, language)
    }
Exemplo n.º 20
0
def serialize_content(store, cache, key, obj, language):
    obj_id = obj.id

    cache_key = key + obj_id + language

    if cache_key not in cache:
        if key == 'tip':
             cache_obj = serialize_rtip(store, obj, language)
        elif key == 'context':
             cache_obj = admin_serialize_context(store, obj, language)
        elif key == 'receiver':
             cache_obj = admin_serialize_receiver(obj, language)
        elif key == 'message':
             cache_obj = serialize_message(obj)
        elif key == 'comment':
             cache_obj = serialize_comment(obj)
        elif key == 'file':
             cache_obj = serialize_internalfile(obj)

        cache[cache_key] = cache_obj

    return copy.deepcopy(cache[cache_key])
Exemplo n.º 21
0
    def serialize_obj(self, store, key, obj, language):
        obj_id = obj.id

        cache_key = key + '-' + obj_id + '-' + language

        if cache_key not in self.cache:
            if key == 'tip':
                cache_obj = serialize_rtip(store, obj, language)
            elif key == 'context':
                cache_obj = admin_serialize_context(store, obj, language)
            elif key == 'receiver':
                cache_obj = admin_serialize_receiver(obj, language)
            elif key == 'message':
                cache_obj = serialize_message(obj)
            elif key == 'comment':
                cache_obj = serialize_comment(obj)
            elif key == 'file':
                cache_obj = serialize_internalfile(obj)

            self.cache[cache_key] = cache_obj

        return self.cache[cache_key]
Exemplo n.º 22
0
    def serialize_obj(self, store, key, obj, language):
        obj_id = obj.id

        cache_key = key + '-' + obj_id + '-' + language

        if cache_key not in self.cache:
            if key == 'tip':
                cache_obj = serialize_rtip(store, obj, language)
            elif key == 'context':
                cache_obj = admin_serialize_context(store, obj, language)
            elif key == 'receiver':
                cache_obj = admin_serialize_receiver(obj, language)
            elif key == 'message':
                cache_obj = serialize_message(obj)
            elif key == 'comment':
                cache_obj = serialize_comment(obj)
            elif key == 'file':
                cache_obj = serialize_internalfile(obj)

            self.cache[cache_key] = cache_obj

        return self.cache[cache_key]
Exemplo n.º 23
0
def get_file_collection(store, user_id, rtip_id):
    rtip = db_access_rtip(store, user_id, rtip_id)

    archive_dict = {'files': [], 'file_counter': 0, 'total_size': 0}

    file_list = []
    for rf in store.find(models.ReceiverFile, models.ReceiverFile.receivertip_id == rtip_id):
        rf.downloads += 1
        file_list.append(serialize_receiver_file(rf))
        archive_dict['file_counter'] += 1
        archive_dict['total_size'] += rf.size
        archive_dict['files'].append(serialize_receiver_file(rf))

    receiver = rtip.receiver
    user_language = receiver.user.language

    data = {
        'type': u'archive_description',
        'node': db_admin_serialize_node(store, user_language),
        'notification': db_get_notification(store, user_language),
        'tip': serialize_rtip(store, rtip, user_language),
        'context': admin_serialize_context(store, rtip.internaltip.context, user_language),
        'receiver': admin_serialize_receiver(receiver, user_language),
        'archive': archive_dict
    }

    archive_description = Templating().format_template(data['notification']['archive_description'], data).encode('utf-8')

    file_list.append(
        {
           'buf': archive_description,
           'name': "COLLECTION_INFO.txt"
        }
    )

    return file_list
Exemplo n.º 24
0
    def serialize_obj(self, session, key, obj, tid, language):
        obj_id = obj.id

        cache_key = gen_cache_key(key, tid, obj_id, language)
        cache_obj = None

        if cache_key not in self.cache:
            if key == 'user':
                cache_obj = user_serialize_user(session, obj, language)
            elif key == 'context':
                cache_obj = admin_serialize_context(session, obj, language)
            elif key == 'tip':
                itip = session.query(models.InternalTip).filter(models.InternalTip.id == obj.internaltip_id).one()
                cache_obj = serialize_rtip(session, obj, itip, language)
            elif key == 'message':
                cache_obj = serialize_message(session, obj)
            elif key == 'comment':
                cache_obj = serialize_comment(session, obj)
            elif key == 'file':
                cache_obj = models.serializers.serialize_ifile(session, obj)

            self.cache[cache_key] = cache_obj

        return self.cache[cache_key]
Exemplo n.º 25
0
    def check_for_expiring_submissions(self, store):
        threshold = datetime_now() + timedelta(
            hours=GLSettings.memory_copy.notif.tip_expiration_threshold)
        receivers = store.find(models.Receiver)
        for receiver in receivers:
            rtips = store.find(
                models.ReceiverTip,
                models.ReceiverTip.internaltip_id == models.InternalTip.id,
                models.InternalTip.expiration_date < threshold,
                models.ReceiverTip.receiver_id == models.Receiver.id,
                models.Receiver.id == receiver.id)

            if rtips.count() == 0:
                continue

            user = receiver.user
            language = user.language
            node_desc = db_admin_serialize_node(store, language)
            notification_desc = db_get_notification(store, language)

            receiver_desc = admin_serialize_receiver(store, receiver, language)

            if rtips.count() == 1:
                rtip = rtips[0]
                tip_desc = serialize_rtip(store, rtip, user.language)
                context_desc = admin_serialize_context(
                    store, rtip.internaltip.context, language)

                data = {
                    'type': u'tip_expiration',
                    'node': node_desc,
                    'context': context_desc,
                    'receiver': receiver_desc,
                    'notification': notification_desc,
                    'tip': tip_desc
                }

            else:
                tips_desc = []
                earliest_expiration_date = datetime_never()

                for rtip in rtips:
                    if rtip.internaltip.expiration_date < earliest_expiration_date:
                        earliest_expiration_date = rtip.internaltip.expiration_date

                    tips_desc.append(serialize_rtip(store, rtip,
                                                    user.language))

                data = {
                    'type':
                    u'tip_expiration_summary',
                    'node':
                    node_desc,
                    'notification':
                    notification_desc,
                    'receiver':
                    receiver_desc,
                    'expiring_submission_count':
                    rtips.count(),
                    'earliest_expiration_date':
                    datetime_to_ISO8601(earliest_expiration_date)
                }

            subject, body = Templating().get_mail_subject_and_body(data)

            mail = models.Mail({
                'address': receiver_desc['mail_address'],
                'subject': subject,
                'body': body
            })

            store.add(mail)