blob: b711d42d9f47587bca0e144930178d1869e438ad [file] [log] [blame]
from __future__ import annotations
import plugins.basetypes
import plugins.ldap
import plugins.github
import plugins.repositories
import os
import typing
class ServerConfig:
def __init__(self, subyaml: dict):
self.ip: str = subyaml.get("bind", "0.0.0.0")
self.port: int = int(subyaml.get("port", 8080))
self.traceback: bool = bool(subyaml.get('traceback', False))
class TaskConfig:
def __init__(self, subyaml: dict):
self.refresh_rate: int = int(subyaml.get("refresh_rate", 150))
assert self.refresh_rate >= 60, "Refresh rate must be at least 60 seconds!"
class OAuthConfig:
def __init__(self, subyaml: dict):
self.authoritative_domains: typing.List[str] = subyaml.get("authoritative_domains", [])
self.admins: typing.List[str] = subyaml.get("admins", "").split(' ')
self.github_client_id: str = subyaml.get("github_client_id", "")
self.github_client_secret: str = subyaml.get("github_client_secret", "")
assert isinstance(self.github_client_id, str), "GitHub client ID must be a string"
assert isinstance(self.github_client_secret, str), "GitHub client secret must be a string"
class DBConfig:
def __init__(self, subyaml: dict):
self.dbtype: str = subyaml.get("dbtype", "sqlite")
self.dbfile: str = subyaml.get("dbfile", "boxer.db")
assert self.dbtype == 'sqlite', "DB type must be SQLite for now, I dunno other types"
assert isinstance(self.dbfile, str) and os.path.exists(self.dbfile), "DB File must exist on disk!"
class GitHubConfig:
def __init__(self, subyaml: dict):
self.token: str = subyaml.get("token", "")
self.org: str = subyaml.get("org", "asftest")
assert isinstance(self.token, str) and len(self.token) == 40, "GitHub token must be a valid token!"
class Configuration:
def __init__(self, yml: dict):
self.server: ServerConfig = ServerConfig(yml.get("server", {}))
self.database: DBConfig = DBConfig(yml.get("database", {}))
self.tasks: TaskConfig = TaskConfig(yml.get("tasks", {}))
self.oauth: OAuthConfig = OAuthConfig(yml.get("oauth", {}))
self.repos: plugins.repositories.RepoConfig = plugins.repositories.RepoConfig(yml.get("repositories", {}))
self.ldap: plugins.ldap.LDAPConfig = plugins.ldap.LDAPConfig(yml.get("ldap", {}))
self.github: GitHubConfig = GitHubConfig(yml.get("github", {}))
class InterData:
"""
A mix of various global variables used throughout processes
"""
def __init__(self):
self.repositories: list = []
self.github_repos: list = []
self.sessions: dict = {}
self.people: list = []
self.projects: dict = {}
self.mfa: dict = {}
self.teams: typing.List[plugins.github.GitHubTeam] = []