Skip to content

Commit

Permalink
Merge branch 'white/staging' into white/master
Browse files Browse the repository at this point in the history
  • Loading branch information
Nicolas Rebagliati committed Oct 27, 2022
2 parents 1f35981 + d9cef2c commit e04e75b
Show file tree
Hide file tree
Showing 34 changed files with 1,224 additions and 805 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG/4.2.0/community.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
* Add `stats` param in hosts endpoint.
* [FIX] Now get agents dosent returns tokens
* [FIX] Now when a constrain is violated faraday use the actual object to query if there is another object
* [MOD] Improve agents logs
* Add global commands and summary field in command's model
1 change: 1 addition & 0 deletions CHANGELOG/4.2.0/date.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Oct 27th, 2022
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
Security has two difficult tasks: designing smart ways of getting new information, and keeping track of findings to improve remediation efforts. With Faraday, you may focus on discovering vulnerabilities while we help you with the rest. Just use it in your terminal and get your work organized on the run.
Faraday was made to let you take advantage of the available tools in the community in a truly multiuser way.

Faraday aggregates and normalyzses the data you load, allowing exploring it into different visualizations that are useful to managers and analyst alike.
Faraday aggregates and normalizes the data you load, allowing exploring it into different visualizations that are useful to managers and analysts alike.

![manage](./docs/images/manage.png)
![dashboard](./docs/images/dashboard.png)
Expand Down
8 changes: 8 additions & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@ New features in the latest update
=====================================


4.2.0 [Oct 27th, 2022]:
---
* Add `stats` param in hosts endpoint.
* [FIX] Now get agents dosent returns tokens
* [FIX] Now when a constrain is violated faraday use the actual object to query if there is another object
* [MOD] Improve agents logs
* Add global commands and summary field in command's model

4.1.0 [Sep 12th, 2022]:
---
* Now error 403 will respond a json, not a html
Expand Down
1 change: 1 addition & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ services:
- redis
ports:
- "5985:5985"
- "9000:9000"
volumes:
db:
driver: local
2 changes: 1 addition & 1 deletion faraday/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
See the file 'doc/LICENSE' for the license information
"""

__version__ = '4.1.0'
__version__ = '4.2.0'
__license_version__ = __version__
12 changes: 10 additions & 2 deletions faraday/migrations/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@
# ... etc.


def include_object(object, type_, name, reflected, compare_to):
bind_key = object.info.get("bind_key", None)
if bind_key:
return False
return True


def run_migrations_offline():
"""Run migrations in 'offline' mode.
Expand All @@ -47,7 +54,7 @@ def run_migrations_offline():
"""
url = faraday.server.config.database.connection_string
context.configure(
url=url, target_metadata=target_metadata, literal_binds=True)
url=url, target_metadata=target_metadata, literal_binds=True, include_object=include_object)

with context.begin_transaction():
context.run_migrations()
Expand All @@ -68,7 +75,8 @@ def run_migrations_online():
connection=connection,
target_metadata=target_metadata,
compare_type=True,
transaction_per_migration=True
transaction_per_migration=True,
include_object=include_object
)

with context.begin_transaction():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = '0409e696eeec'
Expand All @@ -18,13 +16,11 @@

def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('workspace', sa.Column('important', sa.Boolean(), nullable=True))
op.execute("ALTER TABLE vulnerability DROP CONSTRAINT check_vulnerability_risk")
op.execute("ALTER TABLE vulnerability DROP CONSTRAINT IF EXISTS check_vulnerability_risk")
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.execute("ALTER TABLE vulnerability ADD CONSTRAINT check_vulnerability_risk CHECK(1.0 <= risk AND risk <= 10.0)")
op.drop_column('workspace', 'important')
...
# ### end Alembic commands ###
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@


# revision identifiers, used by Alembic.
from sqlalchemy import func, case
# from sqlalchemy import func, case

from faraday.server.models import VulnerabilityGeneric, SeveritiesHistogram, Workspace
# from faraday.server.models import VulnerabilityGeneric, SeveritiesHistogram, Workspace

revision = '15d70093d262'
down_revision = 'd8f0b32a5c0e'
Expand All @@ -36,36 +36,36 @@ def upgrade():
op.create_index(op.f('ix_severities_histogram_workspace_id'), 'severities_histogram', ['workspace_id'], unique=False)
# ### end Alembic commands ###

# Init histogram
bind = op.get_bind()
session = sa.orm.Session(bind=bind)
workspaces = session.query(Workspace).all()
for workspace in workspaces:
vulnerabilities = session.query(VulnerabilityGeneric) \
.with_entities(func.date_trunc('day', VulnerabilityGeneric.create_date),
VulnerabilityGeneric.severity,
func.count(VulnerabilityGeneric.severity),
func.sum(case([(VulnerabilityGeneric.confirmed, 1)], else_=0)))\
.filter(VulnerabilityGeneric.workspace_id == workspace.id,
VulnerabilityGeneric.status.notin_(['closed', 'risk-accepted']),
VulnerabilityGeneric.severity.in_(['medium', 'high', 'critical']))\
.group_by(func.date_trunc('day', VulnerabilityGeneric.create_date), VulnerabilityGeneric.severity).all()
for histogram_date, severity_type, severity_count, confirmed_count in vulnerabilities:
severity_histogram = session.query(SeveritiesHistogram)\
.filter(SeveritiesHistogram.date == histogram_date,
SeveritiesHistogram.workspace_id == workspace.id).first()
if severity_histogram is None:
severity_histogram = SeveritiesHistogram(date=histogram_date, workspace=workspace, medium=0, high=0, critical=0, confirmed=0)
session.add(severity_histogram)
session.commit()
if severity_type == 'medium':
severity_histogram.medium = severity_count
if severity_type == 'high':
severity_histogram.high = severity_count
if severity_type == 'critical':
severity_histogram.critical = severity_count
severity_histogram.confirmed += confirmed_count
session.commit()
# # Init histogram
# bind = op.get_bind()
# session = sa.orm.Session(bind=bind)
# workspaces = session.query(Workspace).all()
# for workspace in workspaces:
# vulnerabilities = session.query(VulnerabilityGeneric) \
# .with_entities(func.date_trunc('day', VulnerabilityGeneric.create_date),
# VulnerabilityGeneric.severity,
# func.count(VulnerabilityGeneric.severity),
# func.sum(case([(VulnerabilityGeneric.confirmed, 1)], else_=0)))\
# .filter(VulnerabilityGeneric.workspace_id == workspace.id,
# VulnerabilityGeneric.status.notin_(['closed', 'risk-accepted']),
# VulnerabilityGeneric.severity.in_(['medium', 'high', 'critical']))\
# .group_by(func.date_trunc('day', VulnerabilityGeneric.create_date), VulnerabilityGeneric.severity).all()
# for histogram_date, severity_type, severity_count, confirmed_count in vulnerabilities:
# severity_histogram = session.query(SeveritiesHistogram)\
# .filter(SeveritiesHistogram.date == histogram_date,
# SeveritiesHistogram.workspace_id == workspace.id).first()
# if severity_histogram is None:
# severity_histogram = SeveritiesHistogram(date=histogram_date, workspace=workspace, medium=0, high=0, critical=0, confirmed=0)
# session.add(severity_histogram)
# session.commit()
# if severity_type == 'medium':
# severity_histogram.medium = severity_count
# if severity_type == 'high':
# severity_histogram.high = severity_count
# if severity_type == 'critical':
# severity_histogram.critical = severity_count
# severity_histogram.confirmed += confirmed_count
# session.commit()


def downgrade():
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
"""rename important with importance and remove check constraint
Revision ID: 3eb96406e88d
Revises: 0409e696eeec
Create Date: 2022-09-30 19:15:05.214519+00:00
"""
from alembic import op
import sqlalchemy as sa

# revision identifiers, used by Alembic.
revision = '3eb96406e88d'
down_revision = '0409e696eeec'
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('vulnerability', sa.Column('epss', sa.Float(), nullable=True))
op.execute("ALTER TABLE vulnerability DROP COLUMN IF EXISTS risk")
op.execute("ALTER TABLE vulnerability ADD COLUMN IF NOT EXISTS risk INTEGER NULL")
op.execute("ALTER TABLE workspace DROP COLUMN IF EXISTS important")
op.execute("ALTER TABLE host DROP COLUMN IF EXISTS important")
op.execute("ALTER TABLE workspace ADD COLUMN IF NOT EXISTS importance INTEGER NULL DEFAULT 0")
op.execute("ALTER TABLE host ADD COLUMN IF NOT EXISTS importance INTEGER NULL DEFAULT 0")
op.execute("ALTER TABLE vulnerability DROP CONSTRAINT IF EXISTS check_vulnerability_risk")
op.drop_constraint('uix_reference_name_vulnerability_workspace', 'reference', type_='unique')
op.create_unique_constraint('uix_reference_name_type_vulnerability_workspace', 'reference',
['name', 'type', 'workspace_id'])
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint('uix_reference_name_type_vulnerability_workspace', 'reference', type_='unique')
op.create_unique_constraint('uix_reference_name_vulnerability_workspace', 'reference', ['name', 'workspace_id'])
op.drop_column('workspace', 'importance')
op.drop_column('host', 'importance')
op.execute("ALTER TABLE host ADD COLUMN important BOOLEAN NULL DEFAULT FALSE")
op.drop_column('vulnerability', 'epss')
# ### end Alembic commands ###
Loading

0 comments on commit e04e75b

Please sign in to comment.