struct
val baseUrl = "https://join.hcoop.net/join/"
-val portalUrl = "https://members2.hcoop.net/portal/"
+val portalUrl = Config.urlPrefix
open Sql
fun init () =
let
- val c = C.conn "dbname='hcoop_hcoop'"
+ val c = C.conn Config.dbstring
in
db := SOME c;
C.dml c "BEGIN";
before TextIO.closeIn inf
end
-fun readTosBody () = readFile "/home/hcoop/public_html/tos.body.html"
-fun readTosAgree () = readFile "/home/hcoop/public_html/tos.agree.html"
-fun readTosMinorAgree () = readFile "/home/hcoop/public_html/tos.agree.minor.html"
+fun readTosBody () = readFile (Config.staticFilesRoot ^ "tos.body.html")
+fun readTosAgree () = readFile (Config.staticFilesRoot ^ "tos.agree.html")
+fun readTosMinorAgree () = readFile (Config.staticFilesRoot ^ "tos.agree.minor.html")
fun sendMail (to, subj, intro, footer, id) =
let
C.stringFromSql other)
| _ => raise Fail "Bad sendMail row"
- val proc = Unix.execute ("/usr/sbin/exim4", ["-t"])
+ val proc = Unix.execute ("/usr/sbin/sendmail", ["-t"])
fun mwrite s = TextIO.output (Unix.textOutstreamOf proc, s)
in
mwrite ("From: Hcoop Application System <join@hcoop.net>\nTo: ");
fun validDomain s =
size s > 0 andalso size s < 100 andalso List.all validHost (String.fields (fn ch => ch = #".") s)
-fun validUser s =
- size s > 0 andalso size s < 50 andalso List.all
- (fn ch => isIdent ch orelse ch = #"." orelse ch = #"_" orelse ch = #"-" orelse ch = #"+")
- (String.explode s)
+fun validUsername name =
+ size name <= 12
+ andalso size name >= 2
+ andalso Char.isLower (String.sub (name, 0))
+ andalso CharVector.all Char.isAlphaNum name
fun validEmailUser s =
size s > 0 andalso size s < 50 andalso List.all
| _ => false)
fun userExists name =
- (Posix.SysDB.getpwnam name; true) handle OS.SysErr _ => false
+ case C.oneOrNoRows (getDb ()) ($`SELECT id FROM WebUser WHERE name = ^(C.stringToSql name)`) of
+ SOME _ => true
+ | NONE => (Posix.SysDB.getpwnam name; true) handle OS.SysErr _ => false
fun confirm (id, passwd) =
let
| NONE => false
end
+fun appUserName id =
+ case C.oneOrNoRows (getDb ()) ($`SELECT name
+ FROM MemberApp
+ WHERE id = ^(C.intToSql id)`) of
+ SOME [name] => C.stringFromSql name
+ | NONE => raise Fail "Membership application not found"
+
end