petit ménage
This commit is contained in:
129
mailblog.go
129
mailblog.go
@@ -1,18 +1,20 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func slash(w http.ResponseWriter, r *http.Request) {
|
||||
//go:embed html/index.tmpl
|
||||
var indexTemplate string
|
||||
|
||||
}
|
||||
//go:embed html/entry.tmpl
|
||||
var entryTemplate string
|
||||
|
||||
func main() {
|
||||
|
||||
@@ -38,56 +40,7 @@ func main() {
|
||||
if len(args) > 0 {
|
||||
switch args[0] {
|
||||
case "configure":
|
||||
|
||||
configuration.Title, err = prompt("Blog Title", nil, "", configuration.Title, false)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
configuration.ShortName, err = prompt("Blog Short Name (only letters and numbers, no special signes)", nil, "blog", configuration.ShortName, false)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if !regexp.MustCompile(`^[a-zA-Z0-9]+$`).MatchString(configuration.ShortName) {
|
||||
log.Fatal("Short Name invalid")
|
||||
}
|
||||
|
||||
configuration.WWWRoot, err = prompt("Web Root directory", nil, fmt.Sprintf("/var/www/html/%s", configuration.ShortName), configuration.WWWRoot, false)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
configuration.MailBox.Server, err = prompt("IMAP Server Hostname or IP", nil, "", configuration.MailBox.Server, false)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
configuration.MailBox.Port, err = prompt("IMAP Server Port", nil, "993", configuration.MailBox.Port, false)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
_, err = strconv.ParseUint(configuration.MailBox.Port, 10, 16)
|
||||
if err != nil {
|
||||
log.Fatal("IMAP Server Port invalid")
|
||||
}
|
||||
configuration.MailBox.User, err = prompt("IMAP User Login", nil, "", configuration.MailBox.User, false)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
configuration.MailBox.Password, err = prompt("IMAP User Password", nil, "", configuration.MailBox.Password, false)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
options := [...]string{"SSL/TLS", "StartTLS", "NoTLS"}
|
||||
configuration.MailBox.SSL, err = prompt("IMAP SSL/TLS", options[:], "SSL/TLS", configuration.MailBox.SSL, false)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
configuration.MailBox.InBox, err = prompt("IMAP INBOX", nil, "INBOX", configuration.MailBox.InBox, false)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
configuration.Prompt()
|
||||
file, err = os.Create(fmt.Sprintf("%s/.config/mailblog.json", home))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
@@ -108,30 +61,70 @@ func main() {
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer mb.Close()
|
||||
|
||||
folders, err := mb.ListFolders()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Println(folders)
|
||||
msgs, err := mb.GetMessages()
|
||||
messages, err := mb.GetMessages()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
for _, m := range msgs {
|
||||
log.Println(m.Id)
|
||||
log.Println(m.Title)
|
||||
log.Println(m.Author)
|
||||
log.Println("Text version")
|
||||
log.Println(m.Text)
|
||||
log.Println("HTML version")
|
||||
log.Println(m.HTML)
|
||||
log.Println(m.Id)
|
||||
log.Println()
|
||||
}
|
||||
/*
|
||||
for _, m := range msgs {
|
||||
log.Println(m.Id)
|
||||
log.Println(m.Title)
|
||||
log.Println(m.Author)
|
||||
log.Println("Text version")
|
||||
log.Println(m.Text)
|
||||
log.Println("HTML version")
|
||||
log.Println(m.HTML)
|
||||
log.Println(m.Id)
|
||||
log.Println()
|
||||
}
|
||||
*/
|
||||
http.HandleFunc("GET /{$}",
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
tpl, err := template.New("index").Parse(indexTemplate)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
err = tpl.ExecuteTemplate(w, "index", messages)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
mb.Close()
|
||||
})
|
||||
http.HandleFunc("GET /post/{id}",
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
id := r.PathValue("id")
|
||||
log.Println("showing message:", id)
|
||||
for _, m := range messages {
|
||||
log.Println("Examining:", m.Id)
|
||||
if m.Id == id {
|
||||
tpl, err := template.New("entry").Parse(entryTemplate)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
err = tpl.ExecuteTemplate(w, "entry", m)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
w.WriteHeader(404)
|
||||
|
||||
})
|
||||
|
||||
http.HandleFunc("GET /favicon.ico",
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
log.Println("favicon.ico")
|
||||
w.WriteHeader(200)
|
||||
})
|
||||
|
||||
http.HandleFunc("/", slash)
|
||||
http.ListenAndServe("0.0.0.0:8080", nil)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user