onions: add onion service management

This commit is contained in:
Iain Learmonth 2022-05-04 15:36:36 +01:00
parent 9987c996c9
commit 8efb7d9186
11 changed files with 327 additions and 2 deletions

View file

@ -10,6 +10,8 @@ class Group(AbstractConfiguration):
origins = db.relationship("Origin", back_populates="group")
bridgeconfs = db.relationship("BridgeConf", back_populates="group")
eotks = db.relationship("Eotk", back_populates="group")
onions = db.relationship("Onion", back_populates="group")
alarms = db.relationship("Alarm", back_populates="group")
@classmethod

View file

@ -1,5 +1,10 @@
from typing import Optional
from tldextract import extract
from app import db
from app.models import AbstractConfiguration, AbstractResource
from app.models.onions import Onion
class Origin(AbstractConfiguration):
@ -23,6 +28,13 @@ class Origin(AbstractConfiguration):
for proxy in self.proxies:
proxy.destroy()
def onion(self) -> Optional[str]:
tld = extract(self.domain_name).registered_domain
onion = Onion.query.filter(Onion.domain_name == tld).first()
if not onion:
return None
return self.domain_name.replace(tld, f"{onion.onion_name}")
class Proxy(AbstractResource):
origin_id = db.Column(db.Integer, db.ForeignKey("origin.id"), nullable=False)

18
app/models/onions.py Normal file
View file

@ -0,0 +1,18 @@
from app.extensions import db
from app.models import AbstractConfiguration, AbstractResource
class Onion(AbstractConfiguration):
group_id = db.Column(db.Integer(), db.ForeignKey("group.id"), nullable=False)
domain_name = db.Column(db.String(255), nullable=False)
onion_name = db.Column(db.String(56), nullable=False, unique=True)
group = db.relationship("Group", back_populates="onions")
class Eotk(AbstractResource):
group_id = db.Column(db.Integer(), db.ForeignKey("group.id"), nullable=False)
instance_id = db.Column(db.String(100), nullable=True)
region = db.Column(db.String(20), nullable=False)
group = db.relationship("Group", back_populates="eotks")