Allow multiple users for basic HTTP authentication.

This commit is contained in:
Marcos Kirsch 2016-12-28 14:16:58 -06:00
parent 10bcd2f170
commit 79e345d964
2 changed files with 17 additions and 6 deletions

View File

@ -4,6 +4,16 @@
basicAuth = {}
-- Returns true if the user/password match one of the users/passwords in httpserver-conf.lua.
-- Returns false otherwise.
function loginIsValid(user, pwd, users)
if user == nil then return false end
if pwd == nil then return false end
if users[user] == nil then return false end
if users[user] ~= pwd then return false end
return true
end
-- Parse basic auth http header.
-- Returns the username if header contains valid credentials,
-- nil otherwise.
@ -15,12 +25,13 @@ function basicAuth.authenticate(header)
end
local credentials = dofile("httpserver-b64decode.lc")(credentials_enc)
local user, pwd = credentials:match("^(.*):(.*)$")
if user ~= conf.auth.user or pwd ~= conf.auth.password then
if loginIsValid(user, pwd, conf.auth.users) then
print("httpserver-basicauth: User \"" .. user .. "\": Authenticated.")
return user
else
print("httpserver-basicauth: User \"" .. user .. "\": Access denied.")
return nil
end
print("httpserver-basicauth: User \"" .. user .. "\": Authenticated.")
return user
end
function basicAuth.authErrorHeader()

View File

@ -6,10 +6,10 @@ local conf = {}
-- Basic Authentication Conf
local auth = {}
auth.enabled = false
auth.enabled = true
auth.realm = "nodemcu-httpserver" -- displayed in the login dialog users get
auth.user = "user"
auth.password = "password" -- PLEASE change this
-- Add users and passwords to this table. Do not leave this unchanged if you enable authentication!
auth.users = {user1 = "password1", user2 = "password2", user3 = "password3"}
conf.auth = auth
return conf