Skip to content
This repository has been archived by the owner on Feb 15, 2024. It is now read-only.

Add support for email notifications #97

Merged
merged 1 commit into from
Jul 18, 2020

Conversation

atc0005
Copy link
Owner

@atc0005 atc0005 commented Jul 17, 2020

SUMMARY

This commit adds support for sending email notifications using the
same behavioral feature set as Microsoft Teams notifications:

  • configurable retries and retry delay
  • configurable rate limit
  • a separate notification per event
    • e.g., request received, username disabled, sessions terminated

The following settings are configurable:

  • destination email address(es)
  • sender address
  • SMTP server IP/FQDN
  • SMTP server port
  • client identity
    • hostname provided to the SMTP server
    • as noted elsewhere, some SMTP servers will perform forward/reverse
      DNS lookups to confirm that this provided value matches what DNS
      has recorded for the sending IP Address

Some known weaknesses/lack of support:

  • hard-coded email template

    • as of this commit, the template using Textile formatting is
      enabled
    • future efforts are intended to move hard-coded templates out of
      source code constants to on-disk files for easier customization
      by the sysadmin(s) supporting this application
  • unauthenticated connections to SMTP server

    • the initial use-case is a local relay which restricts connections
      based on source IP Address
    • future efforts are intended to provide support for authentication

Behavior worth noting:

  • automatic client identity value generated from available DNS
    information if not specified by the sysadmin
    • the Showmax/go-fqdn package is used to retrieve the FQDN of the
      sending system, with a fallback to
  • email address verification applied using the provided W3C regex
    • using a guide from golangcode.com

CHANGES

The following items note (non-exhaustive) changes since the last
point release. Many of these changes will see further refactoring
as part of GH-22.

  • Duplicate client/alert request headers so that in-place formatting
    modifications performed on values in the slice do not spill over to
    the values used for email notifications (where a different
    formatting is used)

  • Replace placeholder "getter" methods with full-featured equivalents
    to existing MS Teams methods

  • Add new "getter" methods to cover new functionality

  • Add flags, environment variables to cover new functionality

  • Rename existing generically named functions used for Teams
    notification handling to explicitly mention relation to Teams
    notifications

    • this was needed to make room for email-specific notification
      functionality
  • Rework some existing Teams-specific functions to allow use with
    Teams and email notifications (DRY)

  • Add email-specific functions, methods, types to mirror existing
    Microsoft Teams notifications support

  • Replace placeholder email notification template with a "default",
    mostly text-only friendly format and a Textile formatted template to
    be used with older Redmine systems (prior to Markdown support being
    introduced)

  • MessageTrailer func updated to take a template string for
    generation of a format-specific branding string

    • e.g., Textile-formatted repo link or Markdown-formatted repo link
  • Update config Stringer interface

    • it is growing quite large at this point, might be time to
      rethink how it is handled
  • TOML configuration file

    • extended with new settings
    • rename some settings in an effort to better communicate intent
  • Documentation

    • Cover new flags, environment variables and config file settings
    • Misc fixes for existing rate limit, number of retries and retry
      delay
    • Refresh existing setup/deploy steps to briefly cover email
      configuration

REFERENCES

@atc0005 atc0005 added enhancement New feature or request license Related to the license for this project (e.g., LICENSE, NOTICES.txt or README) notification email msteams template logging config dependencies labels Jul 17, 2020
@atc0005 atc0005 added this to the v0.4.0 milestone Jul 17, 2020
@atc0005 atc0005 self-assigned this Jul 17, 2020
@atc0005 atc0005 force-pushed the i3-add-initial-email-notifications-support branch 13 times, most recently from 844a613 to 847030c Compare July 18, 2020 16:31
SUMMARY

This commit adds support for sending email notifications using the
same behavioral feature set as Microsoft Teams notifications:

- configurable retries and retry delay
- configurable rate limit
- a separate notification per event
  - e.g., request received, username disabled, sessions terminated

The following settings are configurable:

- destination email address(es)
- sender address
- SMTP server IP/FQDN
- SMTP server port
- client identity
  - hostname provided to the SMTP server
  - as noted elsewhere, some SMTP servers will perform forward/reverse
    DNS lookups to confirm that this provided value matches what DNS
    has recorded for the sending IP Address

Some known weaknesses/lack of support:

- hard-coded email template
  - as of this commit, the template using Textile formatting is
    enabled
  - future efforts are intended to move hard-coded templates out of
    source code constants to on-disk files for easier customization
    by the sysadmin(s) supporting this application

- unauthenticated connections to SMTP server
  - the initial use-case is a local relay which restricts connections
    based on source IP Address
  - future efforts are intended to provide support for authentication

Behavior worth noting:

- automatic client identity value generated from available DNS
  information if not specified by the sysadmin
  - the `Showmax/go-fqdn` package is used to retrieve the FQDN of the
    sending system, with a fallback to
- email address verification applied using the provided W3C regex
  - using a guide from golangcode.com

CHANGES

The following items note (non-exhaustive) changes since the last
point release. Many of these changes will see further refactoring
as part of GH-22.

- Duplicate client/alert request headers so that in-place formatting
  modifications performed on values in the slice do not spill over to
  the values used for email notifications (where a different
  formatting is used)

- Replace placeholder "getter" methods with full-featured equivalents
  to existing MS Teams methods

- Add new "getter" methods to cover new functionality

- Add flags, environment variables to cover new functionality

- Rename existing generically named functions used for Teams
  notification handling to explicitly mention relation to Teams
  notifications
  - this was needed to make room for email-specific notification
    functionality

- Rework some existing Teams-specific functions to allow use with
  Teams and email notifications (DRY)

- Add email-specific functions, methods, types to mirror existing
  Microsoft Teams notifications support

- Replace placeholder email notification template with a "default",
  mostly text-only friendly format and a Textile formatted template to
  be used with older Redmine systems (prior to Markdown support being
  introduced)

- `MessageTrailer` func updated to take a template string for
  generation of a format-specific branding string
  - e.g., Textile-formatted repo link or Markdown-formatted repo link

- Update config Stringer interface
  - it is growing quite large at this point, might be time to
    rethink how it is handled

- TOML configuration file
  - extended with new settings
  - rename some settings in an effort to better communicate intent

- Documentation
  - Cover new flags, environment variables and config file settings
  - Misc fixes for existing rate limit, number of retries and retry
    delay
  - Refresh existing setup/deploy steps to briefly cover email
    configuration

REFERENCES

- refs GH-3

- https://golangcode.com/validate-an-email-address/
  - https://www.w3.org/TR/2016/REC-html51-20161101/sec-forms.html
- https://github.com/Showmax/go-fqdn
@atc0005 atc0005 force-pushed the i3-add-initial-email-notifications-support branch from 847030c to a0a595e Compare July 18, 2020 16:34
@atc0005 atc0005 merged commit 968609f into master Jul 18, 2020
@atc0005 atc0005 deleted the i3-add-initial-email-notifications-support branch July 18, 2020 16:38
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
config dependencies email enhancement New feature or request license Related to the license for this project (e.g., LICENSE, NOTICES.txt or README) logging msteams notification template
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Feature: Add support for email notifications when disabling user
1 participant