123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import typing
- from .user import user
- from .user import user_builder
- from .user_loader import user_loader
- from .secret import secret
- from .secret import secret_builder
- from .secret_coder import secret_coder
- from .secret_loader import secret_loader
- from .application_part import application_part
- from .apikey import bad_apikey_exception
- from .validators import name_validator
- from .validators import domain_validator
- class secret_response:
- def __init__(self, target: secret | secret_builder) -> None:
- if isinstance(target, secret):
- self.__target = target
- return
- self.__target = target.result
- @property
- def response(self) -> dict:
- return {
- "name": self.target.name,
- "domain": self.target.domain,
- "coded" : self.target.coded
- }
- @property
- def target(self) -> secret:
- return self.__target
- @property
- def builder(self) -> secret_builder:
- return secret_builder(self.__target)
- class secret_collection_response:
- def __init__(self, target: typing.Iterable[secret] | None = None) -> None:
- self.__collection = []
- if target is None:
- return
- if type(target) is list:
- self.__collection = target.copy()
- return
- for count in target:
- self.__collection.append(count)
- @property
- def response(self) -> dict:
- return [ count.response for count in self.collection ]
- @property
- def collection(self) -> list:
- return self.__collection.copy()
- def append(self, target: secret | secret_builder) -> object:
- if isinstance(target, secret_builder):
- target = target.result
- self.__collection.append(target)
- return self
- class application_secret(application_part):
- def get(self, apikey: str, name: str) -> dict:
- with self.__secret_database(apikey) as loader:
- target = loader.load_by_name(name)
- if target is None:
- return self.__not_found_response()
- return secret_response(target).response
- def create(self, apikey: str, name: str, domain: str, coded: str) -> dict:
- validation = self._validation("name", name_validator(name))
- validation = validation or self._validation(
- "domain",
- domain_validator(domain)
- )
- if validation is not None:
- return validation
- if not secret_coder.validate(coded):
- return self._fail_response(cause = "Invalid coded secret")
- with self.__secret_database(apikey) as loader:
- builder = secret_builder()
- builder.name = name
- builder.domain = domain
- builder.coded = coded
- builder.owner = loader.owner
- loader.append(builder.result)
- return self._success_response()
- @property
- def __not_found_response(self) -> dict:
- return self._fail_response(cause = "Secret not found.")
- @property
- def __user_database(self) -> user_loader:
- return user_loader(self._connector)
- def __secret_database(self, apikey: str) -> secret_loader:
- with self.__user_database as loader:
- target = loader.get_by_apikey(apikey)
- if target is None:
- raise bad_apikey_exception()
- return secret_loader(self._connector, target)
|