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, )
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
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, )