auth.lua
Verified
Added by iNTERFACEWARE
A module that does basic authentication for incoming web requests
Source Code
function string.___split(Input,sep)
local fields = {}
local pattern = string.format("([^%s]*%s?)", sep,sep)
for match in Input:gmatch(pattern) do
local lastchar = match:sub(-1)
if (lastchar == sep) then
fields[#fields+1] = match:sub(0,-2)
elseif (#lastchar > 0) then
fields[#fields+1] = match
end
end
--This part handles the case where if a delimiter
--ends a string, it should be considered a new entry
--e.g. 123| should be 2 fields: ['123','']
if Input:sub(-1) == sep then
fields[#fields+1] = ''
end
return fields
end
--------------------------
-- local module functions
--------------------------
local function ExtractPassword(R)
if R.headers.Authorization == nil then
return nil, nil
end
local P = filter.base64.dec(
R.headers.Authorization:split(" ")[2])
R = P:split(':')
return R[1], R[2]
end
local Body = [[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
</HEAD>
<BODY><H1>401 Unauthorized.</H1></BODY>
</HTML>]]
local function RequirePassword(R)
net.http.respond{code=401, body=Body,
headers={['WWW-Authenticate']='Basic realm="Secure Webservice"'}}
end
--------------------
-- Module Interface
--------------------
local auth = {}
function auth.BasicAuthentication(R)
local User, Password = ExtractPassword(R)
if User ~= 'admin' or Password ~= 'password' then
RequirePassword(R)
return false
else
return true
end
end
return auth
Description
A module that does basic authentication for incoming web requests
Usage Details
This module performs basic authentication for incoming HTTP web requests.
How to use auth.lua:
- Add it to your shared modules in a From HTTP component
- Use
local auth = require 'auth'at the top of your script - Parse the incoming HTTP request using
net.http.parseRequest{} - Use the
auth.BasicAuthentication()function to authenticate
Note: For more information see Using basic authentication and Patient Demographics that both use this module.
More Information