mirror of
https://github.com/Justuser3310/jetwork.git
synced 2025-02-08 01:37:38 +00:00
Compare commits
9 Commits
c6a9b37325
...
393e02477e
Author | SHA1 | Date | |
---|---|---|---|
|
393e02477e | ||
|
19349a0946 | ||
|
ffcf047286 | ||
|
ec0523d52c | ||
|
e72996af3c | ||
|
78202f027e | ||
|
91678cdf48 | ||
|
07954059e2 | ||
|
4eb0143970 |
2
db.py
2
db.py
@ -2,7 +2,7 @@ import os
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
if not os.path.exists('config.json'):
|
if not os.path.exists('config.json'):
|
||||||
db = {"our_port": 0000, "ports": [], "domain": "http://0.0.0.0:8000"}
|
db = {"os": None,"our_port": 0000, "ports": [], "domain": "http://0.0.0.0:8000"}
|
||||||
js = json.dumps(db, indent=2)
|
js = json.dumps(db, indent=2)
|
||||||
with open("config.json", "w") as outfile:
|
with open("config.json", "w") as outfile:
|
||||||
outfile.write(js)
|
outfile.write(js)
|
||||||
|
@ -1,15 +1,23 @@
|
|||||||
from re import compile, sub
|
from re import compile, sub
|
||||||
|
domains = ['jet', 'mirror', 'org', 'info', 'news', 'me']
|
||||||
|
|
||||||
def domain_ok(domain):
|
def domain_ok(domain):
|
||||||
domains = ["jet", "jw", "404", "dash", "awesome", "mirror"]
|
global domains
|
||||||
|
if domain.count('.') == 1:
|
||||||
if domain.count(".") == 1:
|
if domain.split('.')[1] in domains:
|
||||||
if domain.split(".")[1] in domains:
|
|
||||||
# ../some => some
|
# ../some => some
|
||||||
# Защита от проверки папок выше, чем нужно и др.
|
# Защита от проверки папок выше, чем нужно и др.
|
||||||
regex = compile('[^a-z.-]')
|
regex = compile('[^a-z0-9.-]')
|
||||||
c_domain = regex.sub('', domain)
|
c_domain = regex.sub('', domain)
|
||||||
if domain == c_domain:
|
if domain == c_domain:
|
||||||
return domain
|
return domain
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def domain_list():
|
||||||
|
global domains
|
||||||
|
out = ''
|
||||||
|
for i in domains:
|
||||||
|
out += f'{i}, '
|
||||||
|
out = out[:-2]
|
||||||
|
return out
|
||||||
|
@ -76,7 +76,12 @@ def update_sites(n, s_val):
|
|||||||
|
|
||||||
res = []
|
res = []
|
||||||
for i in next(walk('cached/'), (None, None, []))[1]:
|
for i in next(walk('cached/'), (None, None, []))[1]:
|
||||||
res.append(html.Div([ dcc.Link(children=i, href=f'{domain}/{i}',
|
conf = read(f'cached/{i}/config.json')
|
||||||
|
if conf['type'] == 'dynamic':
|
||||||
|
res.append(html.Div([ dcc.Link(children=i, href=f'http://bore.pub:{conf["port"]}',
|
||||||
|
target='_blank') ], className='sites_elem'))
|
||||||
|
else:
|
||||||
|
res.append(html.Div([ dcc.Link(children=i, href=f'{domain}/{i}',
|
||||||
target='_blank') ], className='sites_elem'))
|
target='_blank') ], className='sites_elem'))
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
@ -82,11 +82,10 @@ def server(http_port):
|
|||||||
conn.send("not_exist".encode())
|
conn.send("not_exist".encode())
|
||||||
elif op[:8] == "publish_":
|
elif op[:8] == "publish_":
|
||||||
data = op[8:]
|
data = op[8:]
|
||||||
site, port = data.split("<>")
|
site, u_port = data.split("<>")
|
||||||
site = domain_ok(site)
|
if domain_ok(site):
|
||||||
if site:
|
|
||||||
conn.send("accepted".encode())
|
conn.send("accepted".encode())
|
||||||
client(port, f"get_{site}")
|
client(u_port, f"get_{site}")
|
||||||
elif op == "check_all":
|
elif op == "check_all":
|
||||||
try:
|
try:
|
||||||
sites = next(os.walk('cached/'), (None, None, []))[1]
|
sites = next(os.walk('cached/'), (None, None, []))[1]
|
||||||
|
21
proxy.py
21
proxy.py
@ -1,24 +1,27 @@
|
|||||||
from os import system, name
|
from os import system
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
from status import *
|
from status import *
|
||||||
|
from db import read
|
||||||
|
|
||||||
global http_out ; http_out = None
|
global http_out ; http_out = None
|
||||||
def proxy_http(port):
|
def proxy_http(port):
|
||||||
global http_out
|
global http_out
|
||||||
if name == "posix":
|
os = read()['os']
|
||||||
http_out = system(f"./bore local 8000 --to bore.pub --port {port}")
|
if os == 'Linux':
|
||||||
elif name == "nt":
|
http_out = system(f'./bore local 8000 --to bore.pub --port {port}')
|
||||||
http_out = system(f"bore local 8000 --to bore.pub --port {port}")
|
elif os == 'Windows' or os == 'Android':
|
||||||
|
http_out = system(f'bore local 8000 --to bore.pub --port {port}')
|
||||||
|
|
||||||
global serv_out ; serv_out = None
|
global serv_out ; serv_out = None
|
||||||
def proxy_serv(port):
|
def proxy_serv(port):
|
||||||
global serv_out
|
global serv_out
|
||||||
if name == "posix":
|
os = read()['os']
|
||||||
http_out = system(f"./bore local 8001 --to bore.pub --port {port}")
|
if os == 'Linux':
|
||||||
elif name == "nt":
|
http_out = system(f'./bore local 8001 --to bore.pub --port {port}')
|
||||||
http_out = system(f"bore local 8001 --to bore.pub --port {port}")
|
elif os == 'Windows' or os == 'Android':
|
||||||
|
http_out = system(f'bore local 8001 --to bore.pub --port {port}')
|
||||||
|
|
||||||
|
|
||||||
def watch_http(port):
|
def watch_http(port):
|
||||||
|
81
setup.py
81
setup.py
@ -1,51 +1,62 @@
|
|||||||
from os import system, name
|
from os import system
|
||||||
from urllib.request import urlretrieve as download
|
from urllib.request import urlretrieve as download
|
||||||
|
|
||||||
from db import *
|
from db import *
|
||||||
config = {}
|
|
||||||
|
|
||||||
# Устанавливаем зависимости
|
print('''1. Linux
|
||||||
system("pip install -r requirements.txt")
|
2. Windows
|
||||||
|
3. Android (Termux)''')
|
||||||
|
raw_os = input('ОС установки >> ')
|
||||||
|
oses = {'1': 'Linux', '2': 'Windows', '3': 'Android'}
|
||||||
|
os = oses[raw_os]
|
||||||
|
|
||||||
# Скачиваем bore (для проброса портов)
|
# Записываем ОС в конфиг
|
||||||
if name == "posix":
|
conf = read()
|
||||||
download("https://github.com/ekzhang/bore/releases/download/v0.5.0/bore-v0.5.0-x86_64-unknown-linux-musl.tar.gz", "bore.tar.gz")
|
conf['os'] = os
|
||||||
system("tar -zxvf bore.tar.gz")
|
write(conf)
|
||||||
system("rm -rf bore.tar.gz")
|
|
||||||
|
|
||||||
import getpass
|
print('''---
|
||||||
user = getpass.getuser()
|
[1/3] Устанавливаем зависимости python...
|
||||||
|
---''')
|
||||||
|
system('pip install -r requirements.txt')
|
||||||
|
|
||||||
#system("mkdir ~/.streamlit")
|
print('''---
|
||||||
#with open(f"/home/{user}/.streamlit/credentials.toml", "w") as f:
|
[2/3] Скачиваем обратный прокси...
|
||||||
# f.write('[general]\nemail = "a@a.a"')
|
---''')
|
||||||
#f.close()
|
if os == 'Linux':
|
||||||
elif name == "nt":
|
download('https://github.com/ekzhang/bore/releases/download/v0.5.0/bore-v0.5.0-x86_64-unknown-linux-musl.tar.gz', 'bore.tar.gz')
|
||||||
|
system('tar -zxvf bore.tar.gz')
|
||||||
|
system('rm -rf bore.tar.gz')
|
||||||
|
elif os == 'Windows':
|
||||||
from shutil import unpack_archive as unpack
|
from shutil import unpack_archive as unpack
|
||||||
download("https://github.com/ekzhang/bore/releases/download/v0.5.0/bore-v0.5.0-x86_64-pc-windows-msvc.zip", "bore.zip")
|
download('https://github.com/ekzhang/bore/releases/download/v0.5.0/bore-v0.5.0-x86_64-pc-windows-msvc.zip', 'bore.zip')
|
||||||
unpack("bore.zip")
|
unpack('bore.zip')
|
||||||
system("del bore.zip")
|
system('del bore.zip')
|
||||||
|
elif os == 'Android':
|
||||||
#system("mkdir C:\\Users\\windows\\.streamlit")
|
system('pkg install bore-cli')
|
||||||
#with open("C:\\Users\\windows\\.streamlit\\credentials.toml", "w") as f:
|
|
||||||
# f.write('[general]\nemail = "a@a.a"')
|
|
||||||
#f.close()
|
|
||||||
else:
|
else:
|
||||||
print("Увы, вероятно Ваша ОС не поддерживается.")
|
print('Увы, вероятно Ваша ОС не поддерживается.')
|
||||||
print("Завершение работы...")
|
print('Завершение работы...')
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
# Создаём папку для кэшированных сайтов
|
print('''---
|
||||||
system("mkdir cached")
|
[3/3] Создаём папки для работы...
|
||||||
system("mkdir verify")
|
---''')
|
||||||
system("mkdir mysites")
|
system('mkdir cached')
|
||||||
|
system('mkdir verify')
|
||||||
|
system('mkdir mysites')
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
#print("Максимальный размер для кэшированных файлов. (в гигабайтах)")
|
#print('Максимальный размер для кэшированных файлов. (в гигабайтах)')
|
||||||
#print("Укажите 0 для отключения ограничения.")
|
#print('Укажите 0 для отключения ограничения.')
|
||||||
#max = input(">> ")
|
#max = input('>> ')
|
||||||
# Записываем в конфиг
|
# Записываем в конфиг
|
||||||
#config["max"] = max
|
#config['max'] = max
|
||||||
#write(config)
|
#write(config)
|
||||||
|
|
||||||
print("\nЧтобы подключится к jetwork выполните: python main.py")
|
print('''
|
||||||
|
---
|
||||||
|
Установка завершена!
|
||||||
|
|
||||||
|
Чтобы подключится к jetwork выполните: python main.py
|
||||||
|
---''')
|
||||||
|
224
site_creator.py
224
site_creator.py
@ -1,4 +1,4 @@
|
|||||||
from os import system, mkdir
|
from os import system, mkdir, walk
|
||||||
from db import *
|
from db import *
|
||||||
from shutil import copyfile, make_archive, rmtree, copytree
|
from shutil import copyfile, make_archive, rmtree, copytree
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
@ -6,176 +6,172 @@ from time import sleep
|
|||||||
|
|
||||||
from verify import *
|
from verify import *
|
||||||
from network import *
|
from network import *
|
||||||
|
from domain_check import domain_list
|
||||||
|
|
||||||
print("(1) Создать сайт")
|
def your_sites():
|
||||||
print("(2) Обновить сайт")
|
sites = {}; num = 1
|
||||||
print("(3) Сменить тип")
|
for i in next(walk('cached/'), (None, None, []))[1]:
|
||||||
print("(4) Авто-раздача сайта")
|
sites[str(num)] = i
|
||||||
print("Enter для просто публикации.")
|
print(f'{str(num)}. {i}')
|
||||||
|
num += 1
|
||||||
|
return sites
|
||||||
|
|
||||||
op = input(">> ")
|
print('(1) Создать сайт')
|
||||||
|
print('(2) Обновить сайт')
|
||||||
|
print('(3) Сменить тип')
|
||||||
|
print('(4) Авто-раздача сайта')
|
||||||
|
print('Enter для просто публикации.')
|
||||||
|
|
||||||
if op == "1":
|
op = input('>> ')
|
||||||
|
|
||||||
|
if op == '1':
|
||||||
from domain_check import *
|
from domain_check import *
|
||||||
|
|
||||||
print("\nДомены: .jet, .jw, .404, .dash, .awesome, .mirror")
|
print(f'\nДоступные 1 lvl домены: {domain_list()}')
|
||||||
domain = input("Домен сайта: ")
|
domain = input('Домен сайта: ')
|
||||||
if not domain_ok(domain):
|
if not domain_ok(domain):
|
||||||
print("Неправильный формат или домен.")
|
print('Неправильный формат или домен.')
|
||||||
exit()
|
exit()
|
||||||
print("\n(1) Статичный / (2) Динамический")
|
print('\n(1) Статичный / (2) Динамический')
|
||||||
type = input("Тип: ")
|
type = input('Тип: ')
|
||||||
|
|
||||||
# Создаём папку и ключи для подписи
|
# Создаём папку и ключи для подписи
|
||||||
mkdir(f"mysites/{domain}")
|
mkdir(f'mysites/{domain}')
|
||||||
key_gen(f"mysites/{domain}")
|
key_gen(f'mysites/{domain}')
|
||||||
|
|
||||||
if type == "1":
|
if type == '1':
|
||||||
conf = {"type": "static", "ver": 1}
|
conf = {'type': 'static', 'ver': 1}
|
||||||
print("ПРИМЕЧАНИЕ: index.html обязателен.")
|
print('\nПРИМЕЧАНИЕ: index.html обязателен.')
|
||||||
elif type == "2":
|
|
||||||
port = input("Порт сервера: ")
|
|
||||||
conf = {"type": "dynamic", "ver": 1, "port": int(port)}
|
|
||||||
write(conf, f"mysites/{domain}/config.json")
|
|
||||||
|
|
||||||
if type == "1":
|
|
||||||
# Создаём index.html для загрузки сайта
|
# Создаём index.html для загрузки сайта
|
||||||
with open(f"mysites/{domain}/index.html", "w") as f:
|
with open(f'mysites/{domain}/index.html', 'w') as f:
|
||||||
f.write("<h1> Hello jetwork! </h1>")
|
f.write('<h1> Hello jetwork! </h1>')
|
||||||
f.close()
|
f.close()
|
||||||
|
elif type == '2':
|
||||||
|
port = input('Порт сервера: ')
|
||||||
|
conf = {'type': 'dynamic', 'ver': 1, 'port': int(port)}
|
||||||
|
write(conf, f'mysites/{domain}/config.json')
|
||||||
|
|
||||||
# Архивируем и создаём сигнатуру для подтверждения неизменности архива
|
# Архивируем и создаём сигнатуру для подтверждения неизменности архива
|
||||||
make_archive(f"mysites/{domain}", "zip", f"mysites/{domain}")
|
make_archive(f'mysites/{domain}', 'zip', f'mysites/{domain}')
|
||||||
sign(f"mysites/{domain}.zip", f"mysites/{domain}.key", f"mysites/{domain}")
|
sign(f'mysites/{domain}.zip', f'mysites/{domain}.key', f'mysites/{domain}')
|
||||||
|
|
||||||
elif op == "2":
|
elif op == '2':
|
||||||
domain = input("\nДомен сайта: ")
|
print()
|
||||||
if not os.path.exists(f"mysites/{domain}"):
|
sites = your_sites()
|
||||||
print("Не существует такого сайта.")
|
|
||||||
exit()
|
|
||||||
|
|
||||||
conf = read(f"mysites/{domain}/config.json")
|
domain = sites[input('Домен сайта: ')]
|
||||||
type = conf["type"]
|
|
||||||
if type == "dynamic":
|
conf = read(f'mysites/{domain}/config.json')
|
||||||
port = input("Порт сервера: ")
|
type = conf['type']
|
||||||
conf["port"] = port
|
if type == 'dynamic':
|
||||||
write(conf, f"mysites/{domain}/config.json")
|
port = input('Порт сервера: ')
|
||||||
|
conf['port'] = port
|
||||||
|
write(conf, f'mysites/{domain}/config.json')
|
||||||
|
|
||||||
# Обновляем версию
|
# Обновляем версию
|
||||||
conf = read(f"mysites/{domain}/config.json")
|
conf = read(f'mysites/{domain}/config.json')
|
||||||
conf["ver"] = conf["ver"] + 1
|
conf['ver'] = conf['ver'] + 1
|
||||||
write(conf, f"mysites/{domain}/config.json")
|
write(conf, f'mysites/{domain}/config.json')
|
||||||
|
|
||||||
# Архивируем и создаём сигнатуру для подтверждения неизменности архива
|
# Архивируем и создаём сигнатуру для подтверждения неизменности архива
|
||||||
make_archive(f"mysites/{domain}", "zip", f"mysites/{domain}")
|
make_archive(f'mysites/{domain}', 'zip', f'mysites/{domain}')
|
||||||
sign(f"mysites/{domain}.zip", f"mysites/{domain}.key", f"mysites/{domain}")
|
sign(f'mysites/{domain}.zip', f'mysites/{domain}.key', f'mysites/{domain}')
|
||||||
|
|
||||||
elif op == "3":
|
elif op == '3':
|
||||||
from os import rmdir
|
from os import rmdir
|
||||||
|
|
||||||
domain = input("\nДомен сайта: ")
|
print()
|
||||||
if not os.path.exists(f"mysites/{domain}"):
|
sites = your_sites()
|
||||||
print("Не существует такого сайта.")
|
domain = sites[input('Домен сайта: ')]
|
||||||
exit()
|
|
||||||
|
|
||||||
print("\n(1) Статичный / (2) Динамический")
|
print('\n(1) Статичный / (2) Динамический')
|
||||||
type = input("Тип: ")
|
type = input('Тип: ')
|
||||||
|
|
||||||
if type == "1":
|
if type == '1':
|
||||||
conf = read(f"mysites/{domain}/config.json")
|
conf = read(f'mysites/{domain}/config.json')
|
||||||
conf["type"] = "static"
|
conf['type'] = 'static'
|
||||||
conf.pop("port")
|
conf.pop('port')
|
||||||
with open(f"mysites/{domain}/index.html", "w") as f:
|
with open(f'mysites/{domain}/index.html', 'w') as f:
|
||||||
f.write("<h1> Hello jetwork! </h1>")
|
f.write('<h1> Hello jetwork! </h1>')
|
||||||
f.close()
|
f.close()
|
||||||
elif type == "2":
|
elif type == '2':
|
||||||
conf = read(f"mysites/{domain}/config.json")
|
conf = read(f'mysites/{domain}/config.json')
|
||||||
port = input("Порт сервера: ")
|
port = input('Порт сервера: ')
|
||||||
|
|
||||||
clean = input("Удалить все лишние файлы сайта (y/n): ")
|
clean = input('Удалить все лишние файлы сайта (y/n): ')
|
||||||
if clean == "y":
|
if clean == 'y':
|
||||||
# Удаляем папку, сохраняем конфиг и копируем публичный ключ
|
# Удаляем папку, сохраняем конфиг и копируем публичный ключ
|
||||||
rmtree(f"mysites/{domain}")
|
rmtree(f'mysites/{domain}')
|
||||||
sleep(0.1)
|
sleep(0.1)
|
||||||
system(f"mkdir mysites/{domain}")
|
system(f'mkdir mysites/{domain}')
|
||||||
|
|
||||||
conf["type"] = "dynamic"
|
conf['type'] = 'dynamic'
|
||||||
conf["port"] = int(port)
|
conf['port'] = int(port)
|
||||||
write(conf, f"mysites/{domain}/config.json")
|
write(conf, f'mysites/{domain}/config.json')
|
||||||
|
|
||||||
# Обновляем версию
|
# Обновляем версию
|
||||||
conf = read(f"mysites/{domain}/config.json")
|
conf = read(f'mysites/{domain}/config.json')
|
||||||
conf["ver"] = conf["ver"] + 1
|
conf['ver'] = conf['ver'] + 1
|
||||||
write(conf, f"mysites/{domain}/config.json")
|
write(conf, f'mysites/{domain}/config.json')
|
||||||
|
|
||||||
# Архивируем и создаём сигнатуру для подтверждения неизменности архива
|
# Архивируем и создаём сигнатуру для подтверждения неизменности архива
|
||||||
make_archive(f"mysites/{domain}", "zip", f"mysites/{domain}")
|
make_archive(f'mysites/{domain}', 'zip', f'mysites/{domain}')
|
||||||
sign(f"mysites/{domain}.zip", f"mysites/{domain}.key", f"mysites/{domain}")
|
sign(f'mysites/{domain}.zip', f'mysites/{domain}.key', f'mysites/{domain}')
|
||||||
|
|
||||||
elif op == "4":
|
elif op == '4':
|
||||||
domain = input("\nДомен сайта: ")
|
print()
|
||||||
if not os.path.exists(f"mysites/{domain}"):
|
sites = your_sites()
|
||||||
print("Не существует такого сайта.")
|
domain = sites[input('Домен сайта: ')]
|
||||||
exit()
|
|
||||||
|
|
||||||
print("\nВведите ваш порт сервера (при запуске main.py)")
|
serv_port = int( read()['our_port'] )
|
||||||
serv_port = int(input(">> "))
|
http_port = client(serv_port, f'is_{domain}')
|
||||||
http_port = client(serv_port, f"is_{domain}")
|
|
||||||
|
|
||||||
print("\nСтарт вечной раздачи...")
|
print('\nСтарт вечной раздачи...')
|
||||||
while True:
|
while True:
|
||||||
ports = port_check(serv_port)
|
ports = port_check(serv_port)
|
||||||
sleep(1)
|
sleep(1)
|
||||||
for port in tqdm(ports):
|
for port in tqdm(ports):
|
||||||
client(port, f"publish_{domain}<>{http_port}")
|
client(port, f'publish_{domain}<>{http_port}')
|
||||||
sleep(5)
|
sleep(5)
|
||||||
|
|
||||||
elif op == "":
|
host = 'bore.pub'
|
||||||
domain = input("\nДомен сайта: ")
|
# Проверяем тип сайта
|
||||||
if not os.path.exists(f"mysites/{domain}"):
|
type = read(f'mysites//{domain}/config.json')['type']
|
||||||
print("Не существует такого сайта.")
|
# Если динамический - вставляем спец страницу
|
||||||
exit()
|
if type == 'dynamic':
|
||||||
pub = "y"
|
port = read(f'mysites//{domain}/config.json')['port']
|
||||||
|
with open(f'mysites//{domain}/index.html', 'w') as f:
|
||||||
|
f.write(f"<iframe src='http://{host}:{port}' style='position:fixed; top:0; left:0; bottom:0; right:0; width:100%; height:100%; border:none; margin:0; padding:0; overflow:hidden; z-index:999999;'></iframe>")
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
|
||||||
# Копируем файлы из mysites в cached
|
# Копируем файлы из mysites в cached
|
||||||
try:
|
try:
|
||||||
rmtree(f"cached/{domain}")
|
rmtree(f'cached/{domain}')
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
copytree(f"mysites/{domain}", f"cached/{domain}")
|
copytree(f'mysites/{domain}', f'cached/{domain}')
|
||||||
copyfile(f"mysites/{domain}.pem", f"cached/{domain}.pem")
|
copyfile(f'mysites/{domain}.pem', f'cached/{domain}.pem')
|
||||||
copyfile(f"mysites/{domain}.sig", f"cached/{domain}.sig")
|
copyfile(f'mysites/{domain}.sig', f'cached/{domain}.sig')
|
||||||
copyfile(f"mysites/{domain}.zip", f"cached/{domain}.zip")
|
copyfile(f'mysites/{domain}.zip', f'cached/{domain}.zip')
|
||||||
|
|
||||||
|
|
||||||
host = "jetwork.404.mn"
|
if op != '':
|
||||||
# Проверяем тип сайта
|
print('\nОпубликовать сайт?')
|
||||||
type = read(f"cached/{domain}/config.json")["type"]
|
pub = input('y/n >> ')
|
||||||
# Если динамический
|
|
||||||
if type == "dynamic":
|
|
||||||
port = read(f"cached/{domain}/config.json")["port"]
|
|
||||||
with open(f"cached/{domain}/index.html", "w") as f:
|
|
||||||
f.write(f'<iframe src="http://{host}:{port}" style="position:fixed; top:0; left:0; bottom:0; right:0; width:100%; height:100%; border:none; margin:0; padding:0; overflow:hidden; z-index:999999;"></iframe>')
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
|
if pub == 'n':
|
||||||
if op != "":
|
|
||||||
print("Опубликовать сайт?")
|
|
||||||
pub = input("y/n >> ")
|
|
||||||
|
|
||||||
if pub == "n":
|
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
print("Введите ваш порт сервера (при запуске main.py)")
|
print('Введите ваш порт сервера (при запуске main.py)')
|
||||||
serv_port = int(input(">> "))
|
serv_port = int(input('>> '))
|
||||||
http_port = client(serv_port, f"is_{domain}")
|
http_port = client(serv_port, f'is_{domain}')
|
||||||
|
|
||||||
print("Получаем все порты...")
|
print('Получаем все порты...')
|
||||||
ports = port_check(serv_port)
|
ports = port_check(serv_port)
|
||||||
|
|
||||||
print(ports)
|
print(ports)
|
||||||
|
|
||||||
print("Публикуем сайт...")
|
print('Публикуем сайт...')
|
||||||
for port in tqdm(ports):
|
for port in tqdm(ports):
|
||||||
client(port, f"publish_{domain}<>{http_port}")
|
client(port, f'publish_{domain}<>{http_port}')
|
||||||
|
83
srv_interface.py
Normal file
83
srv_interface.py
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
from dash import Dash, dcc, html, Input, Output, callback
|
||||||
|
app = Dash(__name__, title='Jetwork', update_title=None)
|
||||||
|
|
||||||
|
from db import *
|
||||||
|
from status import *
|
||||||
|
|
||||||
|
from os import walk
|
||||||
|
from os import system as sys
|
||||||
|
from platform import system
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
|
app.layout = html.Div([ html.Div([
|
||||||
|
|
||||||
|
dcc.ConfirmDialog(id='shut_mess', message='Ты совсем гений?'),
|
||||||
|
html.Button("Выключить клиент", className='off_btn', n_clicks=0, id='off_btn'),
|
||||||
|
html.Div([], id='our_port', className='our_port'),
|
||||||
|
html.Div([], id='servers', className='servers'),
|
||||||
|
html.Div([], id='sites', className='sites'),
|
||||||
|
dcc.Dropdown(options=[], id='search', placeholder='Поиск...'),
|
||||||
|
|
||||||
|
dcc.Interval(id='interval-component', interval=1*1000, n_intervals=0)
|
||||||
|
|
||||||
|
], className='main')], className='content')
|
||||||
|
|
||||||
|
|
||||||
|
# Кнопка выключения
|
||||||
|
@callback(
|
||||||
|
Output('shut_mess', 'displayed'),
|
||||||
|
Input('off_btn', 'n_clicks'),
|
||||||
|
prevent_initial_call=True
|
||||||
|
)
|
||||||
|
def shut_btn(n_clicks):
|
||||||
|
return True
|
||||||
|
|
||||||
|
# Обновление нашего порта (зачем?)
|
||||||
|
@callback(Output('our_port', 'children'),
|
||||||
|
Input('interval-component', 'n_intervals'))
|
||||||
|
def update_our_port(n):
|
||||||
|
return f"Ваш порт: {read()['our_port']}"
|
||||||
|
|
||||||
|
# Обновление доступных узлов
|
||||||
|
@callback(Output('servers', 'children'),
|
||||||
|
Input('interval-component', 'n_intervals'))
|
||||||
|
def update_servers(n):
|
||||||
|
res = []
|
||||||
|
for i in read()['ports']:
|
||||||
|
res.append(html.Div([i], className='serv_elem'))
|
||||||
|
return res
|
||||||
|
|
||||||
|
# Обновление доступных сайтов
|
||||||
|
@callback(Output('sites', 'children'),
|
||||||
|
Input('interval-component', 'n_intervals'),
|
||||||
|
Input('search', 'value'))
|
||||||
|
def update_sites(n, s_val):
|
||||||
|
# Домен по умолчанию
|
||||||
|
domain = read()['domain']
|
||||||
|
# Если есть элемент в поиске
|
||||||
|
if s_val:
|
||||||
|
return html.Div([ dcc.Link(children=i, href=f'{domain}/{s_val}',
|
||||||
|
target='_blank') ], className='sites_elem')
|
||||||
|
|
||||||
|
res = []
|
||||||
|
for i in next(walk('cached/'), (None, None, []))[1]:
|
||||||
|
conf = read(f'cached/{i}/config.json')
|
||||||
|
if conf['type'] == 'dynamic':
|
||||||
|
res.append(html.Div([ dcc.Link(children=i, href=f'http://bore.pub:{conf["port"]}',
|
||||||
|
target='_blank') ], className='sites_elem'))
|
||||||
|
else:
|
||||||
|
res.append(html.Div([ dcc.Link(children=i, href=f'{domain}/{i}',
|
||||||
|
target='_blank') ], className='sites_elem'))
|
||||||
|
return res
|
||||||
|
|
||||||
|
# Обновление доступных сайтов в поиске
|
||||||
|
@callback(Output('search', 'options'),
|
||||||
|
Input('interval-component', 'n_intervals'))
|
||||||
|
def update_search(n):
|
||||||
|
res = []
|
||||||
|
for i in next(walk('cached/'), (None, None, []))[1]:
|
||||||
|
res.append(i)
|
||||||
|
return res
|
||||||
|
|
||||||
|
#app.run(debug=True, port = 5555)
|
||||||
|
app.run(debug=False, port = 5555)
|
@ -21,7 +21,7 @@ def main():
|
|||||||
print('Проверка обновлений...')
|
print('Проверка обновлений...')
|
||||||
system('git pull')
|
system('git pull')
|
||||||
print('Перезагрузка скрипта...')
|
print('Перезагрузка скрипта...')
|
||||||
system('python main.py updated')
|
system('python srv_main.py updated')
|
||||||
exit()
|
exit()
|
||||||
print('\nУспешно перезагружено!')
|
print('\nУспешно перезагружено!')
|
||||||
|
|
||||||
@ -56,14 +56,14 @@ def main():
|
|||||||
#updater.start()
|
#updater.start()
|
||||||
|
|
||||||
# Стартуем интерфейс
|
# Стартуем интерфейс
|
||||||
system('python interface.py')
|
system('python srv_interface.py')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# Запускаем главный процесс, чтобы потом легко убить его
|
# Запускаем главный процесс, чтобы потом легко убить его
|
||||||
p = Process(target=main)
|
p = Process(target=main)
|
||||||
p.start()
|
p.start()
|
||||||
|
|
||||||
status_set(True) # Устанавливаем статус, что программа работает
|
status_set('work') # Устанавливаем статус, что программа работает
|
||||||
|
|
||||||
st = status_check()
|
st = status_check()
|
||||||
while st:
|
while st:
|
||||||
|
Loading…
Reference in New Issue
Block a user