Skip to content

Commit

Permalink
Add posibility to send mails when new protocoll is created
Browse files Browse the repository at this point in the history
  • Loading branch information
philmacfly committed Nov 20, 2024
1 parent 077f71a commit 9fcc824
Show file tree
Hide file tree
Showing 8 changed files with 112 additions and 14 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@

# Dependency directories (remove the comment below to include it)
# vendor/
*.toml
*.toml
*.txt
.vscode/
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,4 @@ It asumes that the seilfahrt binary is in /usr/local/bin and the config file is
Copy the seilfahrt.service into the /etc/systemd/system folder
Then reload the services with sudo systemctl daemon-reload
Then enable seilfahrt with sudo systemctl enable seilfahrt.service
Then start seilfahrt with sudo systemctl start seilfahrt.service
86 changes: 74 additions & 12 deletions cmd/seilfahrt/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"cgt.name/pkg/go-mwclient"
"github.com/Nerdbergev/seilfahrt/internal/htmltemplates"
"github.com/pelletier/go-toml"
gomail "gopkg.in/mail.v2"
)

type Config struct {
Expand All @@ -26,13 +27,25 @@ type Config struct {
ConsumerSecret string
AccessToken string
AccessSecret string
SendMail bool
MailAdress string
MailPassword string
MailServer string
MailPort int
MailRecipient string
MailSubject string
MailTemplate string
}

type ResponseData struct {
Title string
Message string
}

type MailContent struct {
Link string
}

var hedgedocPad string
var configPath string
var port int
Expand Down Expand Up @@ -114,15 +127,15 @@ func createPageTitlefromDate(date string) (string, error) {
return result, nil
}

func createPage(filepath string, conf Config) error {
func createPage(filepath string, conf Config) (string, error) {
file, err := os.OpenFile(filepath, os.O_RDWR, 0600)
if err != nil {
return errors.New("Error opening file: " + err.Error())
return "", errors.New("Error opening file: " + err.Error())
}
defer file.Close()
rawBytes, err := io.ReadAll(file)
if err != nil {
return errors.New("Error reading file: " + err.Error())
return "", errors.New("Error reading file: " + err.Error())
}
var plenumname string
var plenumsnummer string
Expand All @@ -137,7 +150,7 @@ func createPage(filepath string, conf Config) error {
if strings.Contains(line, "| Datum") {
plenumname, err = createPageTitlefromDate(lines[i+1])
if err != nil {
return errors.New("Error creating Pagetitle from Date:" + err.Error())
return "", errors.New("Error creating Pagetitle from Date:" + err.Error())
}
foundcount = foundcount + 1
}
Expand All @@ -146,7 +159,7 @@ func createPage(filepath string, conf Config) error {
}
}
if plenumname == "" || plenumsnummer == "" {
return errors.New("error finding plenumname or plenumsnummer")
return "", errors.New("error finding plenumname or plenumsnummer")
}
fmt.Println("Plenumname: ", plenumname)
fmt.Println("Creating Plenumspage with Name:", plenumname, "and Number:", plenumsnummer)
Expand All @@ -155,12 +168,12 @@ func createPage(filepath string, conf Config) error {
// and your HTTP User-Agent. Try to use a meaningful User-Agent.
w, err := mwclient.New(conf.WikiURL, "seilfahrt")
if err != nil {
return errors.New("Error creating client:" + err.Error())
return "", errors.New("Error creating client:" + err.Error())
}

err = w.OAuth(conf.ConsumerToken, conf.ConsumerSecret, conf.AccessToken, conf.AccessSecret)
if err != nil {
return errors.New("Error while oauth:" + err.Error())
return "", errors.New("Error while oauth:" + err.Error())
}

pageCreateParameters := map[string]string{
Expand All @@ -171,11 +184,12 @@ func createPage(filepath string, conf Config) error {

err = w.Edit(pageCreateParameters)
if err != nil {
return errors.New("Error creating page:" + err.Error())
return "", errors.New("Error creating page:" + err.Error())
}

fmt.Println("Page created")
fmt.Println("https://wiki.nerdberg.de/" + plenumname)
pagename := "https://wiki.nerdberg.de/" + plenumname
fmt.Println(pagename)

fmt.Println("Updating Plenetarium page")
linkline := fmt.Sprintf("* [[%v]] #%v\n", plenumname, plenumsnummer)
Expand All @@ -187,11 +201,51 @@ func createPage(filepath string, conf Config) error {

err = w.Edit(pageEditParameters)
if err != nil {
return errors.New("Error updating page:" + err.Error())
return "", errors.New("Error updating page:" + err.Error())
}

fmt.Println("Page updated")

return pagename, nil
}

func SendMail(pageName string, conf Config) error {
mailcontent := MailContent{
Link: pageName,
}

tmpl, err := template.ParseFiles(conf.MailTemplate)
if err != nil {
return errors.New("Error parsing template:" + err.Error())
}
var body strings.Builder
err = tmpl.Execute(&body, mailcontent)
if err != nil {
return errors.New("Error executing template:" + err.Error())
}

m := gomail.NewMessage()

// Set E-Mail sender
m.SetHeader("From", conf.MailAdress)

// Set E-Mail receivers
m.SetHeader("To", conf.MailRecipient)

// Set E-Mail subject
m.SetHeader("Subject", conf.MailSubject)

// Set E-Mail body. You can set plain text or html with text/html
m.SetBody("text/plain", body.String())

// Settings for SMTP server
d := gomail.NewDialer(conf.MailServer, 587, conf.MailAdress, conf.MailPassword)

// Now send E-Mail
if err := d.DialAndSend(m); err != nil {
return errors.New("Error sending mail:" + err.Error())
}

return nil
}

Expand Down Expand Up @@ -223,12 +277,20 @@ func submitHandler(w http.ResponseWriter, r *http.Request) {
returnError(w, "Error converting: "+err.Error())
return
}
err = createPage(wikiFile, conf)
pagename, err := createPage(wikiFile, conf)
if err != nil {
returnError(w, "Error creating wikipage: "+err.Error())
return
}

if conf.SendMail {
err := SendMail(pagename, conf)
if err != nil {
returnError(w, "Error sending mail: "+err.Error())
return
}
}

data = ResponseData{
Title: "Success",
Message: "Page created",
Expand Down Expand Up @@ -274,7 +336,7 @@ func main() {
if err != nil {
log.Fatal("Error converting: ", err)
}
err = createPage(wikiFile, conf)
_, err = createPage(wikiFile, conf)
if err != nil {
log.Fatal("Error creating wikipage: ", err)
}
Expand Down
10 changes: 9 additions & 1 deletion config/config.toml.example
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,12 @@ ConsumerToken = ""
ConsumerSecret = ""
AccessToken = ""
AccessSecret = ""
PlenenPageId = "28"
PlenenPageId = "28"
SendMail = true
MailAdress = ""
MailPassword = ""
MailServer = ""
MailPort = 465
MailRecipient = "[email protected]"
MailSubject = "New Protokoll"
MailTemplate = "/etc/seilfahrt/mail-template.txt"
6 changes: 6 additions & 0 deletions config/mail-template.txt.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Hallo liebe Wesen,

dies ist eine automatisiserte Nachricht um euch zu informieren das es ein neues Plenums Protokoll gibt:
{{.Link}}

Gruß euer Vorstand
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ go 1.21
require (
cgt.name/pkg/go-mwclient v1.3.0
github.com/pelletier/go-toml v1.9.5
gopkg.in/mail.v2 v2.3.1
)

require (
github.com/antonholmquist/jason v1.0.0 // indirect
github.com/mrjones/oauth v0.0.0-20190623134757-126b35219450 // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
)
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,7 @@ github.com/mrjones/oauth v0.0.0-20190623134757-126b35219450 h1:j2kD3MT1z4PXCiUll
github.com/mrjones/oauth v0.0.0-20190623134757-126b35219450/go.mod h1:skjdDftzkFALcuGzYSklqYd8gvat6F1gZJ4YPVbkZpM=
github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
13 changes: 13 additions & 0 deletions init/seilfahrt.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[Unit]
Description=Create Wiki pages from plenum protocolls

[Service]
User=root
WorkingDirectory=/etc/seilfahrt
ExecStart=/usr/local/bin/seilfahrt -c config.toml -port 80 -web
# optional items below
Restart=always
RestartSec=3

[Install]
WantedBy=network.target

0 comments on commit 9fcc824

Please sign in to comment.