mirror of
https://github.com/bunny-lab-io/Borealis.git
synced 2025-10-26 22:01:59 -06:00
Add GitHub integration service and endpoints
This commit is contained in:
@@ -11,6 +11,7 @@ from .connection import (
|
||||
)
|
||||
from .device_repository import SQLiteDeviceRepository
|
||||
from .enrollment_repository import SQLiteEnrollmentRepository
|
||||
from .github_repository import SQLiteGitHubRepository
|
||||
from .job_repository import SQLiteJobRepository
|
||||
from .migrations import apply_all
|
||||
from .token_repository import SQLiteRefreshTokenRepository
|
||||
@@ -25,5 +26,6 @@ __all__ = [
|
||||
"SQLiteRefreshTokenRepository",
|
||||
"SQLiteJobRepository",
|
||||
"SQLiteEnrollmentRepository",
|
||||
"SQLiteGitHubRepository",
|
||||
"apply_all",
|
||||
]
|
||||
|
||||
53
Data/Engine/repositories/sqlite/github_repository.py
Normal file
53
Data/Engine/repositories/sqlite/github_repository.py
Normal file
@@ -0,0 +1,53 @@
|
||||
"""SQLite-backed GitHub token persistence."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from contextlib import closing
|
||||
from typing import Optional
|
||||
|
||||
from .connection import SQLiteConnectionFactory
|
||||
|
||||
__all__ = ["SQLiteGitHubRepository"]
|
||||
|
||||
|
||||
class SQLiteGitHubRepository:
|
||||
"""Store and retrieve GitHub API tokens for the Engine."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
connection_factory: SQLiteConnectionFactory,
|
||||
*,
|
||||
logger: Optional[logging.Logger] = None,
|
||||
) -> None:
|
||||
self._connections = connection_factory
|
||||
self._log = logger or logging.getLogger("borealis.engine.repositories.github")
|
||||
|
||||
def load_token(self) -> Optional[str]:
|
||||
"""Return the stored GitHub token if one exists."""
|
||||
|
||||
with closing(self._connections()) as conn:
|
||||
cur = conn.cursor()
|
||||
cur.execute("SELECT token FROM github_token LIMIT 1")
|
||||
row = cur.fetchone()
|
||||
|
||||
if not row:
|
||||
return None
|
||||
|
||||
token = (row[0] or "").strip()
|
||||
return token or None
|
||||
|
||||
def store_token(self, token: Optional[str]) -> None:
|
||||
"""Persist *token*, replacing any prior value."""
|
||||
|
||||
normalized = (token or "").strip()
|
||||
|
||||
with closing(self._connections()) as conn:
|
||||
cur = conn.cursor()
|
||||
cur.execute("DELETE FROM github_token")
|
||||
if normalized:
|
||||
cur.execute("INSERT INTO github_token (token) VALUES (?)", (normalized,))
|
||||
conn.commit()
|
||||
|
||||
self._log.info("stored-token has_token=%s", bool(normalized))
|
||||
|
||||
@@ -27,6 +27,7 @@ def apply_all(conn: sqlite3.Connection) -> None:
|
||||
_ensure_refresh_token_table(conn)
|
||||
_ensure_install_code_table(conn)
|
||||
_ensure_device_approval_table(conn)
|
||||
_ensure_github_token_table(conn)
|
||||
_ensure_scheduled_jobs_table(conn)
|
||||
_ensure_scheduled_job_run_tables(conn)
|
||||
|
||||
@@ -226,6 +227,17 @@ def _ensure_device_approval_table(conn: sqlite3.Connection) -> None:
|
||||
)
|
||||
|
||||
|
||||
def _ensure_github_token_table(conn: sqlite3.Connection) -> None:
|
||||
cur = conn.cursor()
|
||||
cur.execute(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS github_token (
|
||||
token TEXT
|
||||
)
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
def _ensure_scheduled_jobs_table(conn: sqlite3.Connection) -> None:
|
||||
cur = conn.cursor()
|
||||
cur.execute(
|
||||
|
||||
Reference in New Issue
Block a user