github.com/gophish/gophish@v0.12.2-0.20230915144530-8e7929441393/models/smtp_test.go (about)

     1  package models
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/jinzhu/gorm"
     7  
     8  	check "gopkg.in/check.v1"
     9  )
    10  
    11  func (s *ModelsSuite) TestPostSMTP(c *check.C) {
    12  	smtp := SMTP{
    13  		Name:        "Test SMTP",
    14  		Host:        "1.1.1.1:25",
    15  		FromAddress: "foo@example.com",
    16  		UserId:      1,
    17  	}
    18  	err := PostSMTP(&smtp)
    19  	c.Assert(err, check.Equals, nil)
    20  	ss, err := GetSMTPs(1)
    21  	c.Assert(err, check.Equals, nil)
    22  	c.Assert(len(ss), check.Equals, 1)
    23  }
    24  
    25  func (s *ModelsSuite) TestPostSMTPNoHost(c *check.C) {
    26  	smtp := SMTP{
    27  		Name:        "Test SMTP",
    28  		FromAddress: "foo@example.com",
    29  		UserId:      1,
    30  	}
    31  	err := PostSMTP(&smtp)
    32  	c.Assert(err, check.Equals, ErrHostNotSpecified)
    33  }
    34  
    35  func (s *ModelsSuite) TestPostSMTPNoFrom(c *check.C) {
    36  	smtp := SMTP{
    37  		Name:   "Test SMTP",
    38  		UserId: 1,
    39  		Host:   "1.1.1.1:25",
    40  	}
    41  	err := PostSMTP(&smtp)
    42  	c.Assert(err, check.Equals, ErrFromAddressNotSpecified)
    43  }
    44  
    45  func (s *ModelsSuite) TestPostInvalidFrom(c *check.C) {
    46  	smtp := SMTP{
    47  		Name:        "Test SMTP",
    48  		Host:        "1.1.1.1:25",
    49  		FromAddress: "Foo Bar <foo@example.com>",
    50  		UserId:      1,
    51  	}
    52  	err := PostSMTP(&smtp)
    53  	c.Assert(err, check.Equals, ErrInvalidFromAddress)
    54  }
    55  
    56  func (s *ModelsSuite) TestPostInvalidFromEmail(c *check.C) {
    57  	smtp := SMTP{
    58  		Name:        "Test SMTP",
    59  		Host:        "1.1.1.1:25",
    60  		FromAddress: "example.com",
    61  		UserId:      1,
    62  	}
    63  	err := PostSMTP(&smtp)
    64  	c.Assert(err, check.Equals, ErrInvalidFromAddress)
    65  }
    66  
    67  func (s *ModelsSuite) TestPostSMTPValidHeader(c *check.C) {
    68  	smtp := SMTP{
    69  		Name:        "Test SMTP",
    70  		Host:        "1.1.1.1:25",
    71  		FromAddress: "foo@example.com",
    72  		UserId:      1,
    73  		Headers: []Header{
    74  			Header{Key: "Reply-To", Value: "test@example.com"},
    75  			Header{Key: "X-Mailer", Value: "gophish"},
    76  		},
    77  	}
    78  	err := PostSMTP(&smtp)
    79  	c.Assert(err, check.Equals, nil)
    80  	ss, err := GetSMTPs(1)
    81  	c.Assert(err, check.Equals, nil)
    82  	c.Assert(len(ss), check.Equals, 1)
    83  }
    84  
    85  func (s *ModelsSuite) TestSMTPGetDialer(ch *check.C) {
    86  	host := "localhost"
    87  	port := 25
    88  	smtp := SMTP{
    89  		Host:             fmt.Sprintf("%s:%d", host, port),
    90  		IgnoreCertErrors: false,
    91  	}
    92  	d, err := smtp.GetDialer()
    93  	ch.Assert(err, check.Equals, nil)
    94  
    95  	dialer := d.(*Dialer).Dialer
    96  	ch.Assert(dialer.Host, check.Equals, host)
    97  	ch.Assert(dialer.Port, check.Equals, port)
    98  	ch.Assert(dialer.TLSConfig.ServerName, check.Equals, host)
    99  	ch.Assert(dialer.TLSConfig.InsecureSkipVerify, check.Equals, smtp.IgnoreCertErrors)
   100  }
   101  
   102  func (s *ModelsSuite) TestGetInvalidSMTP(ch *check.C) {
   103  	_, err := GetSMTP(-1, 1)
   104  	ch.Assert(err, check.Equals, gorm.ErrRecordNotFound)
   105  }
   106  
   107  func (s *ModelsSuite) TestDefaultDeniedDial(ch *check.C) {
   108  	host := "169.254.169.254"
   109  	port := 25
   110  	smtp := SMTP{
   111  		Host: fmt.Sprintf("%s:%d", host, port),
   112  	}
   113  	d, err := smtp.GetDialer()
   114  	ch.Assert(err, check.Equals, nil)
   115  	_, err = d.Dial()
   116  	ch.Assert(err, check.ErrorMatches, ".*upstream connection denied.*")
   117  }