summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorpixel <pixel>2008-07-23 16:08:10 +0000
committerpixel <pixel>2008-07-23 16:08:10 +0000
commitcf7899c250bb58144702053a864fa482dae4f451 (patch)
treea30bbe1742a97901736afb320b49ed0ab4833eed /lib
parenteb511324fcb7cc1b96375f2047d98c2395ee949b (diff)
Creating httplib.lua
Diffstat (limited to 'lib')
-rw-r--r--lib/httplib.lua83
1 files changed, 83 insertions, 0 deletions
diff --git a/lib/httplib.lua b/lib/httplib.lua
new file mode 100644
index 0000000..0fd7003
--- /dev/null
+++ b/lib/httplib.lua
@@ -0,0 +1,83 @@
+--[[
+
+/*
+ * Baltisot
+ * Copyright (C) 1999-2008 Nicolas "Pixel" Noble
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/* $Id: httplib.lua,v 1.1 2008-07-23 16:08:10 pixel Exp $ */
+
+]]--
+
+local session_expire = 60 * 60
+local session_cleanup_throttle = 60 * 10
+local last_cleanup = time()
+
+local sessions = {}
+
+local function generate_new_session()
+ local ticket = GenTicket()
+ sessions[ticket] = {
+ data = {},
+ access = time()
+ }
+end
+
+local function clean_sessions()
+ local t = time()
+
+ if last_cleanup <= (t - session_cleanup_throttle) then
+ local expired, k, v = t - session_expire
+
+ for k, v in pairs(sessions) do
+ if v.access <= expired then
+ sessions[k] = nil
+ end
+ end
+
+ last_cleanup = t
+ end
+end
+
+function get_session(req, res)
+ local sid
+
+ clean_sessions()
+
+ if req.headers.Cookie then
+ local cookie_strings = split(req.headers.Cookie, ";")
+ local cookies = {}
+ local k, v
+
+ for k, v in pairs(cookie_strings) do
+ local cname, cvalue = string.match(v, "(%w+)=(.+)")
+ cookies[cname] = cvalue
+ end
+ sid = cookies.sid
+ end
+
+ if not sid and not sessions[sid] then
+ sid = generate_new_session()
+ end
+
+ res.cookies_path = "/"
+ res.cookies = "sid=" .. sid
+
+ sessions[sid].access = time()
+
+ return sessions[sid].data, sid
+end