예제 #1
0
    def create_confidential_issue_with_token(self):
        project_data = request.json["project"]

        http_url = project_data["git_http_url"]
        parsed_url = parse_git_repo(potential_url=http_url)

        project_authentication_issue = ProjectAuthenticationIssueModel.get_project(
            namespace=parsed_url.namespace,
            repo_name=parsed_url.repo,
            project_url=http_url,
        )

        if not project_authentication_issue:
            token = jwt.encode(
                {
                    "namespace": parsed_url.namespace,
                    "repo_name": parsed_url.repo
                },
                config.gitlab_token_secret,
                algorithm="HS256",
            ).decode("utf-8")

            project = config.get_project(url=http_url)
            packit_user = project.service.user.get_username()

            project.create_issue(
                title="Packit-Service Authentication",
                body=
                f"To configure Packit-Service with `{parsed_url.repo}` you need to\n"
                f"configure the webhook settings. Head to {project.get_web_url()}/hooks and add\n"
                "the following Secret Token to authenticate requests coming to Packit:\n"
                "```\n"
                f"{token}\n"
                "```\n"
                "\n"
                "Packit also needs rights to set commit status to merge requests. Please, grant\n"
                f"[{packit_user}](https://gitlab.com/{packit_user}) user `Developer` permissions\n"
                f"on the {parsed_url.namespace}/{parsed_url.repo} project. "
                "You can add the rights by clicking\n"
                f"[here]({project.get_web_url()}/-/project_members).",
                private=True,
            )

            logger.info("Confidential issue created successfully.")

            ProjectAuthenticationIssueModel.create(
                namespace=parsed_url.namespace,
                repo_name=parsed_url.repo,
                project_url=http_url,
                issue_created=True,
            )
예제 #2
0
def test_project_token_model(clean_before_and_after):
    namespace = "the-namespace"
    repo = "repo-name"
    http_url = "https://gitlab.com/the-namespace/repo-name"

    actual = ProjectAuthenticationIssueModel.create(
        namespace=namespace,
        repo_name=repo,
        project_url=http_url,
        issue_created=True,
    )
    expected = ProjectAuthenticationIssueModel.get_project(
        namespace=namespace,
        repo_name=repo,
        project_url=http_url,
    )
    assert actual.issue_created == expected.issue_created
예제 #3
0
    def create_confidential_issue_with_token(self):
        project_data = request.json["project"]

        namespace, repo_name = project_data["path_with_namespace"].split("/")
        http_url = project_data["git_http_url"]

        project_authentication_issue = ProjectAuthenticationIssueModel.get_project(
            namespace=namespace, repo_name=repo_name, project_url=http_url)

        if not project_authentication_issue:
            token = jwt.encode(
                {
                    "namespace": namespace,
                    "repo_name": repo_name
                },
                config.gitlab_token_secret,
                algorithm="HS256",
            ).decode("utf-8")

            project = config.get_project(url=http_url)
            packit_user = project.service.user.get_username()

            project.create_issue(
                title="Packit-Service Authentication",
                body=
                f"To configure Packit-Service with `{repo_name}` you need to\n"
                f"configure the webhook settings. Head to {project.get_web_url()}/hooks and add\n"
                f"the Secret Token `{token}` to authenticate requests coming to Packit.\n\n"
                f"Packit needs rights to set commit status to merge requests, Please grant\n"
                f"[{packit_user}](https://gitlab.com/{packit_user}) `admin` permissions\n"
                f"on the {namespace}/{repo_name} project. You can add the rights by clicking\n"
                f"[here]({project.get_web_url()}/-/project_members).",
                private=True,
            )

            logger.info("Confidential issue created successfully.")

            ProjectAuthenticationIssueModel.create(
                namespace=namespace,
                repo_name=repo_name,
                project_url=http_url,
                issue_created=True,
            )