Compare commits
2 Commits
3be7c4a778
...
e3e22343e9
Author | SHA1 | Date | |
---|---|---|---|
e3e22343e9 | |||
8432e0dfb2 |
65
README.md
Normal file
65
README.md
Normal 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.
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user