Move repo to own git and add drone CI
This commit is contained in:
parent
78eaed64d5
commit
d9e221a019
|
@ -0,0 +1,20 @@
|
||||||
|
kind: pipeline
|
||||||
|
name: default
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: publish
|
||||||
|
image: plugins/docker
|
||||||
|
settings:
|
||||||
|
username:
|
||||||
|
from_secret: docker_username
|
||||||
|
password:
|
||||||
|
from_secret: docker_password
|
||||||
|
repo: quay.io/jlelse/mailygo
|
||||||
|
registry: quay.io
|
||||||
|
tags: latest
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
exclude:
|
||||||
|
- pull_request
|
2
go.mod
2
go.mod
|
@ -1,4 +1,4 @@
|
||||||
module codeberg.org/jlelse/mailygo
|
module git.jlel.se/jlelse/mailygo
|
||||||
|
|
||||||
go 1.14
|
go 1.14
|
||||||
|
|
||||||
|
|
30
mail.go
30
mail.go
|
@ -16,20 +16,20 @@ func sendForm(values *FormValues) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildMessage(recipient string, date time.Time, values *FormValues) string {
|
func buildMessage(recipient string, date time.Time, values *FormValues) string {
|
||||||
var msgBuffer bytes.Buffer
|
msgBuffer := &bytes.Buffer{}
|
||||||
_, _ = fmt.Fprintf(&msgBuffer, "From: Forms <%s>", appConfig.Sender)
|
_, _ = fmt.Fprintf(msgBuffer, "From: Forms <%s>", appConfig.Sender)
|
||||||
_, _ = fmt.Fprintln(&msgBuffer)
|
_, _ = fmt.Fprintln(msgBuffer)
|
||||||
_, _ = fmt.Fprintf(&msgBuffer, "To: %s", recipient)
|
_, _ = fmt.Fprintf(msgBuffer, "To: %s", recipient)
|
||||||
_, _ = fmt.Fprintln(&msgBuffer)
|
_, _ = fmt.Fprintln(msgBuffer)
|
||||||
if replyTo := findReplyTo(values); replyTo != "" {
|
if replyTo := findReplyTo(values); replyTo != "" {
|
||||||
_, _ = fmt.Fprintf(&msgBuffer, "Reply-To: %s", replyTo)
|
_, _ = fmt.Fprintf(msgBuffer, "Reply-To: %s", replyTo)
|
||||||
_, _ = fmt.Fprintln(&msgBuffer)
|
_, _ = fmt.Fprintln(msgBuffer)
|
||||||
}
|
}
|
||||||
_, _ = fmt.Fprintf(&msgBuffer, "Date: %s", date.Format(time.RFC1123Z))
|
_, _ = fmt.Fprintf(msgBuffer, "Date: %s", date.Format(time.RFC1123Z))
|
||||||
_, _ = fmt.Fprintln(&msgBuffer)
|
_, _ = fmt.Fprintln(msgBuffer)
|
||||||
_, _ = fmt.Fprintf(&msgBuffer, "Subject: New submission on %s", findFormName(values))
|
_, _ = fmt.Fprintf(msgBuffer, "Subject: New submission on %s", findFormName(values))
|
||||||
_, _ = fmt.Fprintln(&msgBuffer)
|
_, _ = fmt.Fprintln(msgBuffer)
|
||||||
_, _ = fmt.Fprintln(&msgBuffer)
|
_, _ = fmt.Fprintln(msgBuffer)
|
||||||
bodyValues := removeMetaValues(values)
|
bodyValues := removeMetaValues(values)
|
||||||
var keys []string
|
var keys []string
|
||||||
for key := range *bodyValues {
|
for key := range *bodyValues {
|
||||||
|
@ -37,9 +37,9 @@ func buildMessage(recipient string, date time.Time, values *FormValues) string {
|
||||||
}
|
}
|
||||||
sort.Strings(keys)
|
sort.Strings(keys)
|
||||||
for _, key := range keys {
|
for _, key := range keys {
|
||||||
_, _ = fmt.Fprint(&msgBuffer, key)
|
_, _ = fmt.Fprint(msgBuffer, key)
|
||||||
_, _ = fmt.Fprint(&msgBuffer, ": ")
|
_, _ = fmt.Fprint(msgBuffer, ": ")
|
||||||
_, _ = fmt.Fprintln(&msgBuffer, strings.Join((*bodyValues)[key], ", "))
|
_, _ = fmt.Fprintln(msgBuffer, strings.Join((*bodyValues)[key], ", "))
|
||||||
}
|
}
|
||||||
return msgBuffer.String()
|
return msgBuffer.String()
|
||||||
}
|
}
|
||||||
|
|
13
spamcheck.go
13
spamcheck.go
|
@ -22,25 +22,24 @@ func checkValues(values *FormValues) bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return checkBlacklist(&allValues) || checkUrls(&urlsToCheck)
|
return checkBlacklist(allValues) || checkUrls(urlsToCheck)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkBlacklist(values *[]string) bool {
|
func checkBlacklist(values []string) bool {
|
||||||
for _, value := range *values {
|
for _, value := range values {
|
||||||
for _, blacklistedString := range appConfig.Blacklist {
|
for _, blacklistedString := range appConfig.Blacklist {
|
||||||
if strings.Contains(strings.ToLower(value), strings.ToLower(blacklistedString)) {
|
if strings.Contains(strings.ToLower(value), strings.ToLower(blacklistedString)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only tests when GOOGLE_API_KEY is set
|
// Only tests when GOOGLE_API_KEY is set
|
||||||
// Returns true when it spam
|
// Returns true when it spam
|
||||||
func checkUrls(urlsToCheck *[]string) bool {
|
func checkUrls(urlsToCheck []string) bool {
|
||||||
if len(appConfig.GoogleApiKey) < 1 || len(*urlsToCheck) == 0 {
|
if len(appConfig.GoogleApiKey) < 1 || len(urlsToCheck) == 0 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
sb, err := safebrowsing.NewSafeBrowser(safebrowsing.Config{
|
sb, err := safebrowsing.NewSafeBrowser(safebrowsing.Config{
|
||||||
|
@ -50,7 +49,7 @@ func checkUrls(urlsToCheck *[]string) bool {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
allThreats, err := sb.LookupURLs(*urlsToCheck)
|
allThreats, err := sb.LookupURLs(urlsToCheck)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,13 +13,13 @@ func Test_checkBlacklist(t *testing.T) {
|
||||||
}
|
}
|
||||||
t.Run("Allowed values", func(t *testing.T) {
|
t.Run("Allowed values", func(t *testing.T) {
|
||||||
prepare()
|
prepare()
|
||||||
if checkBlacklist(&[]string{"Hello", "How are you?"}) == true {
|
if checkBlacklist([]string{"Hello", "How are you?"}) == true {
|
||||||
t.Error()
|
t.Error()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
t.Run("Forbidden values", func(t *testing.T) {
|
t.Run("Forbidden values", func(t *testing.T) {
|
||||||
prepare()
|
prepare()
|
||||||
if checkBlacklist(&[]string{"How are you?", "Hello TeSt1"}) == false {
|
if checkBlacklist([]string{"How are you?", "Hello TeSt1"}) == false {
|
||||||
t.Error()
|
t.Error()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
Reference in New Issue