annotate mod_storage_mongodb/mod_storage_mongodb.lua @ 737:e4ea03b060ed

mod_archive: switch from/to The XEP-0136 is not very explicit about the meening of <from> and <to> elements, but the examples are clear: <from> means it comes from the user in the 'with' attribute of the collection. That is the opposite of what is currently implemented in that module. So for better compatibility with complient clients, this switch the 'from' and 'to' fields
author Olivier Goffart <ogoffart@woboq.com>
date Wed, 04 Jul 2012 14:08:43 +0200
parents bf2ad6d6c778
children 2469f779b3f7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
504
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
1 local next = next;
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
2 local setmetatable = setmetatable;
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
3
507
46f578da4ff0 mod_storage_mongodb: assert the configuration options
James Callahan <james@chatid.com>
parents: 506
diff changeset
4 local params = assert ( module:get_option("mongodb") , "mongodb configuration not found" );
504
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
5
509
bf2ad6d6c778 mod_storage_mongodb: (un)lock globals around require; only auth if we need to
James Callahan <james@chatid.com>
parents: 508
diff changeset
6 prosody.unlock_globals();
504
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
7 local mongo = require "mongo";
509
bf2ad6d6c778 mod_storage_mongodb: (un)lock globals around require; only auth if we need to
James Callahan <james@chatid.com>
parents: 508
diff changeset
8 prosody.lock_globals();
504
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
9
508
9831506dcfd6 mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents: 507
diff changeset
10 local conn
504
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
11
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
12 local keyval_store = {};
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
13 keyval_store.__index = keyval_store;
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
14
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
15 function keyval_store:get(username)
506
0e07810550c8 mod_storage_mongodb: Use _global as host when none provided
James Callahan <james@chatid.com>
parents: 505
diff changeset
16 local host = module.host or "_global";
0e07810550c8 mod_storage_mongodb: Use _global as host when none provided
James Callahan <james@chatid.com>
parents: 505
diff changeset
17 local store = self.store;
504
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
18
507
46f578da4ff0 mod_storage_mongodb: assert the configuration options
James Callahan <james@chatid.com>
parents: 506
diff changeset
19 -- The database name can't have a period in it (hence it can't be a host/ip)
504
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
20 local namespace = params.dbname .. "." .. host;
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
21 local v = { _id = { store = store ; username = username } };
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
22
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
23 local cursor , err = conn:query ( namespace , v );
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
24 if not cursor then return nil , err end;
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
25
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
26 local r , err = cursor:next ( );
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
27 if not r then return nil , err end;
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
28 return r.data;
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
29 end
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
30
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
31 function keyval_store:set(username, data)
506
0e07810550c8 mod_storage_mongodb: Use _global as host when none provided
James Callahan <james@chatid.com>
parents: 505
diff changeset
32 local host = module.host or "_global";
0e07810550c8 mod_storage_mongodb: Use _global as host when none provided
James Callahan <james@chatid.com>
parents: 505
diff changeset
33 local store = self.store;
504
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
34
507
46f578da4ff0 mod_storage_mongodb: assert the configuration options
James Callahan <james@chatid.com>
parents: 506
diff changeset
35 -- The database name can't have a period in it (hence it can't be a host/ip)
504
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
36 local namespace = params.dbname .. "." .. host;
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
37 local v = { _id = { store = store ; username = username } };
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
38
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
39 if next(data) ~= nil then -- set data
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
40 v.data = data;
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
41 return conn:insert ( namespace , v );
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
42 else -- delete data
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
43 return conn:remove ( namespace , v );
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
44 end;
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
45 end
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
46
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
47 local driver = { name = "mongodb" };
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
48
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
49 function driver:open(store, typ)
508
9831506dcfd6 mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents: 507
diff changeset
50 if not conn then
9831506dcfd6 mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents: 507
diff changeset
51 conn = assert ( mongo.Connection.New ( true ) );
9831506dcfd6 mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents: 507
diff changeset
52 assert ( conn:connect ( params.server ) );
509
bf2ad6d6c778 mod_storage_mongodb: (un)lock globals around require; only auth if we need to
James Callahan <james@chatid.com>
parents: 508
diff changeset
53 if params.username then
bf2ad6d6c778 mod_storage_mongodb: (un)lock globals around require; only auth if we need to
James Callahan <james@chatid.com>
parents: 508
diff changeset
54 assert ( conn:auth ( params ) );
bf2ad6d6c778 mod_storage_mongodb: (un)lock globals around require; only auth if we need to
James Callahan <james@chatid.com>
parents: 508
diff changeset
55 end
508
9831506dcfd6 mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents: 507
diff changeset
56 end
9831506dcfd6 mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents: 507
diff changeset
57
504
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
58 if not typ then -- default key-value store
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
59 return setmetatable({ store = store }, keyval_store);
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
60 end;
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
61 return nil, "unsupported-store";
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
62 end
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
63
0e9b43db7a2c mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff changeset
64 module:add_item("data-driver", driver);