feat: first service implementation

This commit is contained in:
HugoPBrito committed 2024-11-19 13:18:30 +01:00
1 parent 5ce7aa33ad
commit d27c5b7190
7 files changed
+51 -47

No files matched your search

-11
View File
@@ -1,11 +0,0 @@
from os import getenv
from github import Auth, Github
TOKEN = getenv("GITHUB_PERSONAL_ACCESS_TOKEN")
auth = Auth.Token(TOKEN)
g = Github(auth=auth)
for repo in g.get_user().get_repos():
print(repo)
@@ -10,7 +10,7 @@ class GithubService:
service: str,
provider: GithubProvider,
):
self.clients = self.__set_clients__(
self.client = self.__set_client__(
provider.identity,
provider.session,
service,
@@ -19,8 +19,7 @@ class GithubService:
self.audit_config = provider.audit_config
self.fixer_config = provider.fixer_config
def __set_clients__(self, session):
client = {}
def __set_client__(self, session):
try:
auth = Auth.Token(session.token)
client = Github(auth=auth)
@@ -28,5 +27,4 @@ class GithubService:
logger.error(
f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
else:
return client
return client
@@ -1,31 +0,0 @@
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.github.github_provider import GithubProvider
from prowler.providers.github.lib.service.service import GithubService
class GitHubAccount(GithubService):
def __init__(self, provider: GithubProvider):
super().__init__("GitHubAccount", provider)
self.account = Account(
name=provider.identity.account_name, id=provider.identity.account_id
)
self._get_ssh_keys_status()
def _get_ssh_keys_status(self):
try:
user = self.client.get_user()
keys = self.client.get_user_keys(user.login)
self.account.ssh_keys = keys.totalCount > 0
except Exception as error:
logger.error(
f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
class Account(BaseModel):
name: str
id: str
ssh_keys: bool = False
@@ -0,0 +1,4 @@
from prowler.providers.common.provider import Provider
from prowler.providers.github.services.repository.repository_client import Repository
repository_client = Repository(Provider.get_global_provider())
@@ -0,0 +1,44 @@
from typing import Optional
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.github.lib.service.service import GithubService
class Repository(GithubService):
def __init__(self, provider):
super().__init__(__class__.__name__, provider)
self.repositories = {}
self.__threading_call__(self._list_repositories)
def _list_repositories(self):
logger.info("Repository - Listing Repositories...")
try:
for repo in self.client.get_user().get_repos():
self.repositories[repo.id] = Repo(
id=repo.id,
name=repo.name,
full_name=repo.full_name,
private=repo.private,
description=repo.description,
securitymd=repo.get_contents("SECURITY.md") is not None,
)
except Exception as error:
logger.error(
f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
def get_repositories(self):
return self.repositories
class Repo(BaseModel):
"""Model for Github Repository"""
id: int
name: str
full_name: str
private: bool
description: Optional[str]
securitymd: Optional[bool] = False