Coder Social home page Coder Social logo

jerlendds / osintbuddy-plugins Goto Github PK

View Code? Open in Web Editor NEW
22.0 2.0 4.0 148 KB

Create and extend OSINT plugins for transforming data in a modular manner: https://github.com/jerlendds/osintbuddy - A plugin based Maltego/Palantir alternative in early alpha

Home Page: https://docs.osintbuddy.com

License: MIT License

Dockerfile 0.75% Python 99.25%
information-gathering maltego-transformations osint osint-python osint-toolkit osint-tools plugin-system plugins reconnaissance

osintbuddy-plugins's Introduction

OSINTBuddy plugins and extensions

The plugins library for jerlendds/osintbuddy.

output.webm

Please note: OSINTBuddy plugins are still in early alpha and breaking changes may occasionally occur in the API. That said, if you remain on the main branch and avoid accessing protected methods we will try our best to avoid introducing breaking changes.

NOTICE: There has been a major update to plugins, any created plugins will have to be updated to use the new, and more convenient data access method:

  • Remove name from any ob.Plugin
  • Update node['data'] access to be node.label_defined_in_node
    • Please see the introduction to the plugin system below

The osintbuddy plugin system at its core is very simple. An OBRegistry class holds all registered OBPlugin classes within the application. This registry is loaded into the osintbuddy application where it is then used to load the available entities for the user when they access a project graph, load transforms when a user opens the context menu of a node, and perform transformations which expect a Plugin.blueprint() to be returned. The returned data of a transform decorated method will be automatically mapped to a JanusGraph database through gremlin according to the labels (as snakecase) you previously set in the classes node for whatever Plugin.blueprint() you return.

To make this a bit more clear please see the below example...

from pydantic import BaseModel
import osintbuddy import transform, Plugin
from osintbuddy.elements import TextInput, DropdownInput, Title, CopyText
from osintbuddy.errors import OBPluginError


class CSESearchResults(Plugin):
    label = "CSE Result"
    name = "CSE result"
    show_label = False  # do not show this on the entities dialog 
    # the user sees on the left of the project graph screen
    color = "#058F63"
    node = [
        Title(label="Result"),
        CopyText(label="URL"),
        CopyText(label="Cache URL"),
    ]


class CSESearchPlugin(Plugin):
    label = "CSE Search"
    name = "CSE search"
    color = "#2C7237"
    node = [
        [
            TextInput(label="Query", icon="search"),
            TextInput(label="Pages", icon="123", default="1"),
        ],
        DropdownInput(label="CSE Categories", options=cse_link_options)
    ]

    @transform(label="To cse results", icon="search")
    async def transform_to_cse_results(
      self,
      node: BaseModel,  # dynamically generated pydantic model 
      # that is mapped from the above labels contained within `node`
      use  # a pydantic model allowing you to access a selenium instance
      # (and eventually a gremlin graph and settings api) 
    ):
        results = []

        if not node.query:
          raise OBPluginError((
            'You can send error messages to the user here'
            'if they forget to submit data or if some other error occurs'
          ))

        # notice how you can access data returned from the context menu
        # of this node; using the label name in snake case
        print(node.cse_categories, node.query, node.pages) 

        ... # (removed code for clarity)

        if resp:
            for result in resp["results"]:
                url = result.get("breadcrumbUrl", {})
                # some elements you can store more than just a string,
                # (these elements storing dicts are mapped 
                # to janusgraph as properties with the names
                # result_title, result_subtitle, and result_text)
                blueprint = CSESearchResults.blueprint(
                    result={
                        "title": result.get("titleNoFormatting"),
                        "subtitle": url.get("host") + url.get("crumbs"),
                        "text": result.get("contentNoFormatting"),
                    },
                    url=result.get("unescapedUrl"),
                    cache_url=result.get("cacheUrl"),
                )
                results.append(blueprint)
        # here we return a list of blueprints (blueprints are dicts)
        # but you can also return a single blueprint without a list
        return results

osintbuddy-plugins's People

Contributors

dependabot[bot] avatar jerlendds avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

osintbuddy-plugins's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.