diff options
author | pixel <pixel> | 2008-07-23 16:08:10 +0000 |
---|---|---|
committer | pixel <pixel> | 2008-07-23 16:08:10 +0000 |
commit | cf7899c250bb58144702053a864fa482dae4f451 (patch) | |
tree | a30bbe1742a97901736afb320b49ed0ab4833eed | |
parent | eb511324fcb7cc1b96375f2047d98c2395ee949b (diff) |
Creating httplib.lua
-rw-r--r-- | lib/httplib.lua | 83 |
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 |