From a0132eed82d28d4408a2475847e1804a157b3dc1 Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Sat, 4 Mar 2017 18:11:43 -0500 Subject: Adding repo manager APIs --- binaryninjaapi.h | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) (limited to 'binaryninjaapi.h') diff --git a/binaryninjaapi.h b/binaryninjaapi.h index a918fc42..0ba18f05 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -341,6 +341,7 @@ namespace BinaryNinja void InitCorePlugins(); void InitUserPlugins(); + void InitRepoPlugins(); std::string GetBundledPluginDirectory(); void SetBundledPluginDirectory(const std::string& path); std::string GetUserPluginDirectory(); @@ -2425,4 +2426,86 @@ namespace BinaryNinja virtual BNMessageBoxButtonResult ShowMessageBox(const std::string& title, const std::string& text, BNMessageBoxButtonSet buttons = OKButtonSet, BNMessageBoxIcon icon = InformationIcon) = 0; }; + + typedef BNPluginOrigin PluginOrigin; + typedef BNPluginUpdateStatus PluginUpdateStatus; + typedef BNPluginType PluginType; + typedef BNRepositoryManifest RepositoryManifest; + + class RepoPlugin: public CoreRefCountObject + { + public: + RepoPlugin(const std::string& path, + bool installed, + bool enabled, + const std::string& api, + const std::string& author, + const std::string& description, + const std::string& license, + const std::string& licenseText, + const std::string& longdescription, + const std::string& minimimVersions, + const std::string& name, + const std::vector& pluginTypes, + const std::string& url, + const std::string& version); + RepoPlugin(BNRepoPlugin* plugin); + std::string GetPath() const; + bool IsInstalled() const; + std::string GetPluginDirectory() const; + void SetEnabled(bool enabled); + bool IsEnabled() const; + PluginUpdateStatus GetPluginUpdateStatus() const; + std::string GetApi() const; + std::string GetAuthor() const; + std::string GetDescription() const; + std::string GetLicense() const; + std::string GetLicenseText() const; + std::string GetLongdescription() const; + std::string GetMinimimVersions() const; + std::string GetName() const; + std::vector GetPluginTypes() const; + std::string GetUrl() const; + std::string GetVersion() const; + }; + + class Repository: public CoreRefCountObject + { + public: + Repository(const std::string& url, // URL of the git repository containing the plugins + const std::string& repoPath, // Name of the directory to store this repository within the repositories directory + const std::string& repoManifest="plugins", // Name of the of the inner directory and .json file + const std::string& localReference="master", + const std::string& remoteReference="origin"); + Repository(BNRepository* repository); + ~Repository(); + std::string GetUrl() const; + std::string GetRepoPath() const; + std::string GetLocalReference() const; + std::string GetRemoteReference() const; + std::vector> GetPlugins() const; + bool IsInitialized() const; + std::string GetPluginDirectory() const; + Ref GetPluginByPath(const std::string& pluginPath); + std::string GetFullPath() const; + }; + + class RepositoryManager: public CoreRefCountObject + { + bool m_core; + public: + RepositoryManager(std::vector>& repoInfo, const std::string& enabledPluginsPath); + RepositoryManager(BNRepositoryManager* repoManager); + RepositoryManager(); + ~RepositoryManager(); + bool CheckForUpdates(); + std::vector> GetRepositories(); + Ref GetRepositoryByPath(const std::string& repoName); + bool AddRepository(Ref repo); + bool EnablePlugin(const std::string& repoName, const std::string& pluginPath); + bool DisablePlugin(const std::string& repoName, const std::string& pluginPath); + bool InstallPlugin(const std::string& repoName, const std::string& pluginPath); + bool UninstallPlugin(const std::string& repoName, const std::string& pluginPath); + Ref GetDefaultRepository(); + }; } -- cgit v1.3.1