Formatting improvements in httpapis
This commit is contained in:
parent
3422ca43ff
commit
14f2d03ebf
14 changed files with 88 additions and 60 deletions
|
@ -31,7 +31,6 @@ class LANManager:
|
|||
self.too_many = too_many
|
||||
self.peers: "exploded IP Address string" = []
|
||||
|
||||
|
||||
def start(self):
|
||||
Thread(target=learn_services, daemon=True).start()
|
||||
Thread(target=advertise_service, daemon=True).start()
|
||||
|
|
|
@ -7,7 +7,6 @@ import requests
|
|||
from typing import Set
|
||||
|
||||
from onionrtypes import LANIP
|
||||
from utils.bettersleep import better_sleep
|
||||
import logger
|
||||
from coredb.blockmetadb import get_block_list
|
||||
from onionrblocks.blockimporter import import_block_from_data
|
||||
|
@ -38,8 +37,9 @@ def _lan_work(peer: LANIP):
|
|||
blocks = requests.get(url + 'blist/0').text.splitlines()
|
||||
for block in blocks:
|
||||
if block not in our_blocks:
|
||||
import_block_from_data(requests.get(url + f'get/{block}', stream=True).raw.read(6000000))
|
||||
|
||||
import_block_from_data(
|
||||
requests.get(
|
||||
url + f'get/{block}', stream=True).raw.read(6000000))
|
||||
|
||||
for port in ports:
|
||||
try:
|
||||
|
|
|
@ -4,10 +4,7 @@ Discover and publish private-network
|
|||
"""
|
||||
import socket
|
||||
import struct
|
||||
from typing import TYPE_CHECKING
|
||||
from typing import List
|
||||
from ipaddress import ip_address
|
||||
from socket import SHUT_RDWR
|
||||
|
||||
from .getip import lan_ips, best_ip
|
||||
from utils.bettersleep import better_sleep
|
||||
|
@ -32,7 +29,6 @@ IS_ALL_GROUPS = True
|
|||
ANNOUNCE_LOOP_SLEEP = 30
|
||||
|
||||
|
||||
|
||||
def learn_services():
|
||||
"""Take a list to infintely add lan service info to."""
|
||||
|
||||
|
@ -54,12 +50,13 @@ def learn_services():
|
|||
continue
|
||||
service_ips = service_ips.replace('onionr-', '').split('-')
|
||||
|
||||
port = 0
|
||||
for service in service_ips:
|
||||
try:
|
||||
ip_address(service)
|
||||
if not ip_address(service).is_private: raise ValueError
|
||||
if service in lan_ips: raise ValueError
|
||||
if not ip_address(service).is_private:
|
||||
raise ValueError
|
||||
if service in lan_ips:
|
||||
raise ValueError
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
|
@ -70,7 +67,8 @@ def advertise_service(specific_ips=None):
|
|||
# regarding socket.IP_MULTICAST_TTL
|
||||
# ---------------------------------
|
||||
# for all packets sent, after three hops on the network the packet will not
|
||||
# be re-sent/broadcast (see https://www.tldp.org/HOWTO/Multicast-HOWTO-6.html)
|
||||
# be re-sent/broadcast
|
||||
# (see https://www.tldp.org/HOWTO/Multicast-HOWTO-6.html)
|
||||
MULTICAST_TTL = 3
|
||||
|
||||
ips = best_ip
|
||||
|
|
|
@ -39,6 +39,7 @@ from utils.bettersleep import better_sleep
|
|||
ports = range(1337, 1340)
|
||||
_start_time = time.time()
|
||||
|
||||
|
||||
class LANServer:
|
||||
def __init__(self, shared_state):
|
||||
app = Flask(__name__)
|
||||
|
@ -51,12 +52,14 @@ class LANServer:
|
|||
|
||||
@app.before_request
|
||||
def dns_rebinding_prevention():
|
||||
if request.remote_addr in lan_ips or ipaddress.ip_address(request.remote_addr).is_loopback:
|
||||
if request.remote_addr in lan_ips or \
|
||||
ipaddress.ip_address(request.remote_addr).is_loopback:
|
||||
if time.time() - _start_time > 600:
|
||||
abort(403)
|
||||
if request.host != f'{self.host}:{self.port}':
|
||||
logger.warn('Potential DNS rebinding attack on LAN server:')
|
||||
logger.warn(f'Hostname {request.host} was used instead of {self.host}:{self.port}')
|
||||
logger.warn(
|
||||
f'Hostname {request.host} was used instead of {self.host}:{self.port}') # noqa
|
||||
abort(403)
|
||||
|
||||
@app.route('/blist/<time>')
|
||||
|
@ -82,14 +85,18 @@ class LANServer:
|
|||
def _show_lan_bind(port):
|
||||
better_sleep(1)
|
||||
if self.server.started and port == self.server.server_port:
|
||||
logger.info(f'Serving to LAN on {self.host}:{self.port}', terminal=True)
|
||||
logger.info(
|
||||
f'Serving to LAN on {self.host}:{self.port}',
|
||||
terminal=True)
|
||||
if self.host == "":
|
||||
logger.info("Not binding to LAN due to no private network configured.", terminal=True)
|
||||
logger.info(
|
||||
"Not binding to LAN due to no private network configured.",
|
||||
terminal=True)
|
||||
return
|
||||
for i in ports:
|
||||
self.server = WSGIServer((self.host, i),
|
||||
self.app, log=None,
|
||||
handler_class=FDSafeHandler)
|
||||
self.app, log=None,
|
||||
handler_class=FDSafeHandler)
|
||||
self.port = self.server.server_port
|
||||
try:
|
||||
Thread(target=_show_lan_bind, args=[i], daemon=True).start()
|
||||
|
@ -99,5 +106,6 @@ class LANServer:
|
|||
else:
|
||||
break
|
||||
else:
|
||||
logger.warn("Could not bind to any LAN ports " + str(min(ports)) + "-" + str(max(ports)), terminal=True)
|
||||
logger.warn("Could not bind to any LAN ports " +
|
||||
str(min(ports)) + "-" + str(max(ports)), terminal=True)
|
||||
return
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue