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

capability()

@type capability() :: any()

capability_plugin()

@type capability_plugin() :: module()

capability_set()

@type capability_set() :: MapSet.t(capability())

plugin_config()

@type plugin_config() :: map()

Functions

add_custom_composition(plugin_module, composition_function)

@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

add_custom_delegation(plugin_module, delegation_function)

@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

add_custom_revocation(plugin_module, revocation_function)

@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

add_custom_validation(plugin_module, validation_function)

@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

check_plugin_compatibility(plugin_module)

@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

check_plugin_health(plugin_module)

@spec check_plugin_health(capability_plugin()) :: :healthy | :unhealthy | :unknown

Checks the health of a capability plugin.

Examples

iex> check_plugin_health(MyPlugin)
:healthy

create_custom_capability_type(name, operations)

@spec create_custom_capability_type(atom(), [atom()]) :: :ok

Creates a custom capability type with the given name and operations.

Examples

iex> create_custom_capability_type(:FileSystemCap, [:read, :write, :delete])
:ok

discover_plugins(directory)

@spec discover_plugins(String.t()) :: [capability_plugin()]

Discovers capability plugins in the given directory.

Examples

iex> discover_plugins("lib/packetflow/capability/plugins")
[MyPlugin, AnotherPlugin]

execute_custom_composition(capabilities, plugin_module)

@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"}]>

execute_custom_delegation(capability, from_entity, to_entity, plugin_module)

@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"}

execute_custom_revocation(capability, entity, plugin_module)

@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"}

execute_custom_validation(capability, plugin_module)

@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

get_plugin_config(plugin_module)

@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: %{}}

get_plugin_stats(plugin_module)

@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}

get_plugin_version(plugin_module)

@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"

initialize_plugin(plugin_module, config)

@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

list_plugins()

@spec list_plugins() :: [capability_plugin()]

Lists all registered capability plugins.

Examples

iex> list_plugins()
[MyCustomCapabilityPlugin, AnotherCapabilityPlugin]

load_plugin(file_path)

@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}

register_plugin(plugin_module, config \\ %{})

@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

shutdown_plugin(plugin_module)

@spec shutdown_plugin(capability_plugin()) :: :ok | {:error, term()}

Shuts down a capability plugin.

Examples

iex> shutdown_plugin(MyPlugin)
:ok

unregister_plugin(plugin_module)

@spec unregister_plugin(capability_plugin()) :: :ok | {:error, term()}

Unregisters a capability plugin from the system.

Examples

iex> unregister_plugin(MyCustomCapabilityPlugin)
:ok

update_plugin_config(plugin_module, new_config)

@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

validate_custom_capability(capability, plugins)

@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