Compare commits

...

2 Commits

Author SHA1 Message Date
e3e22343e9
Lisää README.md 2023-12-17 21:45:30 +02:00
8432e0dfb2
Korjaa kirjoitusvirhe 'receive' komennossa 2023-12-17 21:45:04 +02:00
2 changed files with 69 additions and 4 deletions

65
README.md Normal file
View File

@ -0,0 +1,65 @@
# Tiedote.md
Tiedote.md on yksinkertainen massasähköpostijärjestelmä, joka perustuu Gittiin,
Pandocin markdowniin ja sähköpostiin.
## Kehittäminen
Kehitysympäristön saa luotua helposti komennolla `guix shell`. Muutoksia
koodiin hallitaan Git-versionhallintatyökalulla ja muutosehdotuksia voi
[lähettää `git send-email`:n avulla](https://git-send-email.io/) osoitteeseen
<admin@mail.olarinmaensamoojat.fi> tai Gitean avulla.
## Asentaminen
Helpoin tapa asentaa tiedote.md on lisätä alla oleva kanava [Guix:n
kanavalistaan](https://guix.gnu.org/manual/en/guix.html#Specifying-Additional-Channels).
```
(channel
(name 'tiedote.md)
(url "https://git.olarinmaensamoojat.fi/OMS/tiedote.md.git")
(branch "main")
(introduction
(make-channel-introduction
"d9157e9e8aa78363d14344293d6a0bc47a8d5a7b"
(openpgp-fingerprint
"A0C9 1947 734F 076F 5F08 E9FF 257D 284A 2A1D 3A32"))))
```
Tämän jälkeen ajetun `guix pull` -komennon jälkeen tiedote.md on saatavilla
tiedote-md nimisenä pakettina kaikkialla Guixissa.
Koodin voi myös kääntää käsin Haskellin `cabal`-infrastruktuurin avulla.
## Ajaminen
Tiedote.md koostuu kahdesta osasta: palvelimesta ja sähköpostin toimittajasta.
Sähköpostin toimittaja vastaanottaa sähköpostit ja toimittaa ne palvelimelle
käsiteltäväksi. Palvelin vastaa kaikesta kirjanpidosta, sähköpostien
lähettämisestä ja Git-tietovaraston päivittämisestä, kun se saa muutoksista
ilmoituksen HTTP POST -pyyntönä (esim. Git-palvelun webhookista).
Palvelimen voi käynnistää komennolla `tiedote.md server`. Mahdolliset asetukset
saa listattua lisäämällä komentoon `--help` valitsimen. `--address`
valitsimesta tulee huomata, että osoitteessa voi käyttää vain ASCII-merkkejä
(ks. [#15](https://git.olarinmaensamoojat.fi/OMS/tiedote.md/issues/15)).
Sähköpostin lähettämiseen tarvitaan `sendmail`-yhteensopiva MTA (mail transfer
agent, sähköpostin välitysohjelma), jollaisen useimmat sähköpostipalvelimet
tarjoavat. Jos tiedote.md:n palvelimella ei ole omaa sähköpostipalvelinta, voi
tähän käyttää [`msmtp`:tä](https://marlam.de/msmtp/).
Sähköposti saapuu tiedote.md:n tietoon niin, että se annetaan komennon
`tiedote.md receive` syötteeksi (tarkista, että asetusvalitsimet vastaavat
palvelimen asetuksia). Tämä on yleensä helppo automatisoida
`.forward`-tiedostolla seuraavankaltaisella rivillä, jos tiedote.md on
palvelimella, jolle toimitetaan tiedote.md:lle tulevat sähköpostit.
```
|/path/to/tiedote.md receive
```
Muissa tapauksissa joutuu todennekäisesti kirjoittamaan skriptin, joka hakee
sähköpostit jostain muualta tai toimittaa ne esim. `ssh`:n yli
`tiedote.md receive`:lle.

View File

@ -59,15 +59,15 @@ printStateMain socket = do
printState acid
data Config = Config { socketPath :: FilePath, mail :: Mailbox, sendmailCommand :: String, runMode :: RunMode } deriving Show
data RunMode = Server { repoPath :: FilePath, portNumber :: Int } | Recieve | Print deriving Show
data RunMode = Server { repoPath :: FilePath, portNumber :: Int } | Receive | Print deriving Show
config :: Maybe Mailbox -> Parser Config
config mail = Config
<$> strOption (long "socket" <> short 's' <> metavar "FILE" <> value "/run/tiedote.md/acid.socket" <> showDefault <> help "Path for database socket")
<*> option readMailbox (long "address" <> short 'a' <> metavar "EMAIL" <> maybe mempty value mail <> help "Email address to send and recieve mail")
<*> option readMailbox (long "address" <> short 'a' <> metavar "EMAIL" <> maybe mempty value mail <> help "Email address to send and receive mail")
<*> strOption (long "sendmail" <> short 'm' <> metavar "FILE" <> value "sendmail" <> help "Sendmail command")
<*> hsubparser (command "server" (info serverCommand (progDesc "Run the server"))
<> command "recieve" (info (pure Recieve) (progDesc "Recieve an email"))
<> command "receive" (info (pure Receive) (progDesc "Receive an email"))
<> command "state" (info (pure Print) (progDesc "Print the server's current state")))
serverCommand :: Parser RunMode
@ -88,6 +88,6 @@ main = do
sendmailPath <- maybe (throwIO $ FileNotFoundError $ sendmailCommand args) pure =<<
findExecutable (sendmailCommand args)
case args of
Config {runMode = Recieve, ..} -> clientMain (SockAddrUnix socketPath) mail sendmailPath
Config {runMode = Receive, ..} -> clientMain (SockAddrUnix socketPath) mail sendmailPath
Config {runMode = Print, ..} -> printStateMain (SockAddrUnix socketPath)
Config {runMode = Server {..}, ..} -> serverMain (SockAddrUnix socketPath) mail repoPath sendmailPath portNumber