diff --git a/matrix/encryption.py b/matrix/encryption.py index d180d27..9f1fecb 100644 --- a/matrix/encryption.py +++ b/matrix/encryption.py @@ -170,6 +170,21 @@ class Olm(): with open(path, "rb") as f: pickle = f.read() account = Account.from_pickle(pickle) - return cls(server, account) + return cls(account) + except OlmAccountError as error: + raise EncryptionError(error) + + @encrypt_enabled + def to_session_dir(self, server): + # type: (Server) -> None + account_file_name = "{}_{}.account".format(server.user, + server.device_id) + session_path = server.get_session_path() + path = os.path.join(session_path, account_file_name) + + try: + with open(path, "wb") as f: + pickle = self.account.pickle() + f.write(pickle) except OlmAccountError as error: raise EncryptionError(error) diff --git a/matrix/events.py b/matrix/events.py index 8f5df81..b87436b 100644 --- a/matrix/events.py +++ b/matrix/events.py @@ -89,6 +89,7 @@ class MatrixLoginEvent(MatrixEvent): if not self.server.olm: self.server.create_olm() + self.server.store_olm() self.server.sync() diff --git a/matrix/server.py b/matrix/server.py index 0976e8c..fcac056 100644 --- a/matrix/server.py +++ b/matrix/server.py @@ -158,7 +158,10 @@ class MatrixServer: server=self.name, device=self.device_id) W.prnt(self.server_buffer, message) - self.olm = Olm(self) + self.olm = Olm() + + def store_olm(self): + self.olm.to_session_dir(self) def _create_options(self, config_file): options = [