Первые прототипы компонентов, сеть пока не работает.

main
none 8 months ago
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

@ -24,6 +24,8 @@ else:
# Создаём папку для кэшированных сайтов # Создаём папку для кэшированных сайтов
system("mkdir cached") system("mkdir cached")
system("mkdir verify")
system("mkdir mysites")
print("Максимальный размер для кэшированных файлов. (в гигабайтах)") print("Максимальный размер для кэшированных файлов. (в гигабайтах)")
print("Укажите 0 для отключения ограничения.") print("Укажите 0 для отключения ограничения.")

@ -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…
Cancel
Save