Fix bans not working when user is already logged in.
This commit is contained in:
parent
da6bc1658e
commit
e1d68792a4
2 changed files with 27 additions and 16 deletions
41
forum.nim
41
forum.nim
|
|
@ -379,6 +379,22 @@ proc resetPassword(c: var TForumData, nick, antibot: string): bool =
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
proc logout(c: var TForumData) =
|
||||||
|
const query = sql"delete from session where ip = ? and password = ?"
|
||||||
|
c.username = ""
|
||||||
|
c.userpass = ""
|
||||||
|
exec(db, query, c.req.ip, c.req.cookies["sid"])
|
||||||
|
|
||||||
|
proc getBanErrorMsg(banValue: string): string =
|
||||||
|
case banValue
|
||||||
|
of "": return ""
|
||||||
|
of banReasonDeactivated:
|
||||||
|
return "Your account has been deactivated."
|
||||||
|
of banReasonEmailUnconfirmed:
|
||||||
|
return "You need to confirm your email first."
|
||||||
|
else:
|
||||||
|
return "You have been banned: " & banValue
|
||||||
|
|
||||||
proc checkLoggedIn(c: var TForumData) =
|
proc checkLoggedIn(c: var TForumData) =
|
||||||
if not c.req.cookies.hasKey("sid"): return
|
if not c.req.cookies.hasKey("sid"): return
|
||||||
let pass = c.req.cookies["sid"]
|
let pass = c.req.cookies["sid"]
|
||||||
|
|
@ -392,10 +408,17 @@ proc checkLoggedIn(c: var TForumData) =
|
||||||
c.req.ip, pass)
|
c.req.ip, pass)
|
||||||
|
|
||||||
let row = getRow(db,
|
let row = getRow(db,
|
||||||
sql"select name, email, admin from person where id = ?", c.userid)
|
sql"select name, email, admin, ban from person where id = ?", c.userid)
|
||||||
c.username = ||row[0]
|
c.username = ||row[0]
|
||||||
c.email = ||row[1]
|
c.email = ||row[1]
|
||||||
c.isAdmin = parseBool(||row[2])
|
c.isAdmin = parseBool(||row[2])
|
||||||
|
# Check ban status.
|
||||||
|
let banErrorMsg = getBanErrorMsg(||row[3])
|
||||||
|
if banErrorMsg.len > 0:
|
||||||
|
discard c.setError("name", banErrorMsg)
|
||||||
|
logout(c)
|
||||||
|
return
|
||||||
|
|
||||||
# Update lastOnline
|
# Update lastOnline
|
||||||
db.exec(sql"update person set lastOnline = DATETIME('now') where id = ?",
|
db.exec(sql"update person set lastOnline = DATETIME('now') where id = ?",
|
||||||
c.userid)
|
c.userid)
|
||||||
|
|
@ -403,12 +426,6 @@ proc checkLoggedIn(c: var TForumData) =
|
||||||
else:
|
else:
|
||||||
echo("SID not found in sessions. Assuming logged out.")
|
echo("SID not found in sessions. Assuming logged out.")
|
||||||
|
|
||||||
proc logout(c: var TForumData) =
|
|
||||||
const query = sql"delete from session where ip = ? and password = ?"
|
|
||||||
c.username = ""
|
|
||||||
c.userpass = ""
|
|
||||||
exec(db, query, c.req.ip, c.req.cookies["sid"])
|
|
||||||
|
|
||||||
proc incrementViews(c: var TForumData) =
|
proc incrementViews(c: var TForumData) =
|
||||||
const query = sql"update thread set views = views + 1 where id = ?"
|
const query = sql"update thread set views = views + 1 where id = ?"
|
||||||
exec(db, query, $c.threadId)
|
exec(db, query, $c.threadId)
|
||||||
|
|
@ -680,14 +697,8 @@ proc login(c: var TForumData, name, pass: string): bool =
|
||||||
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], row[2]):
|
if row[2] == makePassword(pass, row[4], row[2]):
|
||||||
case row[6]
|
if row[6].len > 0:
|
||||||
of "": discard
|
return c.setError("name", getBanErrorMsg(row[6]))
|
||||||
of banReasonDeactivated:
|
|
||||||
return c.setError("name", "Your account has been deactivated.")
|
|
||||||
of banReasonEmailUnconfirmed:
|
|
||||||
return c.setError("name", "You need to confirm your email first.")
|
|
||||||
else:
|
|
||||||
return c.setError("name", "You have been banned: " & row[6])
|
|
||||||
c.userid = row[0]
|
c.userid = row[0]
|
||||||
c.username = row[1]
|
c.username = row[1]
|
||||||
c.userpass = row[2]
|
c.userpass = row[2]
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@
|
||||||
id="hdnLogin" value="Login" />
|
id="hdnLogin" value="Login" />
|
||||||
</form>
|
</form>
|
||||||
<a id="passreset" href=${c.req.makeUri("/resetPassword")}>Reset password</a>
|
<a id="passreset" href=${c.req.makeUri("/resetPassword")}>Reset password</a>
|
||||||
#if c.errorMsg != "" and c.req.pathInfo.normalizeUri == "/dologin":
|
#if c.errorMsg != "":
|
||||||
<span class="error">$c.errorMsg</span>
|
<span class="error">$c.errorMsg</span>
|
||||||
#end if
|
#end if
|
||||||
<a href="${frontQuery}register" class="button"
|
<a href="${frontQuery}register" class="button"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue