46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
"""Add agent_credentials table for storing encrypted login credentials and cookies.
|
|
|
|
Revision ID: add_agent_credentials
|
|
"""
|
|
|
|
from alembic import op
|
|
|
|
|
|
revision = "add_agent_credentials"
|
|
down_revision = "add_tool_source"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
"""Create agent_credentials table (idempotent)."""
|
|
op.execute("""
|
|
CREATE TABLE IF NOT EXISTS agent_credentials (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
|
|
credential_type VARCHAR(20) DEFAULT 'website',
|
|
platform VARCHAR(100) NOT NULL,
|
|
display_name VARCHAR(200) DEFAULT '',
|
|
username TEXT,
|
|
password TEXT,
|
|
login_url VARCHAR(500),
|
|
cookies_json TEXT,
|
|
cookies_updated_at TIMESTAMPTZ,
|
|
status VARCHAR(20) DEFAULT 'active',
|
|
last_login_at TIMESTAMPTZ,
|
|
last_injected_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
)
|
|
""")
|
|
op.execute(
|
|
"CREATE INDEX IF NOT EXISTS ix_agent_credentials_agent_id "
|
|
"ON agent_credentials(agent_id)"
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
"""Drop agent_credentials table."""
|
|
op.execute("DROP INDEX IF EXISTS ix_agent_credentials_agent_id")
|
|
op.execute("DROP TABLE IF EXISTS agent_credentials")
|