annotate mod_couchdb/couchdb/mod_couchdb.lua @ 735:c1b0f0c33c6a

mod_archive: Fix hour offset in stored message date os.date expect a timestamp in local time, that is subject to daylight saving. But since we pass an UTC timestamp to os.date one hour is (wrongly) added in the summer. The only sensible thing is to call the os.date only once with the ! parametter. And then parsing this sting to get the utc_timestamp. Calling os.date with an UTC timestamp is not possible, and calling os.date twice without timestamp could give different results.
author Olivier Goffart <ogoffart@woboq.com>
date Wed, 04 Jul 2012 13:49:57 +0200
parents 5689ffaf97df
children 2469f779b3f7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
229
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
1
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
2 local http = require "socket.http";
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
3 local url = require "socket.url";
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
4
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
5 local couchapi = module:require("couchdb/couchapi");
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
6 local json = module:require("couchdb/json");
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
7
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
8 local couchdb_url = assert(module:get_option("couchdb_url"), "Option couchdb_url not specified");
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
9 local db = couchapi.db(couchdb_url);
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
10
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
11 local function couchdb_get(key)
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
12 local a,b = db:doc(key):get()
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
13 print(json.encode(a));
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
14 if b == 404 then return nil; end
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
15 if b == 200 then b = nil; end
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
16 return a.payload,b;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
17 end
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
18
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
19 local function couchdb_put(key, value)
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
20 local a,b = db:doc(key):get();
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
21 return db:doc(key):put({ payload = value, _rev = a and a._rev });
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
22 end
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
23
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
24 local st = require "util.stanza";
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
25
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
26 local handlers = {};
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
27
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
28 handlers.accounts = {
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
29 get = function(self, user)
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
30 return couchdb_get(self.host.."/"..user.."/account");
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
31 end;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
32 set = function(self, user, data)
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
33 return couchdb_put(self.host.."/"..user.."/account", data);
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
34 end;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
35 };
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
36 handlers.vcard = {
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
37 get = function(self, user)
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
38 return couchdb_get(self.host.."/"..user.."/vcard");
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
39 end;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
40 set = function(self, user, data)
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
41 return couchdb_put(self.host.."/"..user.."/vcard", data);
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
42 end;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
43 };
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
44 handlers.private = {
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
45 get = function(self, user)
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
46 return couchdb_get(self.host.."/"..user.."/private");
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
47 end;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
48 set = function(self, user, data)
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
49 return couchdb_put(self.host.."/"..user.."/private", data);
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
50 end;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
51 };
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
52 handlers.roster = {
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
53 get = function(self, user)
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
54 return couchdb_get(self.host.."/"..user.."/roster");
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
55 end;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
56 set = function(self, user, data)
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
57 return couchdb_put(self.host.."/"..user.."/roster", data);
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
58 end;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
59 };
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
60
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
61 -----------------------------
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
62 local driver = {};
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
63
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
64 function driver:open(datastore, typ)
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
65 local handler = handlers[datastore];
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
66 if not handler then return nil; end
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
67 local host = module.host;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
68 --local cache_key = host.." "..datastore;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
69 --if self.ds_cache[cache_key] then return self.ds_cache[cache_key]; end
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
70 local instance = setmetatable({ host = host, datastore = datastore }, { __index = handler });
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
71 --for key,val in pairs(handler) do
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
72 -- instance[key] = val;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
73 --end
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
74 --if instance.init then instance:init(); end
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
75 --self.ds_cache[cache_key] = instance;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
76 return instance;
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
77 end
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
78
5689ffaf97df mod_couchdb: Now added as a proper module using the new storage provider system.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
79 module:add_item("data-driver", driver);