示例#1
0
def file_uploaded_owner(created_user_id=0, updated_user_id=0):
    """Build upload file owners.

    :param created_user_id: The created user id. (Default: ``0``)
    :param updated_user_id: The updated user id. (Default: ``0``)
    :returns: A response with json data.
    """
    # created user.
    created_username = ''
    created_displayname = ''
    created_email = ''
    show_created_user = False

    # updated user.
    updated_username = ''
    updated_displayname = ''
    updated_email = ''
    show_updated_user = False

    if current_user.is_authenticated:
        show_created_user = True
        show_updated_user = True

        created_user = User.query.get_or_404(created_user_id)
        if created_user is not None:
            created_email = created_user.email
        created_userprofile = UserProfile.get_by_userid(created_user_id)
        if created_userprofile is not None:
            created_username = created_userprofile._username
            created_displayname = created_userprofile._displayname

        updated_user = User.query.get_or_404(updated_user_id)
        if updated_user is not None:
            updated_email = updated_user.email
        updated_userprofile = UserProfile.get_by_userid(updated_user_id)
        if updated_userprofile is not None:
            updated_username = updated_userprofile._username
            updated_displayname = updated_userprofile._displayname

    return {
        'created_user': {
            'user_id': created_user_id if show_created_user else 0,
            'username': created_username,
            'displayname': created_displayname,
            'email': created_email,
        },
        'updated_user': {
            'user_id': updated_user_id if show_updated_user else 0,
            'username': updated_username,
            'displayname': updated_displayname,
            'email': updated_email,
        }
    }
示例#2
0
文件: api.py 项目: weko3-dev15/weko
 def new_shib_profile(self):
     """
     create new profile info for shibboleth user
     :return: UserProfile instance
     """
     with db.session.begin_nested():
         # create profile.
         userprofile = UserProfile(
             user_id=self.user.id,
             timezone=current_app.config['USERPROFILES_TIMEZONE_DEFAULT'],
             language=current_app.config['USERPROFILES_LANGUAGE_DEFAULT'])
         userprofile.username = self.shib_user.shib_user_name
         db.session.add(userprofile)
     db.session.commit()
     return userprofile
示例#3
0
def test_template_filter(app):
    """Test template filter."""
    with app.app_context():
        user = User(email='*****@*****.**', password='******')
        db.session.add(user)
        db.session.commit()
        user.profile = UserProfile(username='******', full_name='name')
        db.session.commit()

        assert userprofile(user.profile.user_id) == user.profile
示例#4
0
文件: api.py 项目: mhaya/weko
    def create(cls, data, id_=None):
        """Create a deposit.

        Adds bucket creation immediately on deposit creation.
        """
        bucket = Bucket.create(
            quota_size=current_app.config['WEKO_BUCKET_QUOTA_SIZE'],
            max_file_size=current_app.config['WEKO_MAX_FILE_SIZE'],
        )
        if '$schema' in data:
            data.pop('$schema')

        data['_buckets'] = {'deposit': str(bucket.id)}

        # save user_name & display name.
        if current_user and current_user.is_authenticated:
            user = UserProfile.get_by_userid(current_user.get_id())

            username = ''
            displayname = ''
            if user is not None:
                username = user._username
                displayname = user._displayname
            if '_deposit' in data:
                data['_deposit']['owners_ext'] = {
                    'username': username,
                    'displayname': displayname,
                    'email': current_user.email
                }
        deposit = super(WekoDeposit, cls).create(data, id_=id_)
        RecordsBuckets.create(record=deposit.model, bucket=bucket)

        recid = PersistentIdentifier.get('recid', str(data['_deposit']['id']))
        depid = PersistentIdentifier.get('depid', str(data['_deposit']['id']))
        p_depid = PersistentIdentifier.create('parent',
                                              'parent:recid/{0}'.format(
                                                  str(data['_deposit']['id'])),
                                              object_type='rec',
                                              object_uuid=uuid.uuid4(),
                                              status=PIDStatus.REGISTERED)

        PIDVersioning(parent=p_depid).insert_draft_child(child=recid)
        RecordDraft.link(recid, depid)

        return deposit
示例#5
0
文件: fd.py 项目: mhaya/weko
def file_ui(pid,
            record,
            _record_file_factory=None,
            is_preview=False,
            **kwargs):
    """File Ui.

    :param is_preview: Determine the type of event.
           True: file-preview, False: file-download
    :param _record_file_factory:
    :param pid: The :class:`invenio_pidstore.models.PersistentIdentifier`
        instance.
    :param record: The record metadata.
    """
    _record_file_factory = _record_file_factory or record_file_factory
    # Extract file from record.
    fileobj = _record_file_factory(pid, record, kwargs.get('filename'))

    if not fileobj:
        abort(404)

    obj = fileobj.obj

    # Check file contents permission
    if not file_permission_factory(record, fjson=fileobj).can():
        abort(403)

    # #Check permissions
    # ObjectResource.check_object_permission(obj)

    # Get user's language
    user = UserProfile.get_by_userid(current_user.get_id())
    lang = 'en'  # Defautl language for PDF coverpage

    if user is None:
        lang = 'en'
    else:
        lang = user.language

    add_signals_info(record, obj)
    """ Send file without its pdf cover page """

    try:
        pdfcoverpage_set_rec = PDFCoverPageSettings.find(1)
        coverpage_state = WekoRecord.get_record_cvs(pid.object_uuid)

        is_original = request.args.get('original') or False
        is_pdf = 'pdf' in fileobj.mimetype
        can_download_original_pdf = check_original_pdf_download_permission(
            record)

        # if not pdf or cover page disabled: Download directly
        # if pdf and cover page enabled and has original in query param: check
        # permission (user roles)
        if is_pdf is False \
                or pdfcoverpage_set_rec is None \
                or pdfcoverpage_set_rec.avail == 'disable' \
                or coverpage_state is False \
                or (is_original and can_download_original_pdf):
            return ObjectResource.send_object(
                obj.bucket,
                obj,
                expected_chksum=fileobj.get('checksum'),
                logger_data={
                    'bucket_id': obj.bucket_id,
                    'pid_type': pid.pid_type,
                    'pid_value': pid.pid_value,
                },
                as_attachment=not is_preview,
                is_preview=is_preview)
    except AttributeError:
        return ObjectResource.send_object(
            obj.bucket,
            obj,
            expected_chksum=fileobj.get('checksum'),
            logger_data={
                'bucket_id': obj.bucket_id,
                'pid_type': pid.pid_type,
                'pid_value': pid.pid_value,
            },
            as_attachment=not is_preview,
            is_preview=is_preview)

    # Send file with its pdf cover page
    file_instance_record = FileInstance.query.filter_by(id=obj.file_id).first()
    obj_file_uri = file_instance_record.uri

    # return obj_file_uri
    signals.file_downloaded.send(current_app._get_current_object(), obj=obj)
    return make_combined_pdf(pid, obj_file_uri, fileobj, obj, lang)