81 lines
3.3 KiB
Python
81 lines
3.3 KiB
Python
from typing import Optional, Union
|
|
|
|
from werkzeug.datastructures import FileStorage
|
|
|
|
from app.extensions import db
|
|
from app.models.base import Group
|
|
from app.models.cloud import CloudAccount
|
|
from app.models.mirrors import StaticOrigin
|
|
|
|
|
|
def create_static_origin(
|
|
description: str,
|
|
group_id: int,
|
|
storage_cloud_account_id: int,
|
|
source_cloud_account_id: int,
|
|
source_project: str,
|
|
auto_rotate: bool,
|
|
matrix_homeserver: Optional[str],
|
|
keanu_convene_path: Optional[str],
|
|
keanu_convene_logo: Optional[FileStorage],
|
|
keanu_convene_color: Optional[str],
|
|
clean_insights_backend: Optional[Union[str, bool]],
|
|
db_session_commit: bool = False,
|
|
) -> StaticOrigin:
|
|
"""
|
|
Create a new static origin.
|
|
|
|
:param description: The description of the new static origin.
|
|
:param group_id: The ID for the origin group to add this new static origin to.
|
|
:param storage_cloud_account_id: The ID for the cloud account to deploy this new static origin to.
|
|
:param source_cloud_account_id: The ID for the cloud account used to interact with the web sources.
|
|
:param source_project: The path for the source project, e.g. the GitLab project path.
|
|
:param auto_rotate: Whether to automatically rotate this domain when it is detected to be blocked.
|
|
:param matrix_homeserver: The domain name for the Matrix homeserver to proxy to.
|
|
:param keanu_convene_path: The path to serve the Keanu Convene application from.
|
|
:param clean_insights_backend: The domain name for the Clean Insights backend to proxy to.
|
|
:param db_session_commit: Whether to add the new StaticOrigin to the database session and commit it.
|
|
:returns: StaticOrigin -- the newly created StaticOrigin
|
|
:raises: ValueError, sqlalchemy.exc.SQLAlchemyError
|
|
"""
|
|
static_origin = StaticOrigin()
|
|
if isinstance(group_id, int):
|
|
group = Group.query.filter(Group.id == group_id).first()
|
|
if group is None:
|
|
raise ValueError("group_id must match an existing group")
|
|
static_origin.group_id = group_id
|
|
else:
|
|
raise ValueError("group_id must be an int")
|
|
if isinstance(storage_cloud_account_id, int):
|
|
cloud_account = CloudAccount.query.filter(
|
|
CloudAccount.id == storage_cloud_account_id
|
|
).first()
|
|
if cloud_account is None:
|
|
raise ValueError("storage_cloud_account_id must match an existing provider")
|
|
static_origin.storage_cloud_account_id = storage_cloud_account_id
|
|
else:
|
|
raise ValueError("storage_cloud_account_id must be an int")
|
|
if isinstance(source_cloud_account_id, int):
|
|
cloud_account = CloudAccount.query.filter(
|
|
CloudAccount.id == source_cloud_account_id
|
|
).first()
|
|
if cloud_account is None:
|
|
raise ValueError("source_cloud_account_id must match an existing provider")
|
|
static_origin.source_cloud_account_id = source_cloud_account_id
|
|
else:
|
|
raise ValueError("source_cloud_account_id must be an int")
|
|
static_origin.update(
|
|
source_project,
|
|
description,
|
|
auto_rotate,
|
|
matrix_homeserver,
|
|
keanu_convene_path,
|
|
keanu_convene_logo,
|
|
keanu_convene_color,
|
|
clean_insights_backend,
|
|
False,
|
|
)
|
|
if db_session_commit:
|
|
db.session.add(static_origin)
|
|
db.session.commit()
|
|
return static_origin
|