123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- package main
- import (
- "log"
- "net/http"
- "os"
- "apiote.xyz/p/go-dirty"
- )
- type TyrConfig struct {
- ImapAddress string
- ImapUsername string
- ImapPassword string
- ImapFolderInbox string
- ImapFolderJunk string
- ImapFolderArchive string
- ImapFolderTrash string
- ImapFolderDrafts string
- ImapFolderQuarantine string
- ImapFolderSent string
- }
- type HermodrConfig struct {
- ImapAddress string
- ImapUsername string
- ImapPassword string
- ImapFolderInbox string
- ImapFolderRedirected string
- Recipient string
- SmtpServer string
- SmtpUsername string
- PublicKey string
- }
- type MimirConfig struct {
- ImapAddress string
- ImapUsername string
- ImapPassword string
- ImapInbox string
- RecipientTemplate string
- Categories []string
- ForwardAddress string
- PersonalAddress string
- SmtpAddress string
- SmtpSender string
- Companion string
- }
- type Config struct {
- Tyr TyrConfig
- Hermodr HermodrConfig
- Mimir MimirConfig
- }
- func readConfig() (Config, error) {
- file, err := os.Open("config.dirty")
- if err != nil {
- if os.IsNotExist(err) {
- return Config{}, err
- } else {
- log.Printf("error opening configuration %v\n", err)
- return Config{}, err
- }
- }
- defer file.Close()
- config := Config{}
- err = dirty.LoadStruct(file, &config)
- return config, err
- }
- func main() {
- config, err := readConfig()
- if err != nil {
- log.Fatalln(err)
- }
- //log.Printf("running with conifig\n%+v\n", config)
- db, err := migrate()
- if err != nil {
- log.Fatalln(err)
- }
- defer db.Close()
- log.Println("Migrated")
- switch os.Args[1] {
- case "hermodr":
- fallthrough
- case "hermóðr":
- hermodr(config)
- case "tyr":
- fallthrough
- case "týr":
- if len(os.Args) == 2 {
- tyr(db, config)
- } else {
- switch os.Args[2] {
- case "list":
- tyr_lists_locks(db)
- case "offend":
- if len(os.Args) == 3 {
- log.Fatalln("missing token")
- }
- tyr_release(db, config, os.Args[3], "*", config.Tyr.ImapFolderJunk)
- case "release":
- if len(os.Args) == 3 {
- log.Fatalln("missing token (and recipient)")
- }
- addressTo := ""
- if len(os.Args) == 4 {
- addressTo = "*"
- } else {
- addressTo = os.Args[4]
- }
- tyr_release(db, config, os.Args[3], addressTo, config.Tyr.ImapFolderInbox)
- }
- }
- case "mimir":
- fallthrough
- case "mímir":
- mimir(db, config)
- case "serve":
- http.HandleFunc("/tyr", tyr_serve)
- http.HandleFunc("/mimir", mimir_serve(db))
- http.HandleFunc("/mimir/", mimir_serve(db))
- e := http.ListenAndServe(":8081", nil)
- if e != nil {
- log.Println(e)
- }
- }
- }
|