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