SQL-based authentication: Difference between revisions
Content added Content deleted
(Added Mathematica) |
|||
Line 431: | Line 431: | ||
} |
} |
||
}</lang> |
}</lang> |
||
=={{haeder|Mathematica}}== |
|||
{{libheader|DatabaseLink`}} |
|||
<lang Mathematica>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];</lang> |
|||
=={{header|Objeck}}== |
=={{header|Objeck}}== |