Server salt manager

Server salt manager is a manager that stores info about available server salt for auth key. Server salts used to prevent “replay-attacks”. Server salts changes periodically and generates from server. Client could ask several future server salts, or receive current server salt with BadServerSalt message. Methods to work with server salt manager:

  • has_salt(auth_key: AuthKey, salt_value: long) - checks can current be used or not

  • set_salt(auth_key: AuthKey, salt: Salt) - sets server salt for auth key

  • ge_future_salts(auth_key: AuthKey, count: int) - gets or generates several future salts for auth_key

  • clear(auth_key) - clear outdates server satls for current passed auth_key

Server salt used as shared resource to check middleware.

If customer wants to implement his own server salt manager - he need implement mtpylon.salts.server_salt_manager_protocol.ServerSaltManagerProtocol

class ServerSaltManagerProtocol(Protocol):

    async def has_salt(
        self,
        auth_key: AuthKey,
        salt_value: long
    ) -> bool:  # pragma: nocover
        """
        Checks can current salt be used now or not.
        """
        ...

    async def set_salt(
            self,
            auth_key: AuthKey,
            salt: Salt
    ):  # pragma: nocover
        """
        Sets server salt for auth key
        """
        ...

    async def get_future_salts(
        self,
        auth_key: AuthKey,
        count: int = 1
    ) -> List[Salt]:  # pragma: nocover
        """
        Get or generate future salts for current authorization key .
        Maximum future salts that could be return is 64

        Raises:
            ValueError - if negative or more then 64 values should be returned
        """
        ...

    async def clear(
        self,
        auth_key: Optional[AuthKey] = None
    ):  # pragma: nocover
        """
        Clear all outdated server salts
        :param auth_key:
        :return:
        """
        ...