Exemple #1
0
def test_authenticated_user_has_perm_on_project_related_object():
    user1 = factories.UserFactory()
    project = factories.ProjectFactory()
    project.public_permissions = ["test"]
    us = factories.UserStoryFactory(project=project)

    assert services.user_has_perm(user1, "test", us) is True
    assert services.user_has_perm(user1, "fail", us) is False
Exemple #2
0
def test_authenticated_user_has_perm_on_project_related_object():
    user1 = factories.UserFactory()
    project = factories.ProjectFactory()
    project.public_permissions = ["test"]
    us = factories.UserStoryFactory(project=project)

    assert services.user_has_perm(user1, "test", us) is True
    assert services.user_has_perm(user1, "fail", us) is False
Exemple #3
0
    def list(self, request, **kwargs):
        validator = ResolverValidator(data=request.QUERY_PARAMS)
        if not validator.is_valid():
            raise exc.BadRequest(validator.errors)

        data = validator.data

        project_model = apps.get_model("projects", "Project")
        project = get_object_or_404(project_model, slug=data["project"])

        self.check_permissions(request, "list", project)

        result = {"project": project.pk}

        if data["epic"] and user_has_perm(request.user, "view_epics", project):
            result["epic"] = get_object_or_404(project.epics.all(),
                                               ref=data["epic"]).pk
        if data["us"] and user_has_perm(request.user, "view_us", project):
            result["us"] = get_object_or_404(project.user_stories.all(),
                                             ref=data["us"]).pk
        if data["task"] and user_has_perm(request.user, "view_tasks", project):
            result["task"] = get_object_or_404(project.tasks.all(),
                                               ref=data["task"]).pk
        if data["issue"] and user_has_perm(request.user, "view_issues", project):
            result["issue"] = get_object_or_404(project.issues.all(),
                                                ref=data["issue"]).pk
        if data["milestone"] and user_has_perm(request.user, "view_milestones", project):
            result["milestone"] = get_object_or_404(project.milestones.all(),
                                                    slug=data["milestone"]).pk
        if data["wikipage"] and user_has_perm(request.user, "view_wiki_pages", project):
            result["wikipage"] = get_object_or_404(project.wiki_pages.all(),
                                                   slug=data["wikipage"]).pk

        if data["ref"]:
            ref_found = False  # No need to continue once one ref is found
            if ref_found is False and user_has_perm(request.user, "view_epics", project):
                epic = project.epics.filter(ref=data["ref"]).first()
                if epic:
                    result["epic"] = epic.pk
                    ref_found = True
            if user_has_perm(request.user, "view_us", project):
                us = project.user_stories.filter(ref=data["ref"]).first()
                if us:
                    result["us"] = us.pk
                    ref_found = True
            if ref_found is False and user_has_perm(request.user, "view_tasks", project):
                task = project.tasks.filter(ref=data["ref"]).first()
                if task:
                    result["task"] = task.pk
                    ref_found = True
            if ref_found is False and user_has_perm(request.user, "view_issues", project):
                issue = project.issues.filter(ref=data["ref"]).first()
                if issue:
                    result["issue"] = issue.pk

        return response.Ok(result)
Exemple #4
0
def _filter_by_permissions(obj, user):
    UserStory = apps.get_model("userstories", "UserStory")
    Issue = apps.get_model("issues", "Issue")
    Task = apps.get_model("tasks", "Task")
    WikiPage = apps.get_model("wiki", "WikiPage")

    if isinstance(obj, UserStory):
        return user_has_perm(user, "view_us", obj, cache="project")
    elif isinstance(obj, Issue):
        return user_has_perm(user, "view_issues", obj, cache="project")
    elif isinstance(obj, Task):
        return user_has_perm(user, "view_tasks", obj, cache="project")
    elif isinstance(obj, WikiPage):
        return user_has_perm(user, "view_wiki_pages", obj, cache="project")
    return False
Exemple #5
0
def _filter_by_permissions(obj, user):
    UserStory = apps.get_model("userstories", "UserStory")
    Issue = apps.get_model("issues", "Issue")
    Task = apps.get_model("tasks", "Task")
    WikiPage = apps.get_model("wiki", "WikiPage")

    if isinstance(obj, UserStory):
        return user_has_perm(user, "view_us", obj, cache="project")
    elif isinstance(obj, Issue):
        return user_has_perm(user, "view_issues", obj, cache="project")
    elif isinstance(obj, Task):
        return user_has_perm(user, "view_tasks", obj, cache="project")
    elif isinstance(obj, WikiPage):
        return user_has_perm(user, "view_wiki_pages", obj, cache="project")
    return False
    def list(self, request, **kwargs):
        text = request.QUERY_PARAMS.get("text", "")
        project_id = request.QUERY_PARAMS.get("project", None)

        project = self._get_project(project_id)

        result = {}
        with futures.ThreadPoolExecutor(max_workers=4) as executor:
            futures_list = []
            if user_has_perm(request.user, "view_epics", project):
                epics_future = executor.submit(self._search_epics, project,
                                               text)
                epics_future.result_key = "epics"
                futures_list.append(epics_future)
            if user_has_perm(request.user, "view_us", project):
                uss_future = executor.submit(self._search_user_stories,
                                             project, text)
                uss_future.result_key = "userstories"
                futures_list.append(uss_future)
            if user_has_perm(request.user, "view_tasks", project):
                tasks_future = executor.submit(self._search_tasks, project,
                                               text)
                tasks_future.result_key = "tasks"
                futures_list.append(tasks_future)
            if user_has_perm(request.user, "view_issues", project):
                issues_future = executor.submit(self._search_issues, project,
                                                text)
                issues_future.result_key = "issues"
                futures_list.append(issues_future)
            if user_has_perm(request.user, "view_wiki_pages", project):
                wiki_pages_future = executor.submit(self._search_wiki_pages,
                                                    project, text)
                wiki_pages_future.result_key = "wikipages"
                futures_list.append(wiki_pages_future)

            for future in futures.as_completed(futures_list):
                data = []
                try:
                    data = future.result()
                except Exception as exc:
                    print("%s generated an exception: %s" %
                          (future.result_key, exc))
                finally:
                    result[future.result_key] = data

        result["count"] = sum(map(lambda x: len(x), result.values()))
        return response.Ok(result)
Exemple #7
0
    def list(self, request, **kwargs):
        validator = ResolverValidator(data=request.QUERY_PARAMS)
        if not validator.is_valid():
            raise exc.BadRequest(validator.errors)

        data = validator.data

        project_model = apps.get_model("projects", "Project")
        project = get_object_or_404(project_model, slug=data["project"])

        self.check_permissions(request, "list", project)

        result = {"project": project.pk}

        if data["us"] and user_has_perm(request.user, "view_us", project):
            result["us"] = get_object_or_404(project.user_stories.all(),
                                             ref=data["us"]).pk
        if data["task"] and user_has_perm(request.user, "view_tasks", project):
            result["task"] = get_object_or_404(project.tasks.all(),
                                               ref=data["task"]).pk
        if data["issue"] and user_has_perm(request.user, "view_issues",
                                           project):
            result["issue"] = get_object_or_404(project.issues.all(),
                                                ref=data["issue"]).pk
        if data["milestone"] and user_has_perm(request.user, "view_milestones",
                                               project):
            result["milestone"] = get_object_or_404(project.milestones.all(),
                                                    slug=data["milestone"]).pk
        if data["wikipage"] and user_has_perm(request.user, "view_wiki_pages",
                                              project):
            result["wikipage"] = get_object_or_404(project.wiki_pages.all(),
                                                   slug=data["wikipage"]).pk

        if data["ref"]:
            ref_found = False  # No need to continue once one ref is found
            if user_has_perm(request.user, "view_us", project):
                us = project.user_stories.filter(ref=data["ref"]).first()
                if us:
                    result["us"] = us.pk
                    ref_found = True
            if ref_found is False and user_has_perm(request.user, "view_tasks",
                                                    project):
                task = project.tasks.filter(ref=data["ref"]).first()
                if task:
                    result["task"] = task.pk
                    ref_found = True
            if ref_found is False and user_has_perm(request.user,
                                                    "view_issues", project):
                issue = project.issues.filter(ref=data["ref"]).first()
                if issue:
                    result["issue"] = issue.pk

        return response.Ok(result)
Exemple #8
0
    def list(self, request, **kwargs):
        text = request.QUERY_PARAMS.get('text', "")
        project_id = request.QUERY_PARAMS.get('project', None)

        project = self._get_project(project_id)

        result = {}
        with futures.ThreadPoolExecutor(max_workers=4) as executor:
            futures_list = []
            if user_has_perm(request.user, "view_epics", project):
                epics_future = executor.submit(self._search_epics, project, text)
                epics_future.result_key = "epics"
                futures_list.append(epics_future)
            if user_has_perm(request.user, "view_us", project):
                uss_future = executor.submit(self._search_user_stories, project, text)
                uss_future.result_key = "userstories"
                futures_list.append(uss_future)
            if user_has_perm(request.user, "view_tasks", project):
                tasks_future = executor.submit(self._search_tasks, project, text)
                tasks_future.result_key = "tasks"
                futures_list.append(tasks_future)
            if user_has_perm(request.user, "view_issues", project):
                issues_future = executor.submit(self._search_issues, project, text)
                issues_future.result_key = "issues"
                futures_list.append(issues_future)
            if user_has_perm(request.user, "view_wiki_pages", project):
                wiki_pages_future = executor.submit(self._search_wiki_pages, project, text)
                wiki_pages_future.result_key = "wikipages"
                futures_list.append(wiki_pages_future)

            for future in futures.as_completed(futures_list):
                data = []
                try:
                    data = future.result()
                except Exception as exc:
                    print('%s generated an exception: %s' % (future.result_key, exc))
                finally:
                    result[future.result_key] = data

        result["count"] = sum(map(lambda x: len(x), result.values()))
        return response.Ok(result)
Exemple #9
0
def get_allowed_sections(obj):
    sections = [Section.timeline]
    active_modules = {'epics': 'view_epics', 'backlog': 'view_us',
                      'kanban': 'view_us', 'wiki': 'view_wiki_pages',
                      'issues': 'view_issues'}

    for key in active_modules:
        module_name = "is_{}_activated".format(key)
        if getattr(obj.project, module_name) and \
                user_has_perm(obj.user, active_modules[key], obj.project):
            sections.append(getattr(Section, key))

    return sections
def get_allowed_sections(obj):
    sections = [Section.timeline]
    active_modules = {
        "epics": "view_epics",
        "backlog": "view_us",
        "kanban": "view_us",
        "wiki": "view_wiki_pages",
        "issues": "view_issues",
    }

    for key in active_modules:
        module_name = "is_{}_activated".format(key)
        if getattr(obj.project, module_name) and user_has_perm(
            obj.user, active_modules[key], obj.project
        ):
            sections.append(getattr(Section, key))

    return sections
Exemple #11
0
 def check_permissions(self, request, view, obj=None):
     return user_has_perm(request.user, self.project_perm, obj)
Exemple #12
0
 def check_permissions(self, request, view, obj=None):
     return user_has_perm(request.user, self.project_perm, obj)
Exemple #13
0
def test_authenticated_user_has_perm_on_invalid_object():
    user1 = factories.UserFactory()
    assert services.user_has_perm(user1, "test", user1) is False
Exemple #14
0
def test_anon_user_has_perm():
    project = factories.ProjectFactory()
    project.anon_permissions = ["test"]
    assert services.user_has_perm(AnonymousUser(), "test", project) is True
    assert services.user_has_perm(AnonymousUser(), "fail", project) is False
Exemple #15
0
def test_authenticated_user_has_perm_on_invalid_object():
    user1 = factories.UserFactory()
    assert services.user_has_perm(user1, "test", user1) is False
Exemple #16
0
def test_anon_user_has_perm():
    project = factories.ProjectFactory()
    project.anon_permissions = ["test"]
    assert services.user_has_perm(AnonymousUser(), "test", project) is True
    assert services.user_has_perm(AnonymousUser(), "fail", project) is False