Browse Source

- clean up comments
- remove name from nackends.New
- Update readme to reflect code

flashmob 8 years ago
parent
commit
83f98ccb2e
7 changed files with 33 additions and 21 deletions
  1. 23 9
      README.md
  2. 3 4
      backends/backend.go
  3. 2 2
      cmd/guerrillad/serve.go
  4. 1 1
      cmd/guerrillad/serve_test.go
  5. 1 1
      config_test.go
  6. 0 1
      server_test.go
  7. 3 3
      tests/guerrilla_test.go

+ 23 - 9
README.md

@@ -163,20 +163,37 @@ Guerrilla SMTPd can also be imported and used as a package in your project.
 ## Import Guerrilla.
 ```go
 import "github.com/flashmob/go-guerrilla"
+
+
 ```
 
 ## Implement the `Backend` interface
 Or use one of the implementations in the `backends` sub-package). This is how
 your application processes emails received by the Guerrilla app.
 ```go
+import "github.com/flashmob/go-guerrilla/mail"
+import "github.com/flashmob/go-guerrilla/backends"
+
 type CustomBackend struct {...}
 
-func (cb *CustomBackend) Process(c *guerrilla.Envelope) guerrilla.BackendResult {
-  err := saveSomewhere(c.Data)
+func (cb *CustomBackend) Process(e *mail.Envelope) backends.Result {
+  err := saveSomewhere(e.NewReader())
   if err != nil {
-    return guerrilla.NewBackendResult(fmt.Sprintf("554 Error: %s", err.Error()))
+    return guerrilla.NewResult(fmt.Sprintf("554 Error: %s", err.Error()))
   }
-  return guerrilla.NewBackendResult("250 OK")
+  return guerrilla.NewResult("250 OK")
+}
+```
+
+## Create a logger
+
+```go
+import "github.com/flashmob/go-guerrilla/log"
+
+mainlog, err := log.GetLogger(log.OutputStderr.String());
+if  err != nil {
+    fmt.Println("Cannot open log:", err)
+    os.Exit(1)
 }
 ```
 
@@ -188,7 +205,7 @@ config := &guerrilla.AppConfig{
   AllowedHosts: []string{...}
 }
 backend := &CustomBackend{...}
-app, err := guerrilla.New(config, backend)
+app, err := guerrilla.New(config, backend, mainlog)
 ```
 
 ## Start the app.
@@ -302,11 +319,8 @@ See the full documentation here:
 
 | Processor | Description |
 |-----------|-------------|
-|[MailDir](https://github.com/flashmob/maildir-processor)|Save emails to a maildir|
-
-### Example project
+|[MailDir](https://github.com/flashmob/maildir-processor)|Save emails to a maildir. [MailDiranasaurus](https://github.com/flashmob/maildiranasaurus) is an example project|
 
-[MailDiranasaurus](https://github.com/flashmob/maildiranasaurus) is an example project using a custom processor to save email to a MailDir.
 
 Releases
 ========

+ 3 - 4
backends/backend.go

@@ -33,7 +33,6 @@ type processorConstructor func() Decorator
 // Must return an SMTP message (i.e. "250 OK") and a boolean indicating
 // whether the message was processed successfully.
 type Backend interface {
-	// Public methods
 	Process(*mail.Envelope) Result
 	ValidateRcpt(e *mail.Envelope) RcptError
 	Initialize(BackendConfig) error
@@ -123,9 +122,9 @@ func (e Errors) Error() string {
 	return msg
 }
 
-// New retrieve a backend specified by the backendName, and initialize it using
-// backendConfig
-func New(backendName string, backendConfig BackendConfig, l log.Logger) (Backend, error) {
+// New makes a new default BackendGateway backend, and initializes it using
+// backendConfig and stores the logger
+func New(backendConfig BackendConfig, l log.Logger) (Backend, error) {
 	Svc.StoreMainlog(l)
 	gateway := &BackendGateway{config: backendConfig}
 	err := gateway.Initialize(backendConfig)

+ 2 - 2
cmd/guerrillad/serve.go

@@ -95,7 +95,7 @@ func subscribeBackendEvent(event guerrilla.Event, backend backends.Backend, app
 			logger.WithError(err).Warn("Backend failed to shutdown")
 			return
 		}
-		newBackend, newErr := backends.New("", cmdConfig.BackendConfig, logger)
+		newBackend, newErr := backends.New(cmdConfig.BackendConfig, logger)
 		if newErr != nil {
 			// this will continue using old backend
 			logger.WithError(newErr).Error("Error while loading the backend")
@@ -132,7 +132,7 @@ func serve(cmd *cobra.Command, args []string) {
 
 	// Backend setup
 	var backend backends.Backend
-	backend, err = backends.New("", cmdConfig.BackendConfig, mainlog)
+	backend, err = backends.New(cmdConfig.BackendConfig, mainlog)
 	if err != nil {
 		mainlog.WithError(err).Fatalf("Error while loading the backend")
 	}

+ 1 - 1
cmd/guerrillad/serve_test.go

@@ -255,7 +255,7 @@ func TestCmdConfigChangeEvents(t *testing.T) {
 	mainlog, _ = log.GetLogger("off")
 
 	bcfg := backends.BackendConfig{"log_received_mails": true}
-	backend, err := backends.New("dummy", bcfg, mainlog)
+	backend, err := backends.New(bcfg, mainlog)
 	app, err := guerrilla.New(&oldconf.AppConfig, backend, mainlog)
 	if err != nil {
 		//log.Info("Failed to create new app", err)

+ 1 - 1
config_test.go

@@ -197,7 +197,7 @@ func TestConfigChangeEvents(t *testing.T) {
 	oldconf.Load([]byte(configJsonA))
 	logger, _ := log.GetLogger(oldconf.LogFile)
 	bcfg := backends.BackendConfig{"log_received_mails": true}
-	backend, _ := backends.New("dummy", bcfg, logger)
+	backend, _ := backends.New(bcfg, logger)
 	app, _ := New(oldconf, backend, logger)
 	// simulate timestamp change
 	time.Sleep(time.Second + time.Millisecond*500)

+ 0 - 1
server_test.go

@@ -42,7 +42,6 @@ func getMockServerConn(sc *ServerConfig, t *testing.T) (*mocks.Conn, *server) {
 		mainlog.WithError(logOpenError).Errorf("Failed creating a logger for mock conn [%s]", sc.ListenInterface)
 	}
 	backend, err := backends.New(
-		"dummy",
 		backends.BackendConfig{"log_received_mails": true, "save_workers_size": 1},
 		mainlog)
 	if err != nil {

+ 3 - 3
tests/guerrilla_test.go

@@ -63,7 +63,7 @@ func init() {
 	} else {
 		setupCerts(config)
 		logger, _ = log.GetLogger(config.LogFile)
-		backend, _ := getBackend("dummy", config.BackendConfig, logger)
+		backend, _ := getBackend(config.BackendConfig, logger)
 		app, _ = guerrilla.New(&config.AppConfig, backend, logger)
 	}
 
@@ -112,8 +112,8 @@ var configJson = `
 }
 `
 
-func getBackend(backendName string, backendConfig map[string]interface{}, l log.Logger) (backends.Backend, error) {
-	return backends.New(backendName, backendConfig, l)
+func getBackend(backendConfig map[string]interface{}, l log.Logger) (backends.Backend, error) {
+	return backends.New(backendConfig, l)
 }
 
 func setupCerts(c *TestConfig) {