2022-11-09 13:36:12 +00:00
|
|
|
import base64
|
|
|
|
import hashlib
|
|
|
|
|
2022-06-15 11:50:15 +01:00
|
|
|
from app.brm.brn import BRN
|
2022-05-04 15:36:36 +01:00
|
|
|
from app.extensions import db
|
|
|
|
from app.models import AbstractConfiguration, AbstractResource
|
|
|
|
|
|
|
|
|
|
|
|
class Onion(AbstractConfiguration):
|
2022-11-08 14:23:32 +00:00
|
|
|
@property
|
|
|
|
def brn(self) -> BRN:
|
|
|
|
return BRN(
|
|
|
|
group_id=self.group_id,
|
|
|
|
product="eotk",
|
|
|
|
provider="*",
|
|
|
|
resource_type="onion",
|
|
|
|
resource_id=self.onion_name
|
|
|
|
)
|
|
|
|
|
2022-05-04 15:36:36 +01:00
|
|
|
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)
|
|
|
|
|
2022-11-09 13:36:12 +00:00
|
|
|
onion_public_key = db.Column(db.LargeBinary, nullable=False)
|
|
|
|
onion_private_key = db.Column(db.LargeBinary, nullable=False)
|
|
|
|
|
|
|
|
tls_public_key = db.Column(db.LargeBinary, nullable=False)
|
|
|
|
tls_private_key = db.Column(db.LargeBinary, nullable=False)
|
|
|
|
|
2022-05-04 15:36:36 +01:00
|
|
|
group = db.relationship("Group", back_populates="onions")
|
|
|
|
|
2022-11-09 13:36:12 +00:00
|
|
|
@property
|
|
|
|
def calculated_onion_name(self):
|
|
|
|
p = self.onion_public_key[32:]
|
|
|
|
|
|
|
|
h = hashlib.sha3_256()
|
|
|
|
h.update(b".onion checksum")
|
|
|
|
h.update(p)
|
|
|
|
h.update(b"\x03")
|
|
|
|
checksum = h.digest()
|
|
|
|
|
|
|
|
result = bytearray(p)
|
|
|
|
result.extend(checksum[0:2])
|
|
|
|
result.append(0x03)
|
|
|
|
|
|
|
|
onion = base64.b32encode(result).decode("utf-8").strip("=")
|
|
|
|
return onion.lower()
|
|
|
|
|
2022-05-04 15:36:36 +01:00
|
|
|
|
|
|
|
class Eotk(AbstractResource):
|
|
|
|
group_id = db.Column(db.Integer(), db.ForeignKey("group.id"), nullable=False)
|
|
|
|
instance_id = db.Column(db.String(100), nullable=True)
|
2022-05-13 15:40:59 +01:00
|
|
|
provider = db.Column(db.String(20), nullable=False)
|
2022-05-04 15:36:36 +01:00
|
|
|
region = db.Column(db.String(20), nullable=False)
|
|
|
|
|
|
|
|
group = db.relationship("Group", back_populates="eotks")
|
2022-05-18 15:49:36 +01:00
|
|
|
|
|
|
|
@property
|
2022-06-15 11:50:15 +01:00
|
|
|
def brn(self) -> BRN:
|
|
|
|
return BRN(
|
|
|
|
group_id=self.group_id,
|
|
|
|
provider=self.provider,
|
|
|
|
product="eotk",
|
|
|
|
resource_type="instance",
|
|
|
|
resource_id=self.region
|
|
|
|
)
|