You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
708 B
Lua
32 lines
708 B
Lua
local pass_digest = require("resty.moongoo.utils").pass_digest
|
|
|
|
local b64 = ngx and ngx.encode_base64 or require("mime").b64
|
|
local unb64 = ngx and ngx.decode_base64 or require("mime").unb64
|
|
|
|
local md5 = ngx and ngx.md5 or function(str) return require("crypto").digest("md5", str) end
|
|
|
|
local cbson = require("cbson")
|
|
|
|
|
|
local function auth(db, username, password)
|
|
local r, err = db:_cmd("getnonce", {})
|
|
if not r then
|
|
return nil, err
|
|
end
|
|
|
|
local digest = md5( r.nonce .. username .. pass_digest ( username , password ) )
|
|
|
|
r, err = db:_cmd("authenticate", {
|
|
user = username ;
|
|
nonce = r.nonce ;
|
|
key = digest ;
|
|
})
|
|
|
|
if not r then
|
|
return nil, err
|
|
end
|
|
|
|
return 1
|
|
end
|
|
|
|
return auth |