IBM Offline Signing Orchestrator Framework documentation

IBM Offline Signing Orchestrator Framework

This repository contains code that would enable digital assets custodians to quickly bootstrap a plugin into the OSO stack.

  • oso.framework.auth: RESTful authentication models (supported mtls)

  • oso.framework.config: application configuration

  • oso.framework.core: core code that can be shared between the OSO stack and plugin stack

  • oso.framework.data: data classes that is moved between plugin code and OSO code

  • oso.framework.plugin: plugin bootstrap library

Concept

The idea behind the plugin bootstrap is the ISV provides a ISV application implementation class and plugs that into the venv and configuration:

# Implementation file, say in module "isv.plugin"
>>> from oso.framework.plugin import PluginProtocol
    class ISVImpl(ISVBase):
        pass

# Environment settings for ISV plugin bootstrap
# In the python "module:class" format for string import

$ export PLUGIN__APPLICATION='isv.plugin:ISVImpl'
$ export APP__ENTRY='oso.framework.plugin.create_app'

$ start-component

Sample implementations are defined under oso.framework.plugin.test, as a module and class.

Configuration

Configuration models are defined as oso.framework.config.AutoLoadConfig, subclassed or exported in a module that will be dynamically imported. On import, the subclass will register itself with oso.framework.config.ConfigManager exposing the environment variables it expects; along with the format, and validation of such.

The core configuration set is defined in oso.framework.config.models, which can be registered with an import:

>>> from oso.framework.config.models import AppConfig  # noqa: F401
    # APP__NAME : str
    # APP__DEBUG : bool, default=False
    # APP__ROOT : `pathlib.Path`, default=/app-root

>>> from oso.framework.config.models import CertsConfig  # noqa: F401
    # CERTS__CA : str
    # CERTS__APP_CRT : str
    # CERTS__APP_KEY : str

>>> from oso.framework.config.models import LoggingConfig  # noqa: F401
    # LOGGING__LEVEL : str | int, default=info

Additional configurations are defined in modules:

>>> from oso.framework.entrypoint.component import ComponentConfig  # noqa: F401
    # APP__ENTRY : str

>>> from oso.framework.entrypoint.component import GunicornConfig  # noqa: F401
    # GUNICORN__WORKERS : int
    # GUNICORN__TIMEOUT : int
    # GUNICORN__LOGGER_CLASS : str, default=`.JsonGunicornLogger`

>>> from oso.framework.plugin._extension import PluginConfig  # noqa: F401
    # PLUGIN__MODE : "frontend" | "backend"
    # PLUGIN__APPLICATION : str

>>> from oso.framework.auth.common import AuthConfig  # noqa: F401
    # AUTH__PARSERS__n__TYPE : str
    # AUTH__PARSERS__n__ALLOWLIST: Json

>>> from oso.framework.entrypoint.nginx import NginxConfig  # noqa: F401
    # NGINX__TIMEOUT : `datetime.timedelta`, default=60s

Notes

Addendum

There is consideration of keeping closed source and providing either a compiled wheel, docker image, or both. This way, we can share code between OSO proper and plugin more easily, making it be more consistent.

Contributions

This repository is maintained by the repository owners. Issues can be created and the repository can be forked with PRs created against the forked repository for suggestions which will be reviewed by the repository owners. Updates to this repo will need to conincide with changes required in the IBM Offline Signing Orchestrator.