#execute-command #mail-server #server #automation #api

app imserious

响应Internet消息存储事件执行命令

2个不稳定版本

0.2.0 2022年5月19日
0.1.0 2022年5月15日

#217 in 电子邮件

MIT 许可证

26KB
543

IMSErious

响应Dovecot Internet消息存储事件执行命令。

摘要

imserious [-t] [-c file]
imserious [--test] [--config file]
imserious [-hv]
imserious [--help] [--version]
Optional arguments:
  -h, --help           print help message
  -v, --version        print program version
  -t, --test           test configuration
  -c, --config CONFIG  path to configuration

概述

IMSErious是一个服务,它监听Dovecot推送通知事件,由其OX (Open-Xchange) 驱动发送,并执行响应命令。这允许,例如,在收到新消息时唤醒MRA或发送桌面通知。

配置

IMSErious从指定为第一个参数的TOML文件中进行配置,默认为/usr/local/etc/imserious.toml

listen = "10.0.0.1:12525"  # listen address, default 127.0.0.1:12525
allow = [ "10.0.0.2/32" ]  # allowed notification IP ranges, default all
endpoint = "/notify"       # path to API endpoint, default /notify
max_connections = 8        # connection limit, default 8
timeout = "5s"             # request timeout, default 5s

# optional Basic auth
[auth]
user = "foo"
pass = "bar"

# optional TLS
[tls]
cert = "/etc/ssl/foo.example.com.crt"
key = "/etc/ssl/foo.example.com.key"
periodic_reload = "1d" # optionally reload keys periodically, no default

# optional stdout logging
[log]
max_level = "info"    # One of error, warn, info (default), debug, trace
                      # May be overridden by setting IMSERIOUS_LOG env var
format = "compact"    # One of full (default), compact, pretty, json
ansi = false          # Format "pretty" with ANSI codes, default false
timestamp = false     # Display a timestamp, default false
target = false        # Display the log target, default false
level = false         # Display the log level, default false

[[handler]]
user = "freaky"       # Username, required
event = "MessageNew"  # Event type, optional, default MessageNew
                      # Note this is currently the only type supported by Dovecot's OX driver
delay = "5s"          # Delay execution this long after initial event, optional, default none
limit_period = "30s"  # Rate limit executions over this interval, optional, default 30s
limit_burst = 1       # Allow this many executions per interval, optional, default 1
periodic = "300s"     # Execute unconditionally after this long, optional, default none
command = "/usr/local/bin/fdm -a eda -l fetch"

处理器

处理器是对特定事件/用户对响应要执行的命令。可以指定相同事件和用户的多个处理器来触发不同的命令,并具有自己的速率限制、周期性配置等。

命令只支持基本的shell单词分割和引号 - 如果需要shell元字符,则应通过shell执行,例如使用/bin/sh -c

如果可用,事件字段将在IMSE_*环境变量中公开 - 如果指定了周期性执行,则保证只有IMSE_USERIMSE_EVENT被设置。

  • IMSE_USER - 被通知的用户
  • IMSE_EVENT - 事件名称
  • IMSE_REMOTE_IP - 通知的IP地址
  • IMSE_REMOTE_PORT - 通知的TCP端口
  • IMSE_UNSEEN - 未读消息的数量
  • IMSE_FOLDER - IMAP文件夹名称
  • IMSE_FROM - 新电子邮件的From:地址(如果有)
  • IMSE_SNIPPET - 新电子邮件正文的一个样本(如果有)

安全性

无需多言,允许远程客户端在您的服务器上触发命令可能会产生严重的安全影响。虽然已经尽一切努力限制可能造成的危害,但您有责任不要不安全地使用此程序。

强烈建议不要在公共网络上运行IMSErious的公开实例,或作为受权用户运行。

依赖项

~22–38MB
~638K SLoC