diff --git a/forum.nim b/forum.nim
index 0cbbe0a..3c00905 100644
--- a/forum.nim
+++ b/forum.nim
@@ -379,6 +379,22 @@ proc resetPassword(c: var TForumData, nick, antibot: string): bool =
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) =
if not c.req.cookies.hasKey("sid"): return
let pass = c.req.cookies["sid"]
@@ -392,10 +408,17 @@ proc checkLoggedIn(c: var TForumData) =
c.req.ip, pass)
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.email = ||row[1]
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
db.exec(sql"update person set lastOnline = DATETIME('now') where id = ?",
c.userid)
@@ -403,12 +426,6 @@ proc checkLoggedIn(c: var TForumData) =
else:
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) =
const query = sql"update thread set views = views + 1 where id = ?"
exec(db, query, $c.threadId)
@@ -680,14 +697,8 @@ proc login(c: var TForumData, name, pass: string): bool =
var success = false
for row in fastRows(db, query, name):
if row[2] == makePassword(pass, row[4], row[2]):
- case row[6]
- of "": discard
- 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])
+ if row[6].len > 0:
+ return c.setError("name", getBanErrorMsg(row[6]))
c.userid = row[0]
c.username = row[1]
c.userpass = row[2]
diff --git a/main.tmpl b/main.tmpl
index 3d182c0..3590b8d 100644
--- a/main.tmpl
+++ b/main.tmpl
@@ -119,7 +119,7 @@
id="hdnLogin" value="Login" />
Reset password
- #if c.errorMsg != "" and c.req.pathInfo.normalizeUri == "/dologin":
+ #if c.errorMsg != "":
$c.errorMsg
#end if