X-Git-Url: https://git.hcoop.net/bpt/portal.git/blobdiff_plain/9d1c0e98cf0324f769b9f05b83fe24c5cfcba7f6..104fbeb69b4ef3d77090a403b1a6d3c2681c578c:/mailinglist.sml diff --git a/mailinglist.sml b/mailinglist.sml dissimilarity index 99% index a74132b..37f31df 100644 --- a/mailinglist.sml +++ b/mailinglist.sml @@ -1,12 +1,41 @@ -structure MailingList = Request(struct - val table = "MailingList" - val adminGroup = "lists" - fun subject list = "Mailman list request: " ^ list - val template = "list" - val descr = "mailing list" - - fun body (mail, lst) = - (Mail.mwrite (mail, "List name: "); - Mail.mwrite (mail, lst); - Mail.mwrite (mail, "\n")) - end) +structure MailingList = +struct + +structure R = Request(struct + val table = "MailingList" + val adminGroup = "lists" + fun subject list = "Mailman list request: " ^ list + val template = "list" + val descr = "mailing list" + + fun body (mail, lst) = + (Mail.mwrite (mail, "List name: "); + Mail.mwrite (mail, lst); + Mail.mwrite (mail, "\n")) + end) +open R + +fun listWebHost name = + case String.tokens (fn ch => ch = #"@") name of + [user, dom] => + let + val mmf = Util.domainDir dom ^ "/mailman" + in + if Posix.FileSys.access (mmf, []) then + let + val inf = TextIO.openIn mmf + in + (case TextIO.inputLine inf of + NONE => {user = user, dom = dom, vhost = "<<>>"} + | SOME line => + case String.tokens (fn ch => Char.isSpace ch orelse ch = #":" orelse ch = #"'" orelse ch = #",") line of + [vhost, _] => {user = user, dom = dom, vhost = "http://" ^ vhost} + | _ => {user = user, dom = dom, vhost = "<<>>"}) + before TextIO.closeIn inf + end handle _ => {user = user, dom = dom, vhost = "<<>>"} + else + {user = user, dom = dom, vhost = "https://lists.hcoop.net"} + end + | _ => raise (Fail "Bad mailing list name") + +end