aboutsummaryrefslogtreecommitdiff
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
-rw-r--r--filters/simple-authentication.lua19
1 files changed, 13 insertions, 6 deletions
diff --git a/filters/simple-authentication.lua b/filters/simple-authentication.lua
index 77d1fd0..bf35632 100644
--- a/filters/simple-authentication.lua
+++ b/filters/simple-authentication.lua
@@ -23,11 +23,17 @@ local protected_repos = {
qt = { jason = true, bob = true }
}
--- A list of users and hashes, generated with `mkpasswd -m sha-512 -R 300000`.
+-- Please note that, in production, you'll want to replace this simple lookup
+-- table with either a table of salted and hashed passwords (using something
+-- smart like scrypt), or replace this table lookup with an external support,
+-- such as consulting your system's pam / shadow system, or an external
+-- database, or an external validating web service. For testing, or for
+-- extremely low-security usage, you may be able, however, to get away with
+-- compromising on hardcoding the passwords in cleartext, as we have done here.
local users = {
- jason = "$6$rounds=300000$YYJct3n/o.ruYK$HhpSeuCuW1fJkpvMZOZzVizeLsBKcGA/aF2UPuV5v60JyH2MVSG6P511UMTj2F3H75.IT2HIlnvXzNb60FcZH1",
- laurent = "$6$rounds=300000$dP0KNHwYb3JKigT$pN/LG7rWxQ4HniFtx5wKyJXBJUKP7R01zTNZ0qSK/aivw8ywGAOdfYiIQFqFhZFtVGvr11/7an.nesvm8iJUi.",
- bob = "$6$rounds=300000$jCLCCt6LUpTz$PI1vvd1yaVYcCzqH8QAJFcJ60b6W/6sjcOsU7mAkNo7IE8FRGW1vkjF8I/T5jt/auv5ODLb1L4S2s.CAyZyUC"
+ jason = "secretpassword",
+ laurent = "s3cr3t",
+ bob = "ilikelua"
}
-- Set this to a path this script can write to for storing a persistent
@@ -42,7 +48,7 @@ local secret_filename = "/var/cache/cgit/auth-secret"
-- Sets HTTP cookie headers based on post and sets up redirection.
function authenticate_post()
- local hash = users[post["username"]]
+ local password = users[post["username"]]
local redirect = validate_value("redirect", post["redirect"])
if redirect == nil then
@@ -52,7 +58,8 @@ function authenticate_post()
redirect_to(redirect)
- if hash == nil or hash ~= unistd.crypt(post["password"], hash) then
+ -- Lua hashes strings, so these comparisons are time invariant.
+ if password == nil or password ~= post["password"] then
set_cookie("cgitauth", "")
else
-- One week expiration time