25 lines
1.1 KiB
Plaintext
25 lines
1.1 KiB
Plaintext
Needs["DatabaseLink`"];
|
|
connectDb[dbUser_, dbPass_, dbUrl_] :=
|
|
OpenSQLConnection[JDBC["mysql", dbUrl], "Username" -> dbUser,
|
|
"Password" -> dbPass];
|
|
createUser::nameTaken = "The username '`1`' is already taken.";
|
|
createUser[dbUser_, dbPass_, dbUrl_, user_, pass_] :=
|
|
Module[{db = connectDb[dbUser, dbPass, dbUrl],
|
|
salt = RandomChoice[Range[32, 127], 16]},
|
|
If[MemberQ[SQLSelect[db, "users", {"username"}], {user}],
|
|
Message[createUser::nameTaken, user]; Return[]];
|
|
SQLInsert[db,
|
|
"users", {"username", "pass_salt", "pass_md5"}, {user,
|
|
SQLBinary[salt],
|
|
SQLBinary[
|
|
IntegerDigits[Hash[FromCharacterCode[salt] <> pass, "MD5"], 256,
|
|
16]]}]; CloseSQLConnection[db];];
|
|
authenticateUser[dbUser_, dbPass_, dbUrl_, user_, pass_] :=
|
|
Module[{db = connectDb[dbUser, dbPass, dbUrl], rtn},
|
|
rtn = MemberQ[SQLSelect[db, "users", {"username"}], {user}] &&
|
|
Module[{data =
|
|
SQLSelect[db, "users", {"username", "pass_salt", "pass_md5"},
|
|
SQLColumn["username"] == user][[1]]},
|
|
Hash[FromCharacterCode[data[[2, 1]]] <> pass, "MD5"] ==
|
|
FromDigits[data[[3, 1]], 256]]; CloseSQLConnection[db]; rtn];
|