Exemple #1
0
    def wrapper(request, *args, **kwargs):
        from localground.apps.site.models import Project
        r = request.GET or request.POST
        cookies = request.COOKIES
        project = None
        user = request.user

        # inner method to get most recent project if default selection isn't
        # valid
        def get_default_project(user):
            projects = Project.objects.filter(
                owner=user).order_by('-time_stamp')
            if len(projects) > 0:
                return projects[0]
            return None

        # 1) if anonymous request, return error:
        if user.is_anonymous():
            return HttpResponse(json.dumps({
                'code': 'failure',
                'message': 'User cannot be anonymous'
            }))

        # 2) order matters (defer to request param before cookie)
        # or cookies.get('project_id_' + user.username)
        project_id = r.get('project_id')
        if project_id is not None:
            if project_id in ['all', 'all#', '']:
                project = None
            elif project_id in ['add', 'add#']:
                project_name = r.get('project_name', None)
                if project_name is None:
                    project = None
                else:
                    # create a new project
                    from localground.apps.site.models import UserProfile
                    import time
                    profile = UserProfile.objects.get(user=request.user)
                    project = Project()
                    project.name = project_name
                    project.owner = user
                    project.slug = '%s-%s' % (project_name, int(time.time()))
                    project.access_authority = profile.default_view_authority
                    project.save()
            else:
                try:
                    project = Project.objects.get(id=int(project_id))
                except ValueError:
                    project = get_default_project(user)
                except Project.DoesNotExist:
                    project = get_default_project(user)

                # is user authorized?
                # if project is not None and project.owner != user and not
                # user.is_superuser:
                if project.can_view(user) == False:
                    return HttpResponse(json.dumps({
                        'code': 'failure',
                        'message': 'Not authorized to view information for %s'
                        % project.name
                    }))
        else:
            # if no project id defined, pick the most recently updated project:
            project = get_default_project(user)

        # 3) update kwargs dict to return 'identity' entry to calling function:
        if kwargs is None:
            kwargs = {}
        kwargs.update({'project': project})
        return function(request, *args, **kwargs)