git.schokokeks.org
Repositories
Help
Report an Issue
derivepassphrase.git
Code
Commits
Branches
Tags
Suche
Strukturansicht:
0917c48
Branches
Tags
documentation-tree
master
unstable/cli-parser-state-machine
wishlist
0.1.0
0.1.1
0.1.2
0.1.3
0.2.0
0.3.0
0.3.1
0.3.2
0.3.3
0.4.0
0.5
0.5.1
0.5.2
0.6
0.6.1
ssh-agent-socket-provider-1.0
derivepassphrase.git
sshagentsocketprovider
tests
fixtures
example-provider
src
derivepassphrase_sshagentsocketprovider_example
stdin_stdout.py
Build a full example SSH agent socket provider, and integration test it
Marco Ricci
commited
0917c48
at 2026-08-30 18:14:44
stdin_stdout.py
Blame
History
Raw
# SPDX-FileCopyrightText: 2026 Marco Ricci <software@the13thletter.info> # # SPDX-License-Identifier: Unlicense """The `stdin_stdout` example SSH agent provider. The provider exposes a virtual socket such that reading from the virtual socket reads from `sys.stdin`, and writing to the virtual socket writes to `sys.stdout`. """ from __future__ import annotations import sys from typing import TYPE_CHECKING import derivepassphrase_sshagentsocketprovider as d_sasp if TYPE_CHECKING: from typing_extensions import Buffer, Self # Simple example, forwarding access to certain file-like objects. class SSHAgentOverStdinStdoutSocket: """Forwarding STDIN/STDOUT, as if connected to an SSH agent.""" FLAGS_ARE_UNSUPPORTED = "flags argument is unsupported" """Common error message.""" def __enter__(self) -> Self: """Return self.""" return self def __exit__(self, *args: object) -> bool | None: """Close stdin/stdout.""" sys.stdin.close() sys.stdout.close() return None def send(self, data: Buffer, flags: int = 0, /) -> None: """Send data to agent.""" if flags: raise ValueError(self.FLAGS_ARE_UNSUPPORTED) sys.stdout.buffer.write(data) def recv(self, bufsize: int, flags: int = 0, /) -> bytes: """Receive data from agent.""" if flags: raise ValueError(self.FLAGS_ARE_UNSUPPORTED) return sys.stdin.buffer.read(bufsize) SSH_AGENT_OVER_STDIN_STDOUT_PROVIDER = SSHAgentOverStdinStdoutSocket assert isinstance( SSH_AGENT_OVER_STDIN_STDOUT_PROVIDER, d_sasp.SSHAgentSocketProvider ) ENTRY_POINT = d_sasp.SSHAgentSocketProviderEntry( provider=SSH_AGENT_OVER_STDIN_STDOUT_PROVIDER, key="stdin_stdout", aliases=("stdin", "stdout"), )