Source code for binaryninja.collaboration

import binaryninja

from .changeset import *
from .databasesync import *
from .file import *
from .folder import *
from .group import *
from .project import *
from .remote import *
from .snapshot import *
from .user import *
from .util import _last_error

"""
Collaboration Remote API
Python wrappers around C++ wrappers around the various REST apis exposed by the collaboration server.
Many methods throw RuntimeError, as documented.

None of these classes are thread-safe. Python's GIL probably helps with this but if you are
doing heavily multi-threaded work with these you may want the C++ api.
"""


[docs] def active_remote() -> Optional['Remote']: """ Get the single actively connected Remote (for ux simplification) :return: Active Remote, if one is set. None, otherwise. """ binaryninja._init_plugins() value = core.BNCollaborationGetActiveRemote() if value is None: return None result = Remote(handle=value) return result
[docs] def set_active_remote(remote: Optional['Remote']): """ Set the single actively connected Remote :param remote: New active Remote, or None to clear it. """ binaryninja._init_plugins() if remote is not None: core.BNCollaborationSetActiveRemote(remote._handle) else: core.BNCollaborationSetActiveRemote(None)
[docs] def known_remotes() -> List['Remote']: """ List of known/connected Remotes :return: All known remotes """ binaryninja._init_plugins() count = ctypes.c_size_t() value = core.BNCollaborationGetRemotes(count) result = [] for i in range(count.value): result.append(Remote(handle=value[i])) return result
[docs] def enterprise_remote() -> Optional['Remote']: """ Get whichever known Remote has the same address as the Enterprise license server :return: Relevant known Remote, or None if one is not found """ for remote in known_remotes(): if remote.is_enterprise: return remote return None
[docs] def create_remote(name: str, address: str) -> 'Remote': """ Create a Remote and add it to the list of known remotes (saved to Settings) :param name: Identifier for remote :param address: Base address (HTTPS) for all api requests """ binaryninja._init_plugins() return Remote(core.BNCollaborationCreateRemote(name, address))
[docs] def remove_known_remote(remote: 'Remote') -> None: """ Remove a Remote from the list of known remotes (saved to Settings) :param remote: Remote to remove """ binaryninja._init_plugins() core.BNCollaborationRemoveRemote(remote._handle)
[docs] def get_remote_by_id(id: str) -> Optional['Remote']: """ Get Remote by unique id :param id: Unique id of the Remote :return: Remote, if known, else None """ binaryninja._init_plugins() value = core.BNCollaborationGetRemoteById(id) if value is None: return None result = Remote(handle=value) return result
[docs] def get_remote_by_address(address: str) -> Optional['Remote']: """ Get Remote by address :param address: Base address of remote api :return: Remote, if found, else None """ binaryninja._init_plugins() value = core.BNCollaborationGetRemoteByAddress(address) if value is None: return None result = Remote(handle=value) return result
[docs] def get_remote_by_name(name: str) -> Optional['Remote']: """ Get Remote by name :param name: Name of Remote :return: Remote, if found, else None """ binaryninja._init_plugins() value = core.BNCollaborationGetRemoteByName(name) if value is None: return None result = Remote(handle=value) return result
[docs] def load_remotes(): """ Load the list of known Remotes from local Settings :raises RuntimeError: If there was an error """ binaryninja._init_plugins() if not core.BNCollaborationLoadRemotes(): raise RuntimeError(_last_error())
[docs] def save_remotes(): """ Save the list of known Remotes to local Settings :raises RuntimeError: If there was an error """ binaryninja._init_plugins() if not core.BNCollaborationSaveRemotes(): raise RuntimeError(_last_error())