Ejemplo n.º 1
0
    def process_view(request, view_func, *view_args, **view_kwargs):
        if request.user.is_anonymous():
            return

        try:
            request.user.member
        except Member.DoesNotExist:
            return

        if 'pgp' not in request.user.member.connections:
            return

        if request.user.member.seen_pgp_interstitial:
            return

        # Don't redirect if user is already on the intended interstitial.
        try:
            if request.resolver_match.url_name == 'pgp-interstitial':
                return
        except AttributeError:
            pass

        # Try gently, give up if this breaks.
        try:
            if not is_public(request.user.member, 'pgp'):
                url = '{}?{}'.format(
                    urlresolvers.reverse('pgp-interstitial'),
                    urlencode({'next': request.get_full_path()}))
                return HttpResponseRedirect(url)
            else:
                request.user.member.seen_pgp_interstitial = True
                request.user.member.save()
        except:  # pylint: disable=bare-except
            pass
    def get_member_data(member):
        member_data = {}

        for source in get_source_labels():
            userdata = getattr(member.user, source)
            is_connected = bool(userdata.is_connected)

            has_files, source_is_public = (False, False)

            # Check for files.
            has_files = DataFile.objects.filter(user=member.user,
                                                source=source).count() > 0

            # Check public sharing.
            if is_connected:
                source_is_public = is_public(member, source)

            member_data[source] = {
                'is_connected': is_connected,
                'has_files': has_files,
                'is_public': source_is_public,
            }

        member_data['date_joined'] = member.user.date_joined.strftime(
            '%Y%m%dT%H%M%SZ')

        if member.primary_email:
            member_data['email_verified'] = member.primary_email.verified
        else:
            member_data['email_verified'] = False

        member_data['public_data_participant'] = (
            member.public_data_participant.enrolled)

        return member_data
Ejemplo n.º 3
0
    def public_direct_sharing_project_files(self):
        project_memberships = (self.member.datarequestprojectmember_set.
                               filter(joined=True, authorized=True,
                                      revoked=False))

        files = {}

        for membership in project_memberships:
            if not is_public(self.member, membership.project.id_label):
                continue

            files[membership.project] = list(ProjectDataFile.objects.filter(
                user=membership.member.user,
                direct_sharing_project=membership.project).exclude(
                    completed=False).exclude(archived=True))

        return files
Ejemplo n.º 4
0
    def get_context_data(self, **kwargs):
        context = super(ActivityManagementView,
                        self).get_context_data(**kwargs)

        activities = personalize_activities_dict(self.request.user,
                                                 only_active=False,
                                                 only_approved=False)
        try:
            self.activity = self.get_activity(activities)
        except KeyError:
            raise Http404

        # MPB Aug 2017: This comprehension is slow, taking 2+ secs in local dev
        pubfilecount_cachetag = 'pubfilecount-{}'.format(
            self.activity['source_name'])
        public_files = cache.get(pubfilecount_cachetag)
        if not public_files:
            public_files = len([
                df for df in DataFile.objects.filter(
                    source=self.activity['source_name']).exclude(
                        parent_project_data_file__completed=False).current().
                distinct('user') if df.is_public
            ])
        cache.set(pubfilecount_cachetag, public_files, timeout=TEN_MINUTES)

        requesting_activities = self.requesting_activities()
        data_is_public = False

        data_files = []
        if self.request.user.is_authenticated():
            data_files = (DataFile.objects.for_user(
                self.request.user).filter(source=self.activity['source_name']))
            data_is_public = is_public(self.request.user.member,
                                       self.activity['source_name'])

        project = None
        project_member = None
        project_permissions = None
        granted_permissions = None
        permissions_changed = False
        if 'project_id' in self.activity:
            project = DataRequestProject.objects.get(
                pk=self.activity['project_id'])

            project_permissions = {
                'share_username': project.request_username_access,
                'send_messages': project.request_message_permission,
                'share_sources': project.request_sources_access,
                'returned_data_description': project.returned_data_description,
            }
            if self.activity['is_connected']:
                project_member = project.active_user(self.request.user)
                granted_permissions = {
                    'share_username': project_member.username_shared,
                    'send_messages': project_member.message_permission,
                    'share_sources': project_member.sources_shared,
                    'returned_data_description':
                    project.returned_data_description,
                }
                permissions_changed = (not all([
                    granted_permissions[x] == project_permissions[x] for x in
                    ['share_username', 'send_messages', 'share_sources']
                ]))

        context.update({
            'activities': activities,
            'activity': self.activity,
            'data_files': data_files,
            'is_public': data_is_public,
            'source': self.activity['source_name'],
            'project': project,
            'project_member': project_member,
            'project_permissions': project_permissions,
            'granted_permissions': granted_permissions,
            'permissions_changed': permissions_changed,
            'public_files': public_files,
            'requesting_activities': requesting_activities,
        })

        return context
Ejemplo n.º 5
0
 def public_selfie_files(self):
     if is_public(self.member, 'data_selfie'):
         return DataSelfieDataFile.objects.filter(user=self.member.user)
Ejemplo n.º 6
0
    def get_context_data(self, **kwargs):
        context = super(ActivityManagementView,
                        self).get_context_data(**kwargs)

        try:
            self.project = DataRequestProject.objects.get(
                slug=self.kwargs['source'])
        except KeyError:
            raise Http404
        self.activity = activity_from_data_request_project(
            self.project, user=self.request.user)

        public_users = [
            pda.user for pda in PublicDataAccess.objects.filter(
                data_source=self.activity['source_name']).filter(
                    is_public=True).annotate(
                        user=F('participant__member__user'))
        ]
        public_files = DataFile.objects.filter(
            source=self.activity['source_name']).exclude(
                parent_project_data_file__completed=False).distinct(
                    'user').filter(user__in=public_users).count()

        requesting_activities = self.requesting_activities()
        requested_activities = self.requested_activities()
        data_is_public = False

        data_files = []
        if self.request.user.is_authenticated():
            data_files = (DataFile.objects.for_user(
                self.request.user).filter(source=self.activity['source_name']))
            data_is_public = is_public(self.request.user.member,
                                       self.activity['source_name'])

        project = None
        project_member = None
        project_permissions = None
        granted_permissions = None
        permissions_changed = False
        if 'project_id' in self.activity:
            project = DataRequestProject.objects.get(
                pk=self.activity['project_id'])

            project_permissions = {
                'share_username': project.request_username_access,
                'send_messages': project.request_message_permission,
                'share_sources': project.request_sources_access,
                'all_sources': project.all_sources_access,
                'returned_data_description': project.returned_data_description,
            }
            if self.activity['is_connected']:
                project_member = project.active_user(self.request.user)
                granted_permissions = {
                    'share_username': project_member.username_shared,
                    'send_messages': project_member.message_permission,
                    'share_sources': project_member.sources_shared,
                    'all_sources': project_member.all_sources_shared,
                    'returned_data_description':
                    project.returned_data_description,
                }
                permissions_changed = (not all([
                    granted_permissions[x] == project_permissions[x] for x in [
                        'share_username', 'send_messages', 'share_sources',
                        'all_sources'
                    ]
                ]))

        context.update({
            'activity': self.activity,
            'data_files': data_files,
            'is_public': data_is_public,
            'source': self.activity['source_name'],
            'project': project,
            'project_member': project_member,
            'project_permissions': project_permissions,
            'granted_permissions': granted_permissions,
            'permissions_changed': permissions_changed,
            'public_files': public_files,
            'requesting_activities': requesting_activities,
            'requested_activities': requested_activities,
        })

        return context