Skip to content

Commit

Permalink
Initial Commit
Browse files Browse the repository at this point in the history
  • Loading branch information
noneymous committed Apr 26, 2021
0 parents commit 1202a70
Show file tree
Hide file tree
Showing 30 changed files with 2,940 additions and 0 deletions.
17 changes: 17 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Goland (developer-specific stuff)
.idea/workspace.xml

# Custom certificates
*.pem
!cert1.pem
!cert2.pem
!key1.pem
!key2.pem
*.der
!cert1.der
!cert2.der
!key1.der
!key2.der

# Sample JSON configs
*.json
11 changes: 11 additions & 0 deletions .idea/fileTemplates/internal/Go File.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions .idea/zap-smtp.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 33 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Contributing to the ZapSmtp
Contributions to the ZapSmtp are always welcome.

This document explains the general requirements for contributions and the necessary preparation steps.
It also sketches the typical integration process of patches.

All contributions are subject to verification. Complex changes or changes with opaque impact may be rejected.

## 1) Contribution Checklist
- Use git to manage your changes [**recommended**]
- Readability and code style over code efficiency [**required**]
- Provide well-tested low maintenance code [**required**]
- Provide code that is secure by default and can run out-of-the-box [**required**]
- Add the required copyright header to each new file introduced, see [**required**]
[licensing information](./LICENSE) [**required**]
- Structure patches logically, in small steps [**required**]
- All code turns into future liability, do not let the feature creep get hold of you! [**required**]

## 2) By contributing, you certify, that:

(a) The contribution was created in whole or in part by you and you
have the right to submit it under the open source license
indicated by this project; or

(b) The contribution was provided directly to you by some other
person who certified (a) or (b) and you have not modified
it.

(c) You understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information you submit with it) is maintained indefinitely
and may be redistributed consistent with this project or the
open source license(s) involved.
16 changes: 16 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Copyright 2021 Siemens AG

Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE 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.
82 changes: 82 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# ZapSmtp
Let's be real, who's regularly browsing through megabytes of log files? Wouldn't it be nice, if important messages
were delivered to you in time, and the log files just served the purpose of holding the details?

This package offers extended functionality for the [zap logger](https://github.com/uber-go/zap), with the purpose
of handling (some) log messages via (optionally signed and/or encrypted) SMTP mails.

We use this package to notice critical issues fast, so we can roll out a fix, before the user pushes the same buttons
again. Yes, yes, alternatively, you can expand the turbine stack of your production environment
by deploying, configuring and maintaining additional log management software.

### Installation
As Golang only supports plain text SMTP mails natively, _OpenSSL_ has to be installed if encryption and/or signature is
to be enabled. Other than that a simple `go get` is sufficient.

### Usage
Because sending out a new mail for every single log message is not desirable in most cases, it is recommended to use
some kind of buffered Core. For this the `delayedCore` provided in this package can be used.

```go
func Exmaple() {

// Prepare SMTP sink
sink, errSink := smtp.NewWriteSyncCloser(
conf.Server,
conf.Port,
conf.Subject,
conf.Sender, // mail.Address structs for the sender
conf.Recipients, // mail.Address structs for each recipient
conf.OpensslPath, // Can be omitted, if no e-mail signature nor encryption is desired
conf.SignatureCertPath, // Can be omitted, if no e-mail signature is desired
conf.SignatureKeyPath, // Can be omitted, if no e-mail signature is desired
conf.EncryptionCertPaths, // Can be omitted, if no e-mail encryption is desired
conf.TempDir, // If empty, the system's temporary directory will be used if needed
)
if errSink != nil {
fmt.Printf("Initializing SMTP sink failed: %s\n", errSink)
return
}

// Make sure logger is closed properly
defer func() {
if errClose := sink.Close(); errClose != nil {
fmt.Printf("Closing SMTP sink failed: %s\n", errClose)
}
}()

// Define the encoder
enc := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())

// Initialize SMTP core
core, errCore := cores.NewDelayedCore(zapcore.WarnLevel, enc, sink, zapcore.ErrorLevel, time.Minute*1, time.Second*5)
if errCore != nil {
fmt.Printf("Initializing SMTP core failed: %s\n", errCore)
return
}

// Initialize Zap logger
logger := zap.New(core)

// Make sure logger is flushed before shutting down
defer func() { _ = logger.Sync() }()

// Log stuff
logger.Warn("Warn message, triggering email after 1 minute")
logger.Error("Error message, triggering email after 5 seconds") // Email sent after 5 seconds will include warning
}
```

Note that even though the `writeSyncCloser` satisfies zap's `Sink` interface it is not recommended using it with
`RegisterSink` as this way only standard `ioCores` can be used.

Another example can be found in `./examples`.
You can also visit [Large-Scale Discovery](https://github.com/siemens/large-scale-discovery) to see it applied.

### Best practices
- When possible the `writeSyncCloser` should be preferred over the `writeSyncer`, as it will convert files only once and
keep a reference to the resulting files until `Close` is called.
- As encrypting and signing mails via _OpenSSL_ is slow it is recommended to not log too frequently. This depends
heavily on your use case though.
- Email signature and encryption needs certificate and key files in PEM format. The `writeSyncer` (and `writeSyncCloser`)
also allows for DER format and will convert them internally. It's advised though to use PEM format if possible.
Binary file added _test/cert1.der
Binary file not shown.
35 changes: 35 additions & 0 deletions _test/cert1.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
-----BEGIN CERTIFICATE-----
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
VuLs//nn/aFmOvKkTlVsSkDgBgWt0LlvhXnlu84=
-----END CERTIFICATE-----
Binary file added _test/cert2.der
Binary file not shown.
35 changes: 35 additions & 0 deletions _test/cert2.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
-----BEGIN CERTIFICATE-----
MIIGJTCCBA2gAwIBAgIUUwMKLnzEwP3yv2sXWb8a9hwz/5UwDQYJKoZIhvcNAQEL
BQAwgaExCzAJBgNVBAYTAlVTMRUwEwYDVQQIDAx6YXAtdGVzdGluZzIxFTATBgNV
BAcMDHphcC10ZXN0aW5nMjEVMBMGA1UECgwMemFwLXRlc3RpbmcyMRUwEwYDVQQL
DAx6YXAtdGVzdGluZzIxFTATBgNVBAMMDHphcC10ZXN0aW5nMjEfMB0GCSqGSIb3
DQEJARYQemFwQHRlc3RpbmcyLmNvbTAeFw0yMTAzMTIxMjAyMjVaFw0zMTAzMTAx
MjAyMjVaMIGhMQswCQYDVQQGEwJVUzEVMBMGA1UECAwMemFwLXRlc3RpbmcyMRUw
EwYDVQQHDAx6YXAtdGVzdGluZzIxFTATBgNVBAoMDHphcC10ZXN0aW5nMjEVMBMG
A1UECwwMemFwLXRlc3RpbmcyMRUwEwYDVQQDDAx6YXAtdGVzdGluZzIxHzAdBgkq
hkiG9w0BCQEWEHphcEB0ZXN0aW5nMi5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQDWywDIggkDsGzfptwsQZOYnrUzb2GTfU7MULLW39I1BO1SVJsX
fCkO3okbkWaQ/pcaCouBvHBgVoIJGRew4rNd7WXnzB4cDcVTBxInWepbhi4dLjdU
ZY3yjD2rL6taC0opJlJk3bVbcqvIvjDmIj5cO0JYqe63A3sYITxm0AlobtRa8lsj
66QyaVkrYCiEWc9ZdSNSwNU3dvd92v3vJK6EZrCBWnq2xVmDRbHAsyHuKefBd7CI
XcHJRN+xLrpCq/GpEzQdG1Sqch1z/Ji3FQUDoOmrYS7LG5SdzvsOq/KAw7ZmYxMP
uy9nfweN7TJ4ahhhveeFS87MQP2c7r95x/4wWSX3hyBfldDyhb9DHLsKlApMJL2p
xMaSS92f0LHTvLyMXlDay8jp6QemMyqQ4NtqvUF6YejOGe2er7/BUBVdIBmIyJO7
i15DShW32xAVionHNaB7bXFWHUptVFu7DOdqKcOCG4PPFzOEe/MPu1ivneEDuHPZ
1LU1ays+gkdR+yUmrl8ojV0pUNyPek4QHzPseAHP+OvN7OdqBVLKeVUZidjtGa/q
7DFlSfxaiu6e52P7pDhjLVNM2GpS5AfZZJLAIqxmaTjCWkI8yhyJaj6adYjIkVfB
mOvNhyY9Mr1DS5njnx6/gVBagURK5HtNHNx89sHLKuxO7Cel3PvQyIy/NwIDAQAB
o1MwUTAdBgNVHQ4EFgQUpyHew/RJ1aOcwAyGdg3rUFr2VOMwHwYDVR0jBBgwFoAU
pyHew/RJ1aOcwAyGdg3rUFr2VOMwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
AQsFAAOCAgEAeWV6GsvZ8ElDIFq9raWgVHIH6S3UaxTl/7WXKVk9OhSduRtoDl8u
+hUQleZsSzCc5aRoV6VqCMo6mkPJtlHcEcUGB4hl9byFuP+cqf6UbTgmRJNRK3fU
/ul4lrNGEd6zVCRtp0tvKx+ELLrwbvTQj+lHIRaM4ue1tyjZb+Vmwfly2b7jHGi7
OGot3VT9qPSziC5X50iDdyWGs2314Izsm7EQbk8HBOq/DEBqLXl+WeTi09bbCFmE
AAr6AC3eT2wtWZT5ZeA5gJ+CMx8/Y1lpDKKxOiSCgNv/Vm4x/RKoIjggljQlgGtM
yWSJ00kJRpEoXLdhHkHNYf2IfHX/u384Xd0KjUz9VSZ5A/Z6y1VZwa6JfQqc7Q4I
tkvNoOtHYT/5BEOXDeTKhPdHBWyyWiGeYSJvTQs8LiJDmQoIkDQufnEFh45vn5Hg
2UHHOX39mCl9odAAgmj2KzyQZB4HmRjt7Ea65tAObpOfWVT5Wlb9Lj1q+xJvbO6F
9e4iC3D9fSidcMI0ycm8hMtIKYsT/HMMHTG460T5iVtIZh4OQItLt7k73druGIkK
IA9qDJ0iqfJkbJEWvgjzpsI1YBu6bVN8DYlbtO2F9GVR2v2GGeKlyDEAOLhgZTE8
Mb2ixWmTTPrjn+gNyGrU1BkJglsaZGmjYyv/VsdP7RCT7XDnach5HR8=
-----END CERTIFICATE-----
3 changes: 3 additions & 0 deletions _test/gen.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash

openssl req -newkey rsa:4096 -nodes -keyout key.pem -x509 -days 3650 -outform pem -out cert.pem
Binary file added _test/key1.der
Binary file not shown.
52 changes: 52 additions & 0 deletions _test/key1.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
eQh4ZC4L0syzmMjb0mOdfEhj1NpV7ic1
-----END PRIVATE KEY-----
Binary file added _test/key2.der
Binary file not shown.
52 changes: 52 additions & 0 deletions _test/key2.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
gX/hi0ukSbdQSLSzOcWPuH3FP+kn6ZBE
-----END PRIVATE KEY-----
Loading

0 comments on commit 1202a70

Please sign in to comment.