Fixes bcrypt.

This commit is contained in:
Dominik Picheta 2014-12-07 19:09:36 +00:00
commit 4f059984ad

View file

@ -223,12 +223,13 @@ proc makeSalt(): string =
except IOError: except IOError:
result = randomSalt() result = randomSalt()
proc makePassword(password, salt: string): string = proc makePassword(password, salt: string, comparingTo = ""): string =
## Creates an MD5 hash by combining password and salt. ## Creates an MD5 hash by combining password and salt.
when defined(windows): when defined(windows):
result = getMD5(salt & getMD5(password)) result = getMD5(salt & getMD5(password))
else: else:
result = hash(getMD5(salt & getMD5(password)), genSalt(8)) let salt = if comparingTo != "": comparingTo else: genSalt(8)
result = hash(getMD5(salt & getMD5(password)), comparingTo)
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
template `||`(x: expr): expr = (if not isNil(x): x else: "") template `||`(x: expr): expr = (if not isNil(x): x else: "")
@ -466,7 +467,7 @@ proc login(c: var TForumData, name, pass: string): bool =
return c.setError("name", "Username cannot be nil.") return c.setError("name", "Username cannot be nil.")
var success = false var success = false
for row in fastRows(db, query, name): for row in fastRows(db, query, name):
if row[2] == makePassword(pass, row[4]): if row[2] == makePassword(pass, row[4], row[2]):
c.userid = row[0] c.userid = row[0]
c.username = row[1] c.username = row[1]
c.userpass = row[2] c.userpass = row[2]