sftpgo-mirror/docs/custom-actions.md
Nicola Murino 4759254e10 file actions: add bucket and endpoint to notifications
The HTTP notifications are now invoked as POST and the notification is
a JSON inside the POST body.

This is a backward incompatible change but this way the actions can be
extended more easily, sorry for the trouble

Fixes #101
2020-03-25 18:36:33 +01:00

3.6 KiB

Custom Actions

The actions struct inside the "sftpd" configuration section allows to configure the actions for file operations and SSH commands.

Actions will not be executed if an error is detected, and so a partial file is uploaded or an SSH command is not successfully completed. The upload condition includes both uploads to new files and overwrite of existing files. The ssh_cmd condition will be triggered after a command is successfully executed via SSH. scp will trigger the download and upload conditions and not ssh_cmd.

The command, if defined, is invoked with the following arguments:

  • action, string, possible values are: download, upload, delete, rename, ssh_cmd
  • username
  • path is the full filesystem path, can be empty for some ssh commands
  • target_path, non-empty for rename action
  • ssh_cmd, non-empty for ssh_cmd action

The command can also read the following environment variables:

  • SFTPGO_ACTION
  • SFTPGO_ACTION_USERNAME
  • SFTPGO_ACTION_PATH
  • SFTPGO_ACTION_TARGET, non-empty for rename SFTPGO_ACTION
  • SFTPGO_ACTION_SSH_CMD, non-empty for ssh_cmd SFTPGO_ACTION
  • SFTPGO_ACTION_FILE_SIZE, non-empty for upload, download and delete SFTPGO_ACTION
  • SFTPGO_ACTION_FS_PROVIDER, 0 for local filesystem, 1 for S3 backend, 2 for Google Cloud Storage (GCS) backend
  • SFTPGO_ACTION_BUCKET, non-empty for S3 and GCS backends
  • SFTPGO_ACTION_ENDPOINT, non-empty for S3 backend if configured

Previous global environment variables aren't cleared when the script is called. The command must finish within 30 seconds.

The http_notification_url, if defined, will be invoked as HTTP POST. The request body will contain a JSON serialized struct with the following fields:

  • action
  • username
  • path
  • target_path, not null for rename action
  • ssh_cmd, not null for ssh_cmd action
  • file_size, not null for upload, download, delete actions
  • fs_provider, 0 for local filesystem, 1 for S3 backend, 2 for Google Cloud Storage (GCS) backend
  • bucket, not null for S3 and GCS backends
  • endpoint, not null for S3 backend if configured

The HTTP request is executed with a 15-second timeout.

The actions struct inside the "data_provider" configuration section allows you to configure actions on user add, update, delete.

Actions will not be fired for internal updates, such as the last login or the user quota fields, or after external authentication.

The command, if defined, is invoked with the following arguments:

  • action, string, possible values are: add, update, delete
  • username
  • ID
  • status
  • expiration_date
  • home_dir
  • uid
  • gid

The command can also read the following environment variables:

  • SFTPGO_USER_ACTION
  • SFTPGO_USER_USERNAME
  • SFTPGO_USER_PASSWORD, hashed password as stored inside the data provider, can be empty if the user does not login using a password
  • SFTPGO_USER_ID
  • SFTPGO_USER_STATUS
  • SFTPGO_USER_EXPIRATION_DATE
  • SFTPGO_USER_HOME_DIR
  • SFTPGO_USER_UID
  • SFTPGO_USER_GID
  • SFTPGO_USER_QUOTA_FILES
  • SFTPGO_USER_QUOTA_SIZE
  • SFTPGO_USER_UPLOAD_BANDWIDTH
  • SFTPGO_USER_DOWNLOAD_BANDWIDTH
  • SFTPGO_USER_MAX_SESSIONS
  • SFTPGO_USER_FS_PROVIDER

Previous global environment variables aren't cleared when the script is called. The command must finish within 15 seconds.

The http_notification_url, if defined, will be invoked as HTTP POST. The action is added to the query string, for example <http_notification_url>?action=update, and the user is sent serialized as JSON inside the POST body with sensitive fields removed.

The HTTP request is executed with a 15-second timeout.