mirror of
				https://github.com/evilsocket/arc.git
				synced 2024-05-26 22:37:37 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package events
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"crypto/tls"
 | |
| 	"fmt"
 | |
| 	"github.com/evilsocket/arc/config"
 | |
| 	"github.com/evilsocket/arc/pgp"
 | |
| 	"github.com/evilsocket/islazy/log"
 | |
| 	"gopkg.in/gomail.v2"
 | |
| 	"os"
 | |
| 	"os/exec"
 | |
| )
 | |
| 
 | |
| func doEmailReport(event Event) (err error) {
 | |
| 	smtp := config.Conf.Scheduler.Reports.SMTP
 | |
| 
 | |
| 	contentType := "text/html"
 | |
| 	reportType := "plaintext"
 | |
| 	if pgpConf.Enabled {
 | |
| 		reportType = "PGP encrypted"
 | |
| 	}
 | |
| 
 | |
| 	body := event.Description
 | |
| 	if pgpConf.Enabled {
 | |
| 		contentType = "text/plain"
 | |
| 		if err, body = pgp.Encrypt(body); err != nil {
 | |
| 			return fmt.Errorf("could not PGP encrypt the message: %v", err)
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	log.Info("reporting %s event '%s' to %s ...",
 | |
| 		reportType,
 | |
| 		event.Title,
 | |
| 		config.Conf.Scheduler.Reports.To)
 | |
| 
 | |
| 	if smtp.Filled() {
 | |
| 		log.Info("using smtp server")
 | |
| 
 | |
| 		d := gomail.NewDialer(smtp.Address, smtp.Port, smtp.Username, smtp.Password)
 | |
| 		d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
 | |
| 
 | |
| 		m := gomail.NewMessage()
 | |
| 		m.SetHeader("From", fmt.Sprintf("Arc Reporting System <%s>", smtp.Username))
 | |
| 		m.SetHeader("To", config.Conf.Scheduler.Reports.To)
 | |
| 		m.SetHeader("Subject", event.Title)
 | |
| 
 | |
| 		m.SetBody(contentType, body)
 | |
| 
 | |
| 		if err := d.DialAndSend(m); err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 	} else if sendmailPath, err := exec.LookPath("sendmail"); err != nil {
 | |
| 		return fmt.Errorf("error searching sendmail binary: %v", err)
 | |
| 	} else {
 | |
| 		log.Info("using %s", sendmailPath)
 | |
| 
 | |
| 		cmd := exec.Command(sendmailPath, "-t")
 | |
| 
 | |
| 		body = "From: arc@localhost\n" +
 | |
| 			fmt.Sprintf("To: %s", config.Conf.Scheduler.Reports.To ) + "\n" +
 | |
| 			fmt.Sprintf("Subject: %s", event.Title ) + "\n" +
 | |
| 			fmt.Sprintf("Content-Type: %s", contentType ) + "\n" +
 | |
| 			"Content-Transfer-Encoding: 7BIT\n" +
 | |
| 			"Content-Disposition: inline\n" +
 | |
| 			"MIME-Version: 1.0\n" +
 | |
| 			"\n" +
 | |
| 			body
 | |
| 
 | |
| 		buffer := bytes.Buffer{}
 | |
| 		buffer.Write([]byte(body))
 | |
| 
 | |
| 		cmd.Stdin = &buffer
 | |
| 		cmd.Stdout = os.Stdout
 | |
| 		cmd.Stderr = os.Stderr
 | |
| 
 | |
| 		return cmd.Run()
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | 
