about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJason A. Donenfeld2018-07-15 04:18:03 +0200
committerJason A. Donenfeld2018-07-15 04:18:03 +0200
commit82856923bffaac3ac88a90a797ddb33dcee8635a (patch)
treefff956daf986ce62fba0f277f0b13a95cb60a5cd
parentauth-filters: generate secret securely (diff)
downloadcgit-82856923bffaac3ac88a90a797ddb33dcee8635a.tar.gz
cgit-82856923bffaac3ac88a90a797ddb33dcee8635a.zip
auth-filters: use crypt() in simple-authentication
There's no use in giving a silly example to folks who will just copy it,
so instead try to do something slightly better.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--filters/simple-authentication.lua19
1 files changed, 6 insertions, 13 deletions
diff --git a/filters/simple-authentication.lua b/filters/simple-authentication.lua index bf35632..77d1fd0 100644 --- a/filters/simple-authentication.lua +++ b/filters/simple-authentication.lua
@@ -23,17 +23,11 @@ local protected_repos = {
23 qt = { jason = true, bob = true } 23 qt = { jason = true, bob = true }
24} 24}
25 25
26-- Please note that, in production, you'll want to replace this simple lookup 26-- A list of users and hashes, generated with `mkpasswd -m sha-512 -R 300000`.
27-- table with either a table of salted and hashed passwords (using something
28-- smart like scrypt), or replace this table lookup with an external support,
29-- such as consulting your system's pam / shadow system, or an external
30-- database, or an external validating web service. For testing, or for
31-- extremely low-security usage, you may be able, however, to get away with
32-- compromising on hardcoding the passwords in cleartext, as we have done here.
33local users = { 27local users = {
34 jason = "secretpassword", 28 jason = "$6$rounds=300000$YYJct3n/o.ruYK$HhpSeuCuW1fJkpvMZOZzVizeLsBKcGA/aF2UPuV5v60JyH2MVSG6P511UMTj2F3H75.IT2HIlnvXzNb60FcZH1",
35 laurent = "s3cr3t", 29 laurent = "$6$rounds=300000$dP0KNHwYb3JKigT$pN/LG7rWxQ4HniFtx5wKyJXBJUKP7R01zTNZ0qSK/aivw8ywGAOdfYiIQFqFhZFtVGvr11/7an.nesvm8iJUi.",
36 bob = "ilikelua" 30 bob = "$6$rounds=300000$jCLCCt6LUpTz$PI1vvd1yaVYcCzqH8QAJFcJ60b6W/6sjcOsU7mAkNo7IE8FRGW1vkjF8I/T5jt/auv5ODLb1L4S2s.CAyZyUC"
37} 31}
38 32
39-- Set this to a path this script can write to for storing a persistent 33-- Set this to a path this script can write to for storing a persistent
@@ -48,7 +42,7 @@ local secret_filename = "/var/cache/cgit/auth-secret"
48 42
49-- Sets HTTP cookie headers based on post and sets up redirection. 43-- Sets HTTP cookie headers based on post and sets up redirection.
50function authenticate_post() 44function authenticate_post()
51 local password = users[post["username"]] 45 local hash = users[post["username"]]
52 local redirect = validate_value("redirect", post["redirect"]) 46 local redirect = validate_value("redirect", post["redirect"])
53 47
54 if redirect == nil then 48 if redirect == nil then
@@ -58,8 +52,7 @@ function authenticate_post()
58 52
59 redirect_to(redirect) 53 redirect_to(redirect)
60 54
61 -- Lua hashes strings, so these comparisons are time invariant. 55 if hash == nil or hash ~= unistd.crypt(post["password"], hash) then
62 if password == nil or password ~= post["password"] then
63 set_cookie("cgitauth", "") 56 set_cookie("cgitauth", "")
64 else 57 else
65 -- One week expiration time 58 -- One week expiration time