~ubuntu-branches/ubuntu/saucy/luakit/saucy-proposed

« back to all changes in this revision

Viewing changes to .pc/debian-changes-2011.07.22-1/lib/cookies.lua

  • Committer: Bazaar Package Importer
  • Author(s): Clint Adams
  • Date: 2011-07-26 14:36:08 UTC
  • Revision ID: james.westby@ubuntu.com-20110726143608-elctsivefctyqsqi
Tags: 2011.07.22-2
Change WebKitGTK+ build dependency to libwebkitgtk-dev.  closes:
#635418.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
------------------------------------------------------------
2
 
------------------------------------------------------------
3
 
 
4
 
require "math"
5
 
local string = string
6
 
local print = print
7
 
local ipairs = ipairs
8
 
local lousy = require "lousy"
9
 
local capi = { luakit = luakit, soup = soup, sqlite3 = sqlite3, timer = timer }
10
 
local time, floor = luakit.time, math.floor
11
 
 
12
 
module "cookies"
13
 
 
14
 
lousy.signal.setup(_M, true)
15
 
 
16
 
function micro()
17
 
    return floor(time() * 1e6)
18
 
end
19
 
 
20
 
local checktime = 0
21
 
 
22
 
local checktimer = capi.timer{ interval = 60e3 }
23
 
 
24
 
db = capi.sqlite3{ filename = capi.luakit.data_dir .. "/cookies.db" }
25
 
db:exec("PRAGMA synchronous = OFF; PRAGMA secure_delete = 1;")
26
 
 
27
 
create_table = [[
28
 
CREATE TABLE IF NOT EXISTS moz_cookies (
29
 
    id INTEGER PRIMARY KEY,
30
 
    name TEXT,
31
 
    value TEXT,
32
 
    host TEXT,
33
 
    path TEXT,
34
 
    expiry INTEGER,
35
 
    lastAccessed INTEGER,
36
 
    isSecure INTEGER,
37
 
    isHttpOnly INTEGER
38
 
);]]
39
 
 
40
 
query_all_since = [[SELECT id, name, value, host AS domain, path,
41
 
    expiry AS expires, isSecure AS secure, isHttpOnly AS http_only
42
 
FROM moz_cookies
43
 
WHERE lastAccessed >= %d;]]
44
 
 
45
 
query_insert = [[INSERT INTO moz_cookies
46
 
VALUES(NULL, %s, %s, %s, %s, %d, %d, %d, %d);]]
47
 
 
48
 
query_expire = [[UPDATE moz_cookies
49
 
SET expiry=0, lastAccessed=%d
50
 
WHERE host=%s AND name=%s AND path=%s;]]
51
 
 
52
 
query_delete = [[DELETE FROM moz_cookies
53
 
WHERE host=%s AND name=%s AND path=%s;]]
54
 
 
55
 
query_delete_expired = [[DELETE FROM moz_cookies
56
 
WHERE expiry == 0 AND lastAccessed < %d;]]
57
 
 
58
 
query_delete_session = [[DELETE FROM moz_cookies
59
 
WHERE expiry == -1;]]
60
 
 
61
 
db:exec(create_table)
62
 
 
63
 
function load_new_cookies(purge)
64
 
    local ctime = micro()
65
 
 
66
 
    -- Delete all expired cookies older than 90 seconds
67
 
    if purge ~= false then
68
 
        db:exec(string.format(query_delete_expired, ctime - 90e6))
69
 
    end
70
 
 
71
 
    -- Get new cookies from the db
72
 
    local cookies = db:exec(string.format(query_all_since, checktime))
73
 
 
74
 
    -- Update checktime for next run
75
 
    checktime = ctime
76
 
 
77
 
    -- Convert query results into suitable cookie tables
78
 
    for i, c in ipairs(cookies) do
79
 
        c.secure = c.secure == "1"
80
 
        c.http_only = c.http_only == "1"
81
 
    end
82
 
 
83
 
    -- Add new cookies to the cookiejar
84
 
    if cookies[1] then
85
 
        capi.soup.add_cookies(cookies)
86
 
    end
87
 
end
88
 
 
89
 
capi.soup.add_signal("cookie-changed", function (old, new)
90
 
    local e = lousy.util.sql_escape
91
 
    if new then
92
 
        -- Delete all previous matching/expired cookies.
93
 
        db:exec(string.format(query_delete,
94
 
            e(new.domain), -- WHERE = host
95
 
            e(new.name), -- WHERE = name
96
 
            e(new.path))) -- WHERE = path
97
 
 
98
 
        -- Insert new cookie
99
 
        db:exec(string.format(query_insert,
100
 
            e(new.name), -- name
101
 
            e(new.value), -- value
102
 
            e(new.domain), -- host
103
 
            e(new.path), -- path
104
 
            new.expires or -1, -- expiry
105
 
            micro(), -- lastAccessed
106
 
            new.secure and 1 or 0, -- isSecure
107
 
            new.http_only and 1 or 0)) -- isHttpOnly
108
 
 
109
 
    -- Expire old cookie
110
 
    elseif old then
111
 
        db:exec(string.format(query_expire,
112
 
            micro(), -- lastAccessed
113
 
            e(old.domain), -- WHERE = host
114
 
            e(old.name), -- WHERE = name
115
 
            e(old.path))) -- WHERE = path
116
 
    end
117
 
end)
118
 
 
119
 
capi.soup.add_signal("request-started", function (uri)
120
 
    -- Load all new cookies since last update
121
 
    load_new_cookies(false)
122
 
end)
123
 
 
124
 
checktimer:add_signal("timeout", load_new_cookies)
125
 
checktimer:start()
126