定制 asahasrabuddhe/dwaar 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

asahasrabuddhe/dwaar

Composer 安装命令:

composer require asahasrabuddhe/dwaar

包简介

SSH app server on Whisp with pluggable middleware, multiple apps, and session handling

README 文档

README

SSH app server on Whisp with pluggable middleware, multiple apps, and session handling.

Features

  • Session abstraction – Wish-style Session over Whisp Connection + Channel: user(), remoteAddr(), command(), pty(), writeToStdout / writeToStderr, exit().
  • Middleware pipeline – Compose middlewares (first registered = outermost). Innermost handler starts the app.
  • Built-in middlewares
    • Recover – Catch throwables in the chain or app, log and exit 1.
    • Logging – Log connect (user, remote, command, term, client version, public key) and disconnect with duration.
    • AccessControl – Restrict allowed exec commands; reject others with exit 1.
    • Activeterm – Require a PTY (interactive terminal); reject non-PTY with exit 1.
  • SessionOutput – Helpers for session I/O: print() / println(), error() / errorln(), fatal() / fatalln(), printf() / errorf() / fatalf().

Requirements

  • PHP 8.4+
  • ext-sockets, ext-pcntl
  • See Whisp for additional runtime requirements.

Installation

composer require asahasrabuddhe/dwaar

Usage

Use Dwaar\Server instead of Whisp\Server, register middlewares and apps. Each connection runs the middleware stack before starting the app.

<?php

require __DIR__ . '/vendor/autoload.php';

use Dwaar\Server;
use Dwaar\Middleware\AccessControl;
use Dwaar\Middleware\Logging;
use Dwaar\Middleware\Recover;
use Psr\Log\NullLogger;

$logger = new NullLogger(); // or any PSR-3 logger

$server = new Server(port: 2222, autoDiscoverApps: false);

$server
    ->middlewares([
        new Recover($logger),
        new Logging($logger),
        new AccessControl(['default', 'guestbook']),
    ])
    ->addApps([
        'default' => __DIR__ . '/apps/howdy.php',
        'guestbook' => __DIR__ . '/apps/guestbook.php',
    ])
    ->run();

Connect:

# Interactive shell (default app)
ssh -p 2222 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@127.0.0.1

# Exec command
ssh -p 2222 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@127.0.0.1 guestbook

Middleware order

Same as Wish: first registered = outermost (runs first on connect, last on disconnect). Typical order: Recover → Logging → AccessControl or Activeterm → app (innermost).

Examples

Run the example server and try the default app and the guestbook exec command:

php examples/server.php

See examples/README.md for what each part demonstrates.

TUIs

For terminal UIs over SSH, use Laravel Prompts or similar in your app scripts; Dwaar does not port Bubble Tea.

Development

composer test        # run tests
composer cs-fix      # fix code style
composer cs-check    # check code style (dry run)

License

MIT.

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 8
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-03-04