Software / code / prosody-modules
Annotate
mod_couchdb/couchdb/mod_couchdb.lua @ 5243:d5dc8edb2695
mod_http_oauth2: Use more compact IDs
UUIDs are nice but so verbose!
The reduction in entropy for the nonce should be fine since the
timestamp is also counts towards this, and it changes every second
(modulo clock shenanigans), so the chances of someone managing to get
the same client_secret by registering with the same information at the
same time as another entity should be negligible.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 11 Mar 2023 22:46:27 +0100 |
| parent | 813:2469f779b3f7 |
| 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 |
|
813
2469f779b3f7
mod_storage_*: Update to use module:provides().
Waqas Hussain <waqas20@gmail.com>
parents:
229
diff
changeset
|
79 module:provides("storage", driver); |