mirror of https://github.com/Justuser3310/jetwork/
parent
ca635a2644
commit
e39245b727
@ -0,0 +1,8 @@
|
|||||||
|
def domain_ok(domain):
|
||||||
|
domains = ["jet"]
|
||||||
|
|
||||||
|
if domain.count(".") == 1:
|
||||||
|
if domain.split(".")[1] in domains:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
@ -0,0 +1,30 @@
|
|||||||
|
from os import system, name
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
|
# Здесь общий запуск всех файлов и команд
|
||||||
|
|
||||||
|
'''
|
||||||
|
# Порт для приёма всяких запросов
|
||||||
|
def reverse_proxy():
|
||||||
|
port = 8000
|
||||||
|
if name == "posix":
|
||||||
|
system(f"./bore local {port} --to jetwork.404.mn")
|
||||||
|
elif name == "nt":
|
||||||
|
system("")
|
||||||
|
|
||||||
|
# Стартуем проброс порта
|
||||||
|
rp = Thread(target = reverse_proxy)
|
||||||
|
rp.start()
|
||||||
|
'''
|
||||||
|
|
||||||
|
'''
|
||||||
|
from network import *
|
||||||
|
|
||||||
|
#server(8000)
|
||||||
|
|
||||||
|
if client(8001):
|
||||||
|
print(1)
|
||||||
|
else:
|
||||||
|
print(2)
|
||||||
|
'''
|
||||||
|
|
@ -0,0 +1,47 @@
|
|||||||
|
import socket
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Здесь идёт обработка всех запросов через сеть
|
||||||
|
|
||||||
|
# TODO:
|
||||||
|
# 1. [+] Пинг
|
||||||
|
# 2. [+] Проверка существования .zip сайта
|
||||||
|
# 3. Передача сайта
|
||||||
|
# 4. Приём рассылки сайтов
|
||||||
|
|
||||||
|
def server(port):
|
||||||
|
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
|
||||||
|
sock.bind (('127.0.0.1', port))
|
||||||
|
|
||||||
|
while 1 :
|
||||||
|
data , addres = sock.recvfrom(1024)
|
||||||
|
#print (addres[0], addres[1])
|
||||||
|
op = data.decode('utf-8')
|
||||||
|
|
||||||
|
if op == "ping":
|
||||||
|
sock.sendto("Pinged success".encode('utf-8'), addres)
|
||||||
|
elif op[:3] == "is_":
|
||||||
|
check = op[3:]
|
||||||
|
if os.path.exists(f'cached/{check}'):
|
||||||
|
sock.sendto("exist".encode('utf-8'), addres)
|
||||||
|
else:
|
||||||
|
sock.sendto("not exist".encode('utf-8'), addres)
|
||||||
|
else:
|
||||||
|
sock.sendto(data, addres)
|
||||||
|
|
||||||
|
|
||||||
|
# op = operation
|
||||||
|
def client(dest_port, op = "ping"):
|
||||||
|
server = '127.0.0.1', dest_port
|
||||||
|
|
||||||
|
sor = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
|
||||||
|
sor.sendto((op).encode('utf-8'), server)
|
||||||
|
sor.settimeout(5)
|
||||||
|
|
||||||
|
try:
|
||||||
|
data = sor.recv(1024)
|
||||||
|
res = data.decode('utf-8')
|
||||||
|
return res
|
||||||
|
except:
|
||||||
|
print(f"[:{dest_port}] Недоступен.")
|
||||||
|
return None
|
@ -0,0 +1,40 @@
|
|||||||
|
from os import system
|
||||||
|
from db import *
|
||||||
|
|
||||||
|
print("(1) Создать сайт")
|
||||||
|
print("(2) Обновить сайт")
|
||||||
|
print("(3) Сменить тип")
|
||||||
|
op = input(">> ")
|
||||||
|
|
||||||
|
if op == "1":
|
||||||
|
from verify import *
|
||||||
|
from shutil import copyfile, make_archive
|
||||||
|
from domain_check import *
|
||||||
|
|
||||||
|
print("\nДомены: .jet")
|
||||||
|
domain = input("Домен сайта: ")
|
||||||
|
if not domain_ok(domain):
|
||||||
|
print("Неправильный формат или домен.")
|
||||||
|
exit()
|
||||||
|
print("\n(1) Статичный / (2) Динамичный")
|
||||||
|
type = input("Тип: ")
|
||||||
|
|
||||||
|
system(f"mkdir mysites/{domain}")
|
||||||
|
key_gen(f"mysites/{domain}")
|
||||||
|
copyfile(f"mysites/{domain}.pem", f"mysites/{domain}/{domain}.pem")
|
||||||
|
|
||||||
|
if type == "1":
|
||||||
|
conf = {"type": "static", "ver": 1}
|
||||||
|
write(conf, f"mysites/{domain}/config.json")
|
||||||
|
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}")
|
||||||
|
sign(f"mysites/{domain}.zip", f"mysites/{domain}.key", f"mysites/{domain}")
|
||||||
|
|
||||||
|
elif op == "2":
|
||||||
|
pass
|
||||||
|
elif op == "3":
|
||||||
|
pass
|
@ -0,0 +1,103 @@
|
|||||||
|
# name - директория и имя (path/name.key)
|
||||||
|
def key_gen(name):
|
||||||
|
from cryptography.hazmat.backends import default_backend
|
||||||
|
from cryptography.hazmat.primitives import serialization
|
||||||
|
from cryptography.hazmat.primitives.asymmetric import rsa
|
||||||
|
|
||||||
|
# Generate the public/private key pair.
|
||||||
|
private_key = rsa.generate_private_key(
|
||||||
|
public_exponent = 65537,
|
||||||
|
key_size = 4096,
|
||||||
|
backend = default_backend(),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Save the private key to a file.
|
||||||
|
with open(f'{name}.key', 'wb') as f:
|
||||||
|
f.write(
|
||||||
|
private_key.private_bytes(
|
||||||
|
encoding=serialization.Encoding.PEM,
|
||||||
|
format=serialization.PrivateFormat.TraditionalOpenSSL,
|
||||||
|
encryption_algorithm=serialization.NoEncryption(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Save the public key to a file.
|
||||||
|
with open(f'{name}.pem', 'wb') as f:
|
||||||
|
f.write(
|
||||||
|
private_key.public_key().public_bytes(
|
||||||
|
encoding = serialization.Encoding.PEM,
|
||||||
|
format = serialization.PublicFormat.SubjectPublicKeyInfo,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def sign(file, priv_key, sig):
|
||||||
|
import base64
|
||||||
|
from cryptography.hazmat.backends import default_backend
|
||||||
|
from cryptography.hazmat.primitives import hashes
|
||||||
|
from cryptography.hazmat.primitives import serialization
|
||||||
|
from cryptography.hazmat.primitives.asymmetric import padding
|
||||||
|
|
||||||
|
# Load the private key.
|
||||||
|
with open(priv_key, 'rb') as key_file:
|
||||||
|
private_key = serialization.load_pem_private_key(
|
||||||
|
key_file.read(),
|
||||||
|
password = None,
|
||||||
|
backend = default_backend(),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Load the contents of the file to be signed.
|
||||||
|
with open(file, 'rb') as f:
|
||||||
|
payload = f.read()
|
||||||
|
|
||||||
|
# Sign the payload file.
|
||||||
|
signature = base64.b64encode(
|
||||||
|
private_key.sign(
|
||||||
|
payload,
|
||||||
|
padding.PSS(
|
||||||
|
mgf = padding.MGF1(hashes.SHA256()),
|
||||||
|
salt_length = padding.PSS.MAX_LENGTH,
|
||||||
|
),
|
||||||
|
hashes.SHA256(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
with open(f'{sig}.sig', 'wb') as f:
|
||||||
|
f.write(signature)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def verify(file, pub_key, sig):
|
||||||
|
import base64
|
||||||
|
import cryptography.exceptions
|
||||||
|
from cryptography.hazmat.backends import default_backend
|
||||||
|
from cryptography.hazmat.primitives import hashes
|
||||||
|
from cryptography.hazmat.primitives.asymmetric import padding
|
||||||
|
from cryptography.hazmat.primitives.serialization import load_pem_public_key
|
||||||
|
|
||||||
|
# Load the public key.
|
||||||
|
with open(pub_key, 'rb') as f:
|
||||||
|
public_key = load_pem_public_key(f.read(), default_backend())
|
||||||
|
|
||||||
|
# Load the payload contents and the signature.
|
||||||
|
with open(file, 'rb') as f:
|
||||||
|
payload_contents = f.read()
|
||||||
|
with open(sig, 'rb') as f:
|
||||||
|
signature = base64.b64decode(f.read())
|
||||||
|
|
||||||
|
# Perform the verification.
|
||||||
|
try:
|
||||||
|
public_key.verify(
|
||||||
|
signature,
|
||||||
|
payload_contents,
|
||||||
|
padding.PSS(
|
||||||
|
mgf = padding.MGF1(hashes.SHA256()),
|
||||||
|
salt_length = padding.PSS.MAX_LENGTH,
|
||||||
|
),
|
||||||
|
hashes.SHA256(),
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
except cryptography.exceptions.InvalidSignature as e:
|
||||||
|
print('ERROR: Payload and/or signature files failed verification!')
|
||||||
|
return False
|
Loading…
Reference in new issue