diff options
| author | Alexander Taylor <alex@vector35.com> | 2024-07-09 20:43:15 -0400 |
|---|---|---|
| committer | Alexander Taylor <alex@vector35.com> | 2024-07-09 20:49:53 -0400 |
| commit | 0bcd6afef3b82a046a7e7179e010bcdb32e727a6 (patch) | |
| tree | b2682e8db88ab950a6fc8cde2923c3defc327a16 /docs/guide/enterprise/index.md | |
| parent | 283410e6209134b0980363ca297abeb7dea75001 (diff) | |
Merge the Enterprise docs in with everything else.
Diffstat (limited to 'docs/guide/enterprise/index.md')
| -rw-r--r-- | docs/guide/enterprise/index.md | 189 |
1 files changed, 153 insertions, 36 deletions
diff --git a/docs/guide/enterprise/index.md b/docs/guide/enterprise/index.md index 4b5556fa..11a0f436 100644 --- a/docs/guide/enterprise/index.md +++ b/docs/guide/enterprise/index.md @@ -1,59 +1,176 @@ -# Binary Ninja Enterprise Client +# Binary Ninja Enterprise !!! note - This section only applies to the `Enterprise` edition of Binary Ninja + This section only applies to the `Enterprise` edition of Binary Ninja. -Welcome to the Binary Ninja Enterprise client documentation, part of our Binary Ninja Enterprise product. +The Enterprise edition of Binary Ninja seamlessly integrates remote collaboration functionality within the client. This includes remote project management, push/pull of analysis database and type archive snapshots, real-time chat, and more. -### Licensing -If your Enterprise client came with a *named* license, please ensure the `license.dat` that contains the license has been placed in your user folder. User folder locations, per platform, are: +## Licensing -* Windows: `%APPDATA%\Binary Ninja` -* macOS: `~/Library/Application Support/Binary Ninja` -* Linux: `~/.binaryninja` +Opening your Enterprise client for the first time, you will be greeted by the following dialog: -Otherwise, the Enterprise client will need to check out a *floating* license from the server. This happens while you are logging in (unless you already have a license) and will automatically renew based on the "Checkout Duration" interval you chose in the login dialog. +{: style="max-width:500px; display: block; margin: auto;"} -## API Examples +If you have a *named* license, your experience should be identical to that of a Commercial client (with extra features). Click the "Used Named License..." button and select the `license.dat` that was provided when you purchased your license. This will be placed in your [user folder](../index.md#user-folder). -Examples of using the `collaboration` and `enterprise` APIs (which are unique to the Enterprise edition of the client) can be found bundled with the client: +Otherwise, the Enterprise client will need to check out a *floating* license from your Enterprise server. Enter your server location into the box and click "Connect". (All connections should happen over HTTPS and the default port is 3535.) -* **macOS**: `Binary\ Ninja.app/Contents/Resources/python/binaryninja/collaboration/examples` -* **Linux**: `binaryninja/python/binaryninja/collaboration/examples` -* **Windows**: `Binary Ninja\python\binaryninja\collaboration\examples` +## Authentication + +When connecting to an Enterprise server, you will see the following dialog: + +{: style="max-width:432px; display: block; margin: auto;"} + +This dialog will have up to 5 fields: + +* **Server**: The Enterprise server you are connecting to, which can be changed by clicking the edit icon to the right. (This will cause Binary Ninja to restart.) +* **Authentication**: If the Enterprise server you are connecting to has a Single Sign-On (SSO) provider configured, this drop-down menu will appear to allow users to authenticate via SSO instead of username and password. +* **Username**: This text box contains your username if you are logging in with an Enterprise server account (hidden if using SSO). +* **Password**: This text box contains your password if you are logging in with an Enterprise server account (hidden if using SSO). +* **Remember Me**: This checkbox will remember the settings you choose and try to log you in the same way in the future. +* **Checkout Duration**: This drop-down provides a selection of license durations. The default is "Until I Quit", which will refresh your license every 15 minutes until you quit the Enterprise client. ## Configuration -The Enterprise client has a number of user-configurable settings that let you change its behavior. These settings can be found in the main Settings window (`Edit -> Preferences`) within Binary Ninja in two separate areas: +The Enterprise client has a number of settings that let you change its behavior. These settings can be found in the main Settings window (`Edit -> Preferences`) within Binary Ninja. See the [Settings](../settings.md) documentation for more details. + +## User Interface + +The Enterprise edition of Binary Ninja adds a few extra items in the user interface. These include: + +* An extra [status indicator](#status-indicator) in the status bar +* The [Remote Dialog](#remote-dialog) +* The [Chat](#chat) sidebar widget +* The [User Positions](#user-positions) sidebar widget +* The [Describe Changes](#describe-changes-dialog) and [Resolve Merge Conflict](#resolve-merge-conflict-dialog) dialogs + +### Status Indicator +The first additional UI feature can be found in the bottom-left corner of the status bar: + +{: style="max-width:324px; display: block; margin: auto;"} + +This indicator consists of three separate sections: The active server button, the sync button, and the project button. + +#### Active Server Button +This button shows your connection status with the Enterprise server and acts as a shortcut to the Remote Dialog. + +#### Sync Button +This button shows how many snapshots can be pushed to or pulled from the Enterprise server. It is only shown with a shared database open. Clicking it will push and pull snapshots as needed to synchronize your local state with the Enterprise server's state. This is the best way to quickly share your changes with other collaborators and ensure you have their changes, too. + +The sync button has four indicators, some of which may be hidden: + +* `!!`: This indicates that there has been a problem with either getting status from the server or syncing with the server. Check the log for more details. +* `# ↑`: This indicates the number of local snapshots that have not yet been pushed to the Enterprise server. + * If you see a `*` next to the number, that indicates that you have unsaved local changes that are not yet part of a snapshot. + * If this indicator is missing, it means your user does not have permission to push snapshots to the Enterprise server for this file. +* `# ↓`: This indicates the number of remote snapshots that have not yet been pulled from the Enterprise server. +* `↻`: This indicates that the client is in the process of checking with the Enterprise server to see if there are any new snapshots available. + +!!! note + Clicking this button will cause a save to occur. It's not possible to sync without having all changes in a snapshot, which requires a save. + +#### Project Button +This button shows the currently active project and will show the Project Browser tab when clicked. See the main Binary Ninja documentation for more information regarding projects. + +### Remote Dialog +The Remote Dialog is the primary point of interaction with a remote Enterprise server. It can be opened by: + +* Clicking on the active server button in the status bar (see above) +* Clicking `View/Collaboration/Remote Dialog` in the menu bar +* Opening the command palette (`[CTRL/CMD-P]`) and choosing `Collaboration - Remote Dialog` in the list + +{: style="max-width:707px; display: block; margin: auto;"} -### Collaboration +The main components of the Remote Dialog window deal with management and display of remote projects. On top of these is an area for managing the server and your connection to it. -* *Active Server* (`collaboration.activeRemote`) is the URL of the Enterprise server to automatically connect to on launch. -* *Advanced Conflict Resolution* (`collaboration.advancedMerge`) shows additional information in the merge conflict resolution UI. -* *Auto Connect* (`collaboration.autoConnectOnLaunch`) makes Binary Ninja attempt to connect to your last used Enterprise server when you open the application. -* *Poll Interval* (`collaboration.autoPollInterval`) controls the time between automatic fetching for updated snapshots from the Enterprise server. This updates the pending change counts shown on the sync button in the status bar, but does not pull the changes. Set this to 0 to disable polling entirely. -* *Collaboration Project Directory* (`collaboration.directory`) defines the directory on your local disk where local copies of Collaboration files will be stored. -* *Maximum Conflict Diff Size* (`collaboration.maxConflictDiff`) defines a maximum size for showing diffs, which prevents performance issues with large diffs -* *Collaboration Servers* (`collaboration.servers`) is a list of Enterprise servers and their URLs that the Enterprise client may connect to. -* *Sync on Save* (`collaboration.syncOnSave`) controls whether the Enterprise client will sync your local changes to the Enterprise server every time you save. +#### Project List +The Project List shows what projects are available to you on the Enterprise server. Right-click will give a context menu with the following options: -### Enterprise +* **Manage Permissions**: Opens a dialog where you can manage permissions for the project +* **Edit Info**: Opens a dialog where you can edit project metadata +* **Delete**: Deletes the project (this has a confirmation dialog and is *non-recoverable*) +* **Add Project**: Opens a dialog where you can add project metadata for a new project -* *Automatically Checkout License* (`enterprise.autoCheckout`), if enabled, will cause Binary Ninja Enterprise to automatically check out a license on launch. -* *Default License Checkout Duration* (`enterprise.defaultCheckoutDuration`) will change the default duration of a checked out license. -* *Secrets Provider* (`enterprise.secretsProvider`) will change the secrets provider used for storing your checked out license. -* *Enterprise Server URL* (`enterprise.server.url`) is a read-only setting that shows the base URL for the currently connected Enterprise server. +{: style="max-width:461px; display: block; margin: auto;"} -### Core +#### Manage Permissions Dialog +{: style="max-width:657px; display: block; margin: auto;"} -* *Collaboration Plugin* (`corePlugins.collaboration`) allows you to disable all collaboration features. -* *Database Viewer (Debug)* (`corePlugins.databaseViewer`) enables an experimental, built-in database viewer plugin that can be used to debug database issues. +Permissions can be set on *users* or *groups* of users. Available permissions are: -### Network +* **View**: Lets the user or group view the files in the project, but not push any changes +* **Edit**: Lets the user or group push analysis changes, upload files, and change product details, in addition to view permissions +* **Admin**: Lets the user or group modify the project permissions, in addition to edit permissions -* *Enable Collaboration Server* (`network.enableCollaborationServer`) controls all collaboration network activity. +#### Server Area +Across the of the Remote Dialog are five buttons: -### Updates +* **Refresh**: Refreshes the projects and files shown from the currently active server. +* **Connect**/**Disconnect**: Connects to (or disconnect from) an Enterprise server. If connecting, it will show the "Connect to Remote" window (see below). +* **Manage Users...**: Opens a dialog that allows adding, editing, and removing users from the current server. (Only available to server administrators.) +* **Manage Groups...**: Opens a dialog that allows adding, editing, and removing groups from the current server. (Only available to server administrators.) +* **Actions**: Opens a context menu with the following options: + * **Create Project...**: Opens a dialog box for creating a new project. + * **Import Local Project...**: Opens a file picker to select a local project to upload in its entirety. + * **Edit Properties...**: Opens a dialog box for editing the current project's name and description. + * **Manage Permissions...**: Opens a dialog for editing the current project's permissions. + * **Delete...**: Deletes the currently selected project. This has a confirmation dialog and is *non-recoverable*! -* *Use Enterprise Server For Updates* (`updates.useEnterpriseServer`) controls whether the client will look for updates on the internet from the official Binary Ninja update servers (unchecked) or from the currently connected Enterprise server (checked). +Above these buttons is your current server connection status. + +#### Connect to Remote Window +The "Connect to Remote" window is shown when the Connect button is clicked. Here, you can manage Enterprise servers with the buttons on the right of the window. + +{: style="max-width:707px; display: block; margin: auto;"} + +When connecting to a new Enterprise server, a Login dialog will appear. In addition to the obvious username and password fields, the `Remember me` field will store a token in your platform's secret store or keychain. `Automatically connect` will attempt to reconnect to this Enterprise server in the future. + +### Chat +Every file in a project has an associated chat log that can be accessed via the Chat sidebar icon. Users working on the same file can send messages in the chat window to communicate with other collaborators in real-time. + +{: style="max-width:344px; display: block; margin: auto;"} + +### User Positions +Every file in a project has an associated list of user positions that can be accessed via the User Positions sidebar icon. This is a table that shows, in real-time: + +* **Username**: The username of users that have this file open from the server +* **View Type**: The type of view each user is currently looking at +* **Function**: The function each user is looking at, if they are looking at a function +* **Offset**: The offset in the file each user is looking at +* **IL Type**: What type of IL each user is looking at + +Double-clicking on any entry in this table will navigate you to that location within the file. + +{: style="max-width:342px; display: block; margin: auto;"} + +### Describe Changes Dialog +In any open file from a shared project, the Describe Changes Dialog will appear during the sync process if you are pushing any changes to the Enterprise server. This will apply a name to the set of changes you are pushing and add an entry in the file's Changelog. + +{: style="max-width:335px; display: block; margin: auto;"} + +### File Changelog +The File Changelog can be accessed via `File/Collaboration/File Changelog...`. It shows a list of changes that have been made to the current file, along with what user made those changes, when, and a description of those changes. Items in this list are *sets* of changes (typically all of the changes before a user clicked the sync button), rather than every snapshot in the database. + +{: style="max-width:901px; display: block; margin: auto;"} + +### Resolve Merge Conflict Dialog +If any conflicts arise while you are syncing your changes to the Enterprise server, the Resolve Merge Conflict Dialog will appear. + +{: style="max-width:816px; display: block; margin: auto;"} + +The left-hand side of the dialog will show the conflicts in a list. The right-hand side of the dialog will show the conflict. The buttons along the bottom can be used to: + +* **Choose Left**: Choose to keep the change on the left for this conflict +* **Choose Right**: Choose to keep the change on the right for this conflict +* **Choose All Left**: Choose to keep the changes on the left for all conflicts +* **Choose All Right**: Choose to keep the changes on the right for all conflicts +* **Cancel Merge**: Stop syncing and return to the latest snapshot without merging + +## API Examples + +Examples of using the `collaboration` and `enterprise` APIs (which are unique to the Enterprise edition of the client) can be found bundled with the client: + +* **macOS**: `Binary\ Ninja.app/Contents/Resources/python/binaryninja/collaboration/examples` +* **Linux**: `binaryninja/python/binaryninja/collaboration/examples` +* **Windows**: `Binary Ninja\python\binaryninja\collaboration\examples` |
