passwd-verify.lua 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. function auth_password_verify(request, password)
  2. if request.domain == nil then
  3. return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, "No such user"
  4. end
  5. json = require "cjson"
  6. ltn12 = require "ltn12"
  7. https = require "ssl.https"
  8. https.TIMEOUT = 5
  9. local req = {
  10. username = request.user,
  11. password = password,
  12. real_rip = request.real_rip,
  13. protocol = {}
  14. }
  15. req.protocol[request.service] = true
  16. local req_json = json.encode(req)
  17. local res = {}
  18. local b, c = https.request {
  19. method = "POST",
  20. url = "https://nginx:9082",
  21. source = ltn12.source.string(req_json),
  22. headers = {
  23. ["content-type"] = "application/json",
  24. ["content-length"] = tostring(#req_json)
  25. },
  26. sink = ltn12.sink.table(res),
  27. insecure = true
  28. }
  29. local api_response = json.decode(table.concat(res))
  30. if api_response.success == true then
  31. return dovecot.auth.PASSDB_RESULT_OK, ""
  32. end
  33. return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, "Failed to authenticate"
  34. end
  35. function auth_passdb_lookup(req)
  36. return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, ""
  37. end