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

Commit

Permalink
Add support for email notifications
Browse files Browse the repository at this point in the history
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 target SMTP used
  - 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

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
  • Loading branch information
atc0005 committed Jul 18, 2020
1 parent 39da44d commit 17501fb
Show file tree
Hide file tree
Showing 22 changed files with 1,470 additions and 234 deletions.
20 changes: 20 additions & 0 deletions NOTICE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


https://golangcode.com/get-the-request-ip-addr/
https://golangcode.com/validate-an-email-address/
https://github.com/eddturtle/golangcode-site/blob/master/LICENSE

MIT License
Expand Down Expand Up @@ -177,3 +178,22 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.




https://github.com/Showmax/go-fqdn/blob/master/LICENSE

Copyright since 2015 Showmax s.r.o.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,9 @@ See also:
- levels, format and output (see [configuration settings
doc](docs/configure.md))

- Microsoft Teams notifications
- Optional notifications
- Microsoft Teams
- Email
- generated for multiple events
- alert received
- disabled user
Expand Down Expand Up @@ -153,7 +155,6 @@ Known issues:

- Documentation
- The docs are beginning to take overall shape, but still need a lot of work
- Email notifications are not currently supported (see GH-3)
- Payloads are accepted from any IP Address
- the expectation is that host-level firewall rules will be used to protect
against this until a feature can be added to filter access (see GH-18)
Expand Down
Loading

0 comments on commit 17501fb

Please sign in to comment.