🛠️ OPSE Part 3: Create your own plugin

Introduction
In this article, we’ll explain to you how to write your own plugin to extand and automate the OSINT process.
By following this guide, developer’s plugins will be automatically added to the OPSE core.
This article is part of a three-part series on the OPSE project. In this series of articles we will present different part of the project:
- Presentation of the tool w/ installation, usage and an example;
- A technical presentation of the tool, how it is thinked and coded;
- A guide to develop your own OPSE plugin !
Context
During our fourth year in engeneering school, we led a project on the OSINT theme. We asked ourselves how we could obtain as much personnal informations as possible on someone with few data at the beginning.
We started to imagine an automatic tool that, with few input data such as firstname and lastname, would be able to find many connections of this person on the internet. But we wanted it to be an help for anyone else in the future, so they can reuse it and modify it.
Our objectives were simple:
- automatic;
- fast;
- modular;
- open-source.
This project is now open-source and available on Github: https://github.com/OPSE-Developers/OPSE-Framework
You want to contribute on the OPSE project ? Join the Discord server by clicking on the logo !
⚙️ Write your own plugin
OPSE-core: Tool class
Each module is represented by a subclass of Tool
. A module is a process started by OPSE during execution. If an error occurs in the process, it will be caught and will not affect the other modules.
The development of a module can be done in the execute()
method which will be launched at the start of the process.
|
|
To work, the module require some informations. First, it is possible to define a default configuration in the get_config()
method. By default, configuration is:
|
|
To give the user the opportunity to change some parameters of a plugin, you just need to add those parameters in the get_config()
method.
|
|
Then, it is necessary to define types of data processed in I/O by the module. This can be done in get_lst_input_data_types()
& get_lst_output_data_types()
method. Without defining types of data, the module will not be executed.
|
|
Get input data
It is possible to get the profile responsible of the execution of the module with the get_default_profile()
method. When default profile is gathered, we have access to required data (data that we have defined in the get_lst_input_data_types()
) through getters of the Profile
class.
|
|
Return profiles
In order for the OPSE tool to process founded data correctly, it is necessary to store data in one or more profiles. These profiles are children of the default profile, so we need to clone the default profile and then add our data to the clones.
|
|
Once this is done, the module is ready to be connected.
⚙️ Integrate your plugin to the OPSE core
To connect a module to OPSE core, you will need to place the module in the /core/tools/
directory.
|
|
Once installed, it is necessary to launch OPSE one time to generate the default configuration. The configuration is generated at config.yml
.
⚠️ You should review the configuration to configure each module.
|
|
Other entry are automatically generated by OPSE.
📖 The final words
In this series of three articles we presented to you our tool OPSE.
First, we explained to you how it works by doing a simple research. Then, we went deeper in the OPSE core. We presented how the tool was built, the modularity of the project and how we manage plugins. Finally, we explained, on this article, how developer can create their own plugins to be added to the OPSE core and be a part of the project.
We currently work on plugins development, and we are open to any contributions that can improve the core or idea of new plugins that we can add to the project.
📚 Here are the links to other articles about the project:
🛠️ OPSE Part 1: A search engine for people