Software /
code /
prosody-modules
Annotate
mod_storage_mongodb/mod_storage_mongodb.lua @ 2670:6e01878103c0
mod_smacks: Ignore user when writing or reading session_cache on prosody 0.9
At least under some circumstances it seems that session.username is nil when
a user tries to resume his session in prosody 0.9.
The username is not relevant when no limiting is done (limiting the number of
entries in the session cache is only possible in prosody 0.10), so this
commit removes the usage of the username when accessing the prosody 0.9 session
cache.
author | tmolitor <thilo@eightysoft.de> |
---|---|
date | Thu, 06 Apr 2017 02:12:14 +0200 |
parent | 1325:b21236b6b8d8 |
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 |
1010
fd420237a5e4
mod_storage_mongodb: Use util.json to encode our data (handles non-string table keys, etc).
Waqas Hussain <waqas20@gmail.com>
parents:
813
diff
changeset
|
10 local json = require "util.json"; |
fd420237a5e4
mod_storage_mongodb: Use util.json to encode our data (handles non-string table keys, etc).
Waqas Hussain <waqas20@gmail.com>
parents:
813
diff
changeset
|
11 |
508
9831506dcfd6
mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents:
507
diff
changeset
|
12 local conn |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
13 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
14 local keyval_store = {}; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
15 keyval_store.__index = keyval_store; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
16 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
17 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
|
18 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
|
19 local store = self.store; |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
20 |
507
46f578da4ff0
mod_storage_mongodb: assert the configuration options
James Callahan <james@chatid.com>
parents:
506
diff
changeset
|
21 -- 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
|
22 local namespace = params.dbname .. "." .. host; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
23 local v = { _id = { store = store ; username = username } }; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
24 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
25 local cursor , err = conn:query ( namespace , v ); |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
26 if not cursor then return nil , err end; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
27 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
28 local r , err = cursor:next ( ); |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
29 if not r then return nil , err end; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
30 return r.data; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
31 end |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
32 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
33 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
|
34 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
|
35 local store = self.store; |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
36 |
507
46f578da4ff0
mod_storage_mongodb: assert the configuration options
James Callahan <james@chatid.com>
parents:
506
diff
changeset
|
37 -- 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
|
38 local namespace = params.dbname .. "." .. host; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
39 local v = { _id = { store = store ; username = username } }; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
40 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
41 if next(data) ~= nil then -- set data |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
42 v.data = data; |
1010
fd420237a5e4
mod_storage_mongodb: Use util.json to encode our data (handles non-string table keys, etc).
Waqas Hussain <waqas20@gmail.com>
parents:
813
diff
changeset
|
43 return conn:insert ( namespace , json.encode(v) ); |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
44 else -- delete data |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
45 return conn:remove ( namespace , v ); |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
46 end; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
47 end |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
48 |
813
2469f779b3f7
mod_storage_*: Update to use module:provides().
Waqas Hussain <waqas20@gmail.com>
parents:
509
diff
changeset
|
49 local driver = {}; |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
50 |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
51 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
|
52 if not conn then |
9831506dcfd6
mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents:
507
diff
changeset
|
53 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
|
54 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
|
55 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
|
56 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
|
57 end |
508
9831506dcfd6
mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents:
507
diff
changeset
|
58 end |
9831506dcfd6
mod_storage_mongodb: move database connecting to inside driver:open
James Callahan <james@chatid.com>
parents:
507
diff
changeset
|
59 |
504
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
60 if not typ then -- default key-value store |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
61 return setmetatable({ store = store }, keyval_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 return nil, "unsupported-store"; |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
64 end |
0e9b43db7a2c
mod_storage_mondodb: Add module
James Callahan <james@chatid.com>
parents:
diff
changeset
|
65 |
813
2469f779b3f7
mod_storage_*: Update to use module:provides().
Waqas Hussain <waqas20@gmail.com>
parents:
509
diff
changeset
|
66 module:provides("storage", driver); |