Mercurial Hosting > luan
comparison src/luan/host/Util.luan @ 1210:3db95cc00d09
luanhost - add digest authentication
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 09 Mar 2018 15:21:12 -0700 |
parents | db7d31f4089a |
children | 8d95711f6615 |
comparison
equal
deleted
inserted
replaced
1209:cff4a7d778a6 | 1210:3db95cc00d09 |
---|---|
1 local Luan = require "luan:Luan.luan" | 1 local Luan = require "luan:Luan.luan" |
2 local error = Luan.error | 2 local error = Luan.error |
3 local do_file = Luan.do_file or error() | 3 local do_file = Luan.do_file or error() |
4 local ipairs = Luan.ipairs or error() | |
4 local stringify = Luan.stringify or error() | 5 local stringify = Luan.stringify or error() |
5 local Io = require "luan:Io.luan" | 6 local Io = require "luan:Io.luan" |
6 local String = require "luan:String.luan" | 7 local String = require "luan:String.luan" |
7 local lower = String.lower or error() | 8 local lower = String.lower or error() |
9 local format = String.format or error() | |
10 local Binary = require "luan:Binary.luan" | |
11 local bytes = Binary.byte or error() | |
8 local Hosting = require "luan:host/Hosting.luan" | 12 local Hosting = require "luan:host/Hosting.luan" |
9 | 13 |
10 java() | 14 java() |
11 local Base64 = require "java:java.util.Base64" | 15 local Base64 = require "java:java.util.Base64" |
12 local MessageDigest = require "java:java.security.MessageDigest" | 16 local MessageDigest = require "java:java.security.MessageDigest" |
17 function Util.read_password(domain) | 21 function Util.read_password(domain) |
18 domain = lower(domain) | 22 domain = lower(domain) |
19 return do_file(Hosting.sites_dir..domain.."/info.luan").password or error() | 23 return do_file(Hosting.sites_dir..domain.."/info.luan").password or error() |
20 end | 24 end |
21 | 25 |
22 function Util.write_password(domain,password) | 26 local function basic_authentication(dir,password) |
23 local dir = Hosting.sites_dir..lower(domain) | |
24 Io.schemes.file(dir.."/info.luan").write_text( %> | |
25 return <%= stringify{password=password} %> | |
26 <% ) | |
27 local sha1 = MessageDigest.getInstance("SHA1").digest(password.getBytes()) | 27 local sha1 = MessageDigest.getInstance("SHA1").digest(password.getBytes()) |
28 local encoded = Base64.getEncoder().encodeToString(sha1) | 28 local encoded = Base64.getEncoder().encodeToString(sha1) |
29 Io.schemes.file(dir.."/password.nginx").write_text( %> | 29 Io.schemes.file(dir.."/password.nginx").write_text( %> |
30 admin:{SHA}<%=encoded%> | 30 admin:{SHA}<%=encoded%> |
31 <% ) | 31 <% ) |
32 end | 32 end |
33 | 33 |
34 local function digest_authentication(dir,password) | |
35 local s = "admin:Restricted:"..password | |
36 local md5 = MessageDigest.getInstance("MD5").digest(s.getBytes()) | |
37 md5 = {bytes(md5,1,#md5)} | |
38 local encoded = "" | |
39 for _, n in ipairs(md5) do | |
40 encoded = encoded..format("%02x",n) | |
41 end | |
42 Io.schemes.file(dir.."/password.nginx").write_text( %> | |
43 admin:Restricted:<%=encoded%> | |
44 <% ) | |
45 end | |
46 | |
47 function Util.write_password(domain,password) | |
48 local dir = Hosting.sites_dir..lower(domain) | |
49 Io.schemes.file(dir.."/info.luan").write_text( %> | |
50 return <%= stringify{password=password} %> | |
51 <% ) | |
52 digest_authentication(dir,password) | |
53 end | |
54 | |
34 return Util | 55 return Util |