Database

The database is a graph-oriented database from ArangoDB.

It is initialized when creating an admin user when the app is started for the first time (in /passiveDNS/db/database.py)

Database schema

database schema

Structure of collections

Nodes

Users

{
    "_key": "username",
    "hashed_password": "str",
    "role": "user|admin|scheduler",
    "api_keys": {
        "api_name":"key",
        "..."
    }
}

Domain Name

{
    "_key": "domain",
    "records": ["..."],
    "registrar": "str",
    "created_at": "datetime",
}

Channel

{
    "_key": "name",
    "type": "redis",
    "infos": {
        "host": "str",
        "port": "str",
        "db": "str"
    },
}

IPAddress

{
    "_key": "address",
    "location": {
        "country":"str",
        "country_code":"str",
        "region":"str",
        "region_name":"str",
        "city":"str",
        "zip_code":"str",
        "latitude":"float",
        "longitude":"float",
        "timezone":"str",
        "ISP":"str",
        "organization":"str",
        "AS":"str",
    },
}

Tag

{
    "_key": "name",
}

ApiIntegration

{
    "_key": "name",
    "base_url": "str",
    "header": "str",
    "ip": {
        "method": "GET|POST",
        "uri": "str",
    },
    "domain": {
        "method": "GET|POST",
        "uri": "str",
    },
}

Edges

UserDn

{
    "_from": "Users/username",
    "_to": "DomainName/domain",
    "username": "str",
    "domain_name": "str",
    "owned": "str",
}

DomainNameResolution

{
    "_from": "DomainName/domain",
    "_to": "IPAddress/address",
    "domain_name": "str",
    "ip_address": "str",
    "resolver": "str",
    "last_updated_at": "datetime",
    "first_updated_at": "datetime",
}

TagDnIp

{
    "_from": "Tag/name",
    "_to": "DomainName/domain|IPAddress/address",
    "tag": "str",
    "object": "str",
    "type": "DomainName|IPAddress",
}