|
@@ -3,10 +3,10 @@ function auth_password_verify(request, password)
|
|
return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, "No such user"
|
|
return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, "No such user"
|
|
end
|
|
end
|
|
|
|
|
|
- json = require "cjson"
|
|
|
|
- ltn12 = require "ltn12"
|
|
|
|
- https = require "ssl.https"
|
|
|
|
- https.TIMEOUT = 5
|
|
|
|
|
|
+ local json = require "cjson"
|
|
|
|
+ local ltn12 = require "ltn12"
|
|
|
|
+ local https = require "ssl.https"
|
|
|
|
+ https.TIMEOUT = 30
|
|
|
|
|
|
local req = {
|
|
local req = {
|
|
username = request.user,
|
|
username = request.user,
|
|
@@ -16,8 +16,7 @@ function auth_password_verify(request, password)
|
|
}
|
|
}
|
|
req.protocol[request.service] = true
|
|
req.protocol[request.service] = true
|
|
local req_json = json.encode(req)
|
|
local req_json = json.encode(req)
|
|
- local res = {}
|
|
|
|
-
|
|
|
|
|
|
+ local res = {}
|
|
local b, c = https.request {
|
|
local b, c = https.request {
|
|
method = "POST",
|
|
method = "POST",
|
|
url = "https://nginx:9082",
|
|
url = "https://nginx:9082",
|
|
@@ -29,11 +28,16 @@ function auth_password_verify(request, password)
|
|
sink = ltn12.sink.table(res),
|
|
sink = ltn12.sink.table(res),
|
|
insecure = true
|
|
insecure = true
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if c ~= 200 then
|
|
|
|
+ dovecot.i_info("HTTP request failed with " .. c .. " for user " .. request.user)
|
|
|
|
+ return dovecot.auth.PASSDB_RESULT_INTERNAL_FAILURE, "Upstream error"
|
|
|
|
+ end
|
|
|
|
+
|
|
local api_response = json.decode(table.concat(res))
|
|
local api_response = json.decode(table.concat(res))
|
|
if api_response.success == true then
|
|
if api_response.success == true then
|
|
return dovecot.auth.PASSDB_RESULT_OK, ""
|
|
return dovecot.auth.PASSDB_RESULT_OK, ""
|
|
end
|
|
end
|
|
-
|
|
|
|
return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, "Failed to authenticate"
|
|
return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, "Failed to authenticate"
|
|
end
|
|
end
|
|
|
|
|