Mercurial Hosting > luan
annotate src/luan/modules/host/Hosting.luan @ 1811:55d89a183c82 default tip
remove line_diff from luan
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 15 May 2024 18:02:28 -0600 |
parents | 0a06d59578aa |
children |
rev | line source |
---|---|
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
633
diff
changeset
|
1 local Luan = require "luan:Luan.luan" |
379
e9e445e28f0b
add error checking to Hosting
Franklin Schmidt <fschmidt@gmail.com>
parents:
348
diff
changeset
|
2 local error = Luan.error |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
3 local ipairs = Luan.ipairs or error() |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
4 local pairs = Luan.pairs or error() |
742 | 5 local set_metatable = Luan.set_metatable or error() |
1596
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
6 local stringify = Luan.stringify or error() |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
633
diff
changeset
|
7 local Io = require "luan:Io.luan" |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
8 local print = Io.print or error() |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
633
diff
changeset
|
9 local Rpc = require "luan:Rpc.luan" |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
633
diff
changeset
|
10 local String = require "luan:String.luan" |
1716 | 11 local contains = String.contains or error() |
12 local starts_with = String.starts_with or error() | |
1596
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
13 local substring = String.sub or error() |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
14 local split = String.split or error() |
1381
8d7a39ca2c0c
add Rpc in_backup_read_lock
Franklin Schmidt <fschmidt@gmail.com>
parents:
1366
diff
changeset
|
15 local Logging = require "luan:logging/Logging.luan" |
8d7a39ca2c0c
add Rpc in_backup_read_lock
Franklin Schmidt <fschmidt@gmail.com>
parents:
1366
diff
changeset
|
16 local logger = Logging.logger "Hosting" |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
17 |
379
e9e445e28f0b
add error checking to Hosting
Franklin Schmidt <fschmidt@gmail.com>
parents:
348
diff
changeset
|
18 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
19 local Hosting = {} |
189
fb3993431f76
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
184
diff
changeset
|
20 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
21 function Hosting.push(domain,password,dir) |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
22 local my_dir = Io.uri("file:"..dir) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
23 my_dir.exists() or error("directory '"..dir.."' not found") |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
24 my_dir.is_directory() or error("'"..dir.."' is not a directory") |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
742
diff
changeset
|
25 local host = Rpc.remote(domain) |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
26 local tree = host.get(domain,password) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
27 if tree == nil then |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
28 print("creating "..domain) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
29 tree = host.create(domain,password) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
30 end |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
31 |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
32 local function process(there_parent,there,here) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
33 if here.is_file() then |
1083
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
775
diff
changeset
|
34 if there == nil or there.checksum ~= here.checksum() then |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
35 print("copying "..here.to_string()) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
36 host.copy_file(domain,password,there_parent.path,here.name(),here.read_binary()) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
37 end |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
38 elseif here.is_directory() then |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
39 if here.name() == "local" then |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
40 return |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
41 end |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
42 if there == nil then |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
43 there = host.mkdir(domain,password,there_parent.path,here.name()) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
44 end |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
45 for _, here_child in ipairs(here.children()) do |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
46 local name = here_child.name() |
1716 | 47 if not starts_with(name,".") then |
633
c5baaa525897
don't push hidden files to luanhost
Franklin Schmidt <fschmidt@gmail.com>
parents:
619
diff
changeset
|
48 process(there,there.children[name],here_child) |
c5baaa525897
don't push hidden files to luanhost
Franklin Schmidt <fschmidt@gmail.com>
parents:
619
diff
changeset
|
49 there.children[name] = nil |
c5baaa525897
don't push hidden files to luanhost
Franklin Schmidt <fschmidt@gmail.com>
parents:
619
diff
changeset
|
50 end |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
51 end |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
52 for _, there_child in pairs(there.children) do |
1366
ae2321a09723
improve Thread.schedule
Franklin Schmidt <fschmidt@gmail.com>
parents:
1120
diff
changeset
|
53 if host.delete_unused(domain,password,there_child.path) then |
1558 | 54 print("deleted "..here.to_string().."/"..there_child.name) |
619
cc3a68033179
fix hosting delete logging
Franklin Schmidt <fschmidt@gmail.com>
parents:
615
diff
changeset
|
55 end |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
56 end |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
57 else |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
58 error "not file or dir" |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
59 end |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
60 end |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
61 |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
62 process( nil, tree, my_dir ) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
63 |
716 | 64 host.update_handler(domain,password) |
1120
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
65 host.close() |
144
2e92f0a6fcac
add Reactionary.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
66 end |
2e92f0a6fcac
add Reactionary.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
67 |
1596
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
68 function Hosting.push_file(domain,password,dir,file) |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
69 local my_dir = Io.uri("file:"..dir) |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
70 my_dir.exists() or error("directory '"..dir.."' not found") |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
71 my_dir.is_directory() or error("'"..dir.."' is not a directory") |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
72 local my_file = Io.uri("file:"..file) |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
73 my_file.exists() or error("file '"..file.."' not found") |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
74 my_file.is_file() or error("'"..file.."' is not a file") |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
75 local my_file_string = my_file.to_string() |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
76 local my_dir_string = my_dir.to_string().."/" |
1716 | 77 contains( my_file_string, my_dir_string ) or error "file must be in dir" |
1596
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
78 my_file_string = substring(my_file_string,#my_dir_string+1) |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
79 local path = {split( my_file_string, "/" )} |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
80 path[#path] = nil |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
81 local host = Rpc.remote(domain) |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
82 local there = host.get(domain,password) |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
83 there~=nil or error "site not created" |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
84 for _, s in ipairs(path) do |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
85 there = there.children[s] or error("'"..s.."' not found on remote") |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
86 end |
1788 | 87 print("copying "..my_file.to_string()) |
1596
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
88 host.copy_file(domain,password,there.path,my_file.name(),my_file.read_binary()) |
1597 | 89 host.update_handler(domain,password) |
90 host.close() | |
1596
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
91 end |
a9ff30fb5d89
add Hosting.push_file
Franklin Schmidt <fschmidt@gmail.com>
parents:
1558
diff
changeset
|
92 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
93 function Hosting.delete(domain,password) |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
742
diff
changeset
|
94 local host = Rpc.remote(domain) |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
95 host.delete(domain,password) |
1120
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
96 host.close() |
144
2e92f0a6fcac
add Reactionary.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
97 end |
503 | 98 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
99 function Hosting.exists(domain) |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
742
diff
changeset
|
100 local host = Rpc.remote(domain) |
1120
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
101 local rtn = host.exists(domain) |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
102 host.close() |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
103 return rtn |
615
abc3198c86dd
fix tail recursion bug;
Franklin Schmidt <fschmidt@gmail.com>
parents:
610
diff
changeset
|
104 end |
abc3198c86dd
fix tail recursion bug;
Franklin Schmidt <fschmidt@gmail.com>
parents:
610
diff
changeset
|
105 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
106 function Hosting.change_domain(old_domain,new_domain,password) |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
742
diff
changeset
|
107 local host = Rpc.remote(new_domain) |
1120
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
108 local rtn = host.change_domain(old_domain,new_domain,password) |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
109 host.close() |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
110 return rtn |
724
4f8e30a3ffd0
add Hosting.change_domain()
Franklin Schmidt <fschmidt@gmail.com>
parents:
716
diff
changeset
|
111 end |
4f8e30a3ffd0
add Hosting.change_domain()
Franklin Schmidt <fschmidt@gmail.com>
parents:
716
diff
changeset
|
112 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
113 function Hosting.change_password(domain,old_password,new_password) |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
742
diff
changeset
|
114 local host = Rpc.remote(domain) |
1120
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
115 local rtn = host.change_password(domain,old_password,new_password) |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
116 host.close() |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
117 return rtn |
740
6871ba08d521
add Hosting.change_password()
Franklin Schmidt <fschmidt@gmail.com>
parents:
724
diff
changeset
|
118 end |
6871ba08d521
add Hosting.change_password()
Franklin Schmidt <fschmidt@gmail.com>
parents:
724
diff
changeset
|
119 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
120 function Hosting.caller(domain) |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
742
diff
changeset
|
121 local host = Rpc.remote(domain) |
742 | 122 local mt = {} |
123 function mt.__index(_,key) | |
124 return function(...) | |
1120
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
125 if key == "close" then |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
126 return host.close() |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1088
diff
changeset
|
127 end |
742 | 128 return host.call(domain,key,...) |
129 end | |
130 end | |
131 local t = {} | |
132 set_metatable(t,mt) | |
133 return t | |
134 end | |
135 | |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
136 return Hosting |