mirror of
https://github.com/BC-SECURITY/Empire
synced 2026-06-08 10:26:49 +00:00
44 lines
1.2 KiB
Markdown
44 lines
1.2 KiB
Markdown
# Database Usage
|
|
|
|
Execute functions and hooks/filters are sent a SQLAlchemy database session. This does
|
|
not need to be opened or closed, as the calling code handles that. The database session
|
|
is passed in as a keyword argument.
|
|
|
|
```python
|
|
from sqlalchemy.orm import Session
|
|
|
|
def execute(self, command, **kwargs):
|
|
user = kwargs.get('user', None)
|
|
db: Session = kwargs.get('db', None)
|
|
|
|
agents = self.main_menu.agentsv2.get_all(db)
|
|
|
|
return "Execution complete"
|
|
```
|
|
|
|
It is important not to close the database session, as it will be used by the calling
|
|
code and sent to other hooks/filters.
|
|
|
|
```python
|
|
from sqlalchemy.orm import Session
|
|
from empire.server.core.db import models
|
|
|
|
def on_agent_checkin(self, db: Session, agent: models.Agent):
|
|
# Do something
|
|
pass
|
|
```
|
|
|
|
When executing code outside of the execute function or hooks/filters, you will need to
|
|
open a database session. This means that you must handle your database session in the
|
|
plugin. Using the Context Manager syntax ensures the db session commits and closes
|
|
properly.
|
|
|
|
```python
|
|
from empire.server.core.db.base import SessionLocal
|
|
|
|
def do_something():
|
|
with SessionLocal.begin() as db:
|
|
# Do the things with the db session
|
|
pass
|
|
```
|