annotate host/admin/src/private/lib/Utils.luan @ 1996:d5c21ca9703e default tip

move threads to admin
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 04 Jul 2025 11:39:41 -0600
parents 301a6561fb6b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1995
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 local Config = require "site:/private/Config.luan"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2 local Hosted = require "luan:host/Hosted.luan"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 Hosted.no_security and Hosted.no_security(Config.hosting_password)
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 require "java"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5 local Luan = require "luan:Luan.luan"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 local error = Luan.error
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7 local ipairs = Luan.ipairs or error()
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 local Io = require "luan:Io.luan"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 local uri = Io.uri or error()
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10 local String = require "luan:String.luan"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 local regex = String.regex or error()
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 local sub_string = String.sub or error()
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 local Http = require "luan:http/Http.luan"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 local Mail = require "luan:mail/Mail.luan"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 local Logging = require "luan:logging/Logging.luan"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 local logger = Logging.logger "Utils"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19 local Utils = {}
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 Utils.domain = Http.domain or "admin.me.luan.software"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 Utils.server_domain = regex([[^admin\.(\w+\Q.luan.software\E)$]]).matches(Utils.domain) or error "invalid domain"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 Utils.sites_dir = uri(Http.dir).parent().parent()
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 local send = Mail.sender{
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 host = "mail.smtp2go.com"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 port = 465
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 username = "luan.admin2"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 password = Config.mail_password or error()
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 }.send
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 function Utils.send_mail(mail)
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 mail.From = mail.From or Utils.domain.."<monitor@luan.software>"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 mail.To = mail.To or Config.email_to or error()
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 send(mail)
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 end
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 function Utils.ssh(host,cmd)
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 local cmd = "ssh -t -oConnectTimeout=10 -oServerAliveInterval=10 -oBatchMode=yes -oStrictHostKeyChecking=no -p 14299 administrator@"..host.." '"..cmd.."'"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 local con = uri("bash:"..cmd)
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 return con.read_text()
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 end
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 local function last_modified_in_dir(dir)
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 local rtn = 0
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48 for _, child in ipairs(dir.children()) do
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 local lm = nil
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 if child.is_directory() then
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 lm = last_modified_in_dir(child)
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
52 elseif child.is_file() then
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
53 lm = child.last_modified()
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
54 end
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
55 if lm ~= nil and lm > rtn then
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
56 rtn = lm
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
57 end
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
58 end
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
59 return rtn
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
60 end
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
61 Utils.last_modified_in_dir = last_modified_in_dir
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
62
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
63
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
64 local luanhost_logs = uri "site:/private/local/logs/luanhost"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
65 if not luanhost_logs.exists() then
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
66 local logs = uri("file:logs").canonical()
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
67 --logs.mkdir() -- must exist
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
68 if logs.exists() then
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
69 logs.symlink_from(luanhost_logs)
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
70 logger.info "linked to luanhost logs"
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
71 else
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
72 logger.error("logs dir doesn't exist")
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
73 end
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
74 end
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
75
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
76
301a6561fb6b add host/admin
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
77 return Utils