devture/symfony-web-command-bundle

允许通过网页以安全方式调用控制台命令的Symfony扩展包

安装: 404

依赖: 0

建议者: 0

安全: 0

星级: 6

关注者: 3

分支: 0

开放问题: 0

类型:symfony-bundle

1.0.0 2024-02-16 14:04 UTC

This package is auto-updated.

Last update: 2024-09-16 15:18:24 UTC


README

这是一个允许您以安全方式从网页执行应用程序控制台命令的Symfony扩展包。

在无法直接运行控制台命令(例如cron)但可以从网页访问应用程序的环境中非常有用。它可以让您将cron作业从类似以下内容

* * * * * user php /app/bin/console ticket:purge

转换为

* * * * * user curl -sS -XPOST -H 'Authorization: Bearer SECRET' http://application/web-command/execute/ticket:purge

安装

通过composer安装(composer require devture/symfony-web-command-bundle:dev-master)。

添加到 config/bundles.php

Devture\Bundle\WebCommandBundle\DevtureWebCommandBundle::class => ['all' => true],

配置

config/packages/devture_web_command.yaml 中添加以下路由配置

devture_web_command:
  auth_token: '%env(DEVTURE_WEB_COMMAND_AUTH_TOKEN)%'
  forced_uri: '%env(DEVTURE_WEB_COMMAND_FORCED_URI)%'

环境变量 DEVTURE_WEB_COMMAND_AUTH_TOKEN 应包含您的认证密钥。请使用强密钥(例如,使用 pwgen -Bsv1 64)。

环境变量 DEVTURE_WEB_COMMAND_FORCED_URI 包含指向应用程序的外部URL,以便在本地调用“控制台命令”(例如 curl http://localhost/web-command/...)时仍生成正确的完整URL。示例值:https://example.com。也可以留空(空字符串),以避免强制设置并依赖自动检测。

路由

config/routes/DevtureWebCommandBundle.yaml 中添加以下路由配置

DevtureWebCommandBundleWebsite:
    prefix: /web-command
    resource: "@DevtureWebCommandBundle/Resources/config/routes/website.yaml"

安全

如果您使用Symfony的Security组件来保护URL模式,您可能希望调整防火墙以不阻止 /web-command 请求。

修改: config/packages/security.yaml

security:
  # Other stuff..

  access_control:
    # Other stuff..
    - { path: ^/web-command/, role: IS_AUTHENTICATED_ANONYMOUSLY }
    # Other stuff..
    - { path: ^/, role: ROLE_USER }

用法

通过向 /web-command/execute/:commandName 路由发送 POST 请求来从网页执行命令。

您需要使用提供给扩展包的认证令牌进行认证(通常存储在 DEVTURE_WEB_COMMAND_AUTH_TOKEN 环境变量中)。

基本调用可能如下所示(此例中使用 cURL

curl \
-sS \
-XPOST \
-H 'Authorization: Bearer SECRET' \
http://application/web-command/execute/commandName

您可以向此URL端点发送 POST JSON有效负载来配置它。示例

# outputVerbosity = 256 means "debug". See the `OutputInterface:VERBOSITY_` constants.

curl \
-sS \
-XPOST \
-H 'Authorization: Bearer SECRET' \
--data '{"input": {"days": 10, "--something": 4}, "outputVerbosity": 256}' \
http://application/web-command/execute/ticket:purge