PacketFlow.Capability.Plugin (packetflow v0.1.0)
Plugin system for capability extensions in PacketFlow.
This module provides a framework for creating custom capability types, custom validation logic, custom composition patterns, custom delegation logic, and custom revocation patterns.
Summary
Functions
Adds custom composition logic to a capability plugin.
Adds custom delegation logic to a capability plugin.
Adds custom revocation logic to a capability plugin.
Adds custom validation logic to a capability plugin.
Checks if a capability plugin is compatible with the current system.
Checks the health of a capability plugin.
Creates a custom capability type with the given name and operations.
Discovers capability plugins in the given directory.
Executes custom composition logic for capabilities.
Executes custom delegation logic for a capability.
Executes custom revocation logic for a capability.
Executes custom validation logic for a capability.
Gets the configuration for a capability plugin.
Gets statistics for a capability plugin.
Gets the version of a capability plugin.
Initializes a capability plugin with the given configuration.
Lists all registered capability plugins.
Loads a capability plugin from a file.
Registers a capability plugin with the system.
Shuts down a capability plugin.
Unregisters a capability plugin from the system.
Updates the configuration for a capability plugin.
Validates a custom capability using registered plugins.
Types
@type capability() :: any()
@type capability_plugin() :: module()
@type capability_set() :: MapSet.t(capability())
@type plugin_config() :: map()
Functions
@spec add_custom_composition( capability_plugin(), ([capability()] -> capability_set()) ) :: :ok
Adds custom composition logic to a capability plugin.
Examples
iex> add_custom_composition(MyPlugin, fn capabilities -> compose_my_way(capabilities) end)
:ok
@spec add_custom_delegation( capability_plugin(), (capability(), any(), any() -> any()) ) :: :ok
Adds custom delegation logic to a capability plugin.
Examples
iex> add_custom_delegation(MyPlugin, fn capability, from, to -> delegate_my_way(capability, from, to) end)
:ok
@spec add_custom_revocation(capability_plugin(), (capability(), any() -> any())) :: :ok
Adds custom revocation logic to a capability plugin.
Examples
iex> add_custom_revocation(MyPlugin, fn capability, entity -> revoke_my_way(capability, entity) end)
:ok
@spec add_custom_validation(capability_plugin(), (capability() -> boolean())) :: :ok
Adds custom validation logic to a capability plugin.
Examples
iex> add_custom_validation(MyPlugin, fn capability -> validate_my_logic(capability) end)
:ok
@spec check_plugin_compatibility(capability_plugin()) :: boolean()
Checks if a capability plugin is compatible with the current system.
Examples
iex> check_plugin_compatibility(MyPlugin)
true
@spec check_plugin_health(capability_plugin()) :: :healthy | :unhealthy | :unknown
Checks the health of a capability plugin.
Examples
iex> check_plugin_health(MyPlugin)
:healthy
Creates a custom capability type with the given name and operations.
Examples
iex> create_custom_capability_type(:FileSystemCap, [:read, :write, :delete])
:ok
@spec discover_plugins(String.t()) :: [capability_plugin()]
Discovers capability plugins in the given directory.
Examples
iex> discover_plugins("lib/packetflow/capability/plugins")
[MyPlugin, AnotherPlugin]
@spec execute_custom_composition([capability()], capability_plugin()) :: capability_set()
Executes custom composition logic for capabilities.
Examples
iex> execute_custom_composition([{:read, "/file"}, {:write, "/file"}], MyPlugin)
#MapSet<[{:read, "/file"}, {:write, "/file"}]>
@spec execute_custom_delegation(capability(), any(), any(), capability_plugin()) :: any()
Executes custom delegation logic for a capability.
Examples
iex> execute_custom_delegation({:read, "/file"}, "user1", "user2", MyPlugin)
{:delegated, {:read, "/file"}, "user1", "user2"}
@spec execute_custom_revocation(capability(), any(), capability_plugin()) :: any()
Executes custom revocation logic for a capability.
Examples
iex> execute_custom_revocation({:read, "/file"}, "user1", MyPlugin)
{:revoked, {:read, "/file"}, "user1"}
@spec execute_custom_validation(capability(), capability_plugin()) :: boolean()
Executes custom validation logic for a capability.
Examples
iex> execute_custom_validation({:custom_read, "/file"}, MyPlugin)
true
@spec get_plugin_config(capability_plugin()) :: plugin_config() | nil
Gets the configuration for a capability plugin.
Examples
iex> get_plugin_config(MyPlugin)
%{enabled: true, config: %{}}
@spec get_plugin_stats(capability_plugin()) :: map() | nil
Gets statistics for a capability plugin.
Examples
iex> get_plugin_stats(MyPlugin)
%{validations: 100, delegations: 50, revocations: 10}
@spec get_plugin_version(capability_plugin()) :: String.t() | nil
Gets the version of a capability plugin.
Examples
iex> get_plugin_version(MyPlugin)
"1.0.0"
@spec initialize_plugin(capability_plugin(), plugin_config()) :: :ok | {:error, term()}
Initializes a capability plugin with the given configuration.
Examples
iex> initialize_plugin(MyPlugin, %{enabled: true, config: %{}})
:ok
@spec list_plugins() :: [capability_plugin()]
Lists all registered capability plugins.
Examples
iex> list_plugins()
[MyCustomCapabilityPlugin, AnotherCapabilityPlugin]
@spec load_plugin(String.t()) :: {:ok, capability_plugin()} | {:error, term()}
Loads a capability plugin from a file.
Examples
iex> load_plugin("lib/packetflow/capability/plugins/my_plugin.ex")
{:ok, MyPlugin}
@spec register_plugin(capability_plugin(), plugin_config()) :: :ok | {:error, term()}
Registers a capability plugin with the system.
Examples
iex> register_plugin(MyCustomCapabilityPlugin, %{enabled: true})
:ok
@spec shutdown_plugin(capability_plugin()) :: :ok | {:error, term()}
Shuts down a capability plugin.
Examples
iex> shutdown_plugin(MyPlugin)
:ok
@spec unregister_plugin(capability_plugin()) :: :ok | {:error, term()}
Unregisters a capability plugin from the system.
Examples
iex> unregister_plugin(MyCustomCapabilityPlugin)
:ok
@spec update_plugin_config(capability_plugin(), plugin_config()) :: :ok
Updates the configuration for a capability plugin.
Examples
iex> update_plugin_config(MyPlugin, %{enabled: false})
:ok
@spec validate_custom_capability(capability(), [capability_plugin()]) :: boolean()
Validates a custom capability using registered plugins.
Examples
iex> validate_custom_capability({:custom_read, "/file"}, [MyCustomPlugin])
true