Updated version of pydradis3 that was developed by GoVanguard
Project description
Dradis-Client
Reworked and Maintained by no-sec-marko (DradisClient - 2021).
Updated by GoVanguard (PyDradis3 - 2018).
Originally created by Novacoast (PyDradis).
About Dradis-Client
This is a wrapper for the Dradis Pro API written in Python 3.
The original project was developed by Novacoast and updated by GoVanguard. In Dradis-Client, all API calls were updated
to the latest version of Dradis Pro API (currently v4.0).
Installation
Install pulling from this repo:
git clone https://github.com/no-sec-marko/Dradis-Client.git
Local installation
chmod +x packageIt.sh
./packageIt.sh
python3 -m pip install ./dist/dradis-client-1.0.0.tar.gz
Usage
Initial setup of DradisClient:
from dradis import DradisClient
debug = True # Do you want to see debug info?
verify = True # Force ssl certificate verification?
api_token = '<DRADIS API KEY>'
server_url = '<DRADIS SERVER URL>'
client = DradisClient(api_token, server_url, debug, verify)
All endpoints have 5 functions that work roughly the same:
-
Get: Given an element id, returns the element info.
-
Get Lists: Returns list of Clients, Projects, etc.
-
Create: Creates elements and returns their id.
-
Update: Updates elements and returns their id.
-
Delete: Deletes elements and returns True if successful.
Teams Endpoint
team_id = 1
# Retrieves all teams as list, reduced by name and team id.
teams = client.get_teams_list()
# Retrieves a single team.
team_by_id = client.get_team(team_id=team_id)
# Creates a team based on the name.
new_team_id = client.create_team(team_name='Test Team 1')
# Updates a team. Pass the name of the team.
updated_team_id = client.update_team(team_id=new_team_id, team_name='Test Team 1 - Updated')
# Search for Team by team name.
test_team_1_u = client.find_team_by_name(team_name='Test Team 1 - Updated')
# Deletes a team.
is_team_deleted = client.delete_team(team_id=updated_team_id)
Users Endpoint
# Retrieves all users.
users = client.get_users_list()
# Retrieves a single user.
user = client.get_user(users[0][0][1])
Project Endpoint
# Retrieves all projects
project_list = client.get_project_list
# Retrieves a single project.
project = client.get_project(pid=36)
# Creates a project.
new_project_id = client.create_project(project_name='Test Project 4', team_id=1, report_template_properties_id=4,
template='Welcome Project Template')
# Updates a project.
new_updated_project_id = client.update_project(pid=new_project_id, project_name='Test Project 4 - Updated',
team_id=1, report_template_properties_id=8,
template='Welcome Project Template')
# Finds a project by name.
updated_project = client.find_project_by_name(project_name='Test Project 4 - Updated')
# Deletes a project.
is_project_deleted = client.delete_project(pid=new_updated_project_id)
Node Endpoint
pid = 36
# Retrieves all the Nodes in your specific project
node_list = client.get_node_list(pid=pid)
# Retrieves a single Node from your specified project and displays all the Evidence and Notes associated with the Node.
node = client.get_node(pid=pid, node_id=544)
# Creates a Node in the specified project.
new_node = client.create_node(pid=pid, label='New Node')
# Updates a Node in your specified project.
updated_node = client.update_node(pid=pid, node_id=new_node, label='Updated Test Node', type_id=1, position=2)
# Deletes a Node from your specified project.
is_node_deleted = client.delete_node(pid=pid, node_id=updated_node)
Issues Endpoint
pid = 36
# Retrieves all the Issues in your specific project.
all_issues = client.get_issue_list(pid=pid)
# Retrieves a single Issue from your specified project.
issue = client.get_issue(pid=pid, issue_id=all_issues[0][0][1])
new_issue_text = {"Title": "Dangerous HTTP methods: TRACE",
"Rating": "Medium",
"Description": "The TRACE HTTP method is used as a debugging mechanism that allows the client to "
"see what is being received at the other end of the request chain and use that data "
"for testing and diagnostic information."}
tags = ['en', 'mobile']
# Creates an Issue in the specified project.
new_issue_id = client.create_issue(pid=pid, title="New Issue", issue_properties=new_issue_text, tags=tags)
updated_issue_text = {"Title": "Updated Issue Title",
"Rating": "Medium",
"Description": "Updated sample Issue description."}
# Updates an Issue in the specified project.
updated_issue_id = client.update_issue(pid=pid, issue_id=new_issue_id, title="Updated Issue Title",
issue_properties=updated_issue_text, tags=tags)
# Deletes an Issue from your specified project.
is_issue_deleted = client.delete_issue(pid=pid, issue_id=updated_issue_id)
Evidence Endpoint
pid = 36
node_id = 544
issue_id = 1819
new_evidence_props = {"Description": "bc. Placeholder evidence content."}
updated_evidence_props = {"Description": "bc. Updated evidence content."}
# Retrieves all the Evidence associated with the specific Node in your project
evidences = client.get_evidence_list(pid=pid, node_id=node_id)
# Retrieves a single piece of Evidence from a Node in your project.
evidence = client.get_evidence(pid=pid, node_id=node_id, evidence_id=8017)
# Creates a piece of Evidence on the specified Node in your project.
new_evidence_id = client.create_evidence(pid=pid, node_id=node_id, issue_id=issue_id,
evidence_properties=new_evidence_props)
# Updates a specific piece of Evidence on a Node in your project.
updated_evidence_id = client.update_evidence(pid=pid, node_id=node_id, issue_id=issue_id, evidence_id=new_evidence_id,
evidence_properties=updated_evidence_props)
# Deletes a piece of Evidence from the specified Node in your project.
is_evidence_deleted = client.delete_evidence(pid=pid, node_id=node_id, evidence_id=new_evidence_id)
Content Block Endpoint
pid = 36
cb_id = 333
cb_content = {'Title': 'New Content Block', 'Description': 'Sample content.'}
# Retrieves all of the Content Blocks in your project.
content_blocks = client.get_content_blocks(pid=pid)
# Retrieves a single Content Block from your project.
content_block = client.get_content_block(pid=pid, block_id=cb_id)
# Creates a Content Block in your project.
new_content_block_id = client.create_content_block(pid=pid, block_properties=cb_content, block_group='Conclusions')
cb_content['Title'] = 'Updated Content Block'
updated_cb_content = cb_content
# Updates a specific Content Block in your project.
updated_content_block_id = client.update_content_block(pid=pid, block_id=new_content_block_id,
block_properties=updated_cb_content)
# Deletes a specific Content Block from your project.
is_content_block_deleted = client.delete_content_block(pid=pid, block_id=updated_content_block_id)
Note Endpoint
pid = 36
node_id = 544
new_note = {'Title': 'Host Details', 'Type': 'Details', 'Description': 'Lorem ipsum dolor sit amet, consectetur '
'adipiscing elit. Nullam fringilla tristique '
'nisi, id cursus elit tincidunt egestas. Nunc '
'sagittis libero eu hendrerit aliquam.'}
# Retrieves all of the Notes associated with the specific Node in your project.
notes = client.get_note_list(pid=pid, node_id=node_id)
# Retrieves a single Note from the specific Node in your project.
note = client.get_note(pid=pid, node_id=node_id, note_id=notes[0][0][1])
# Creates a Note on the specified Node in your project.
new_note_id = client.create_note(pid=pid, node_id=node_id, note_properties=new_note, category=0)
new_note['Title'] = 'Updated Host Details'
updated_note = new_note
# Updates a Note on the specified Node in your project.
updated_note_id = client.update_note(pid=pid, node_id=node_id, note_id=new_note_id, note_properties=updated_note,
category=1)
# Deletes a Note from the specified Node in your project.
is_note_deleted = client.delete_note(pid=pid, node_id=node_id, note_id=updated_note_id)
Document Properties Endpoint
pid = 36
new_doc_props = {'dradis.client': 'ACME Ltd.', 'dradis.project': 'Test'}
# Retrieves all of the Document Properties associated with the specific project.
doc_props = client.get_document_properties(pid=pid)
# Retrieves a single Document Property from the specific Node in your project.
doc_prop = client.get_document_property(pid=pid, property_key='dradis.projectname')
# Creates a Document Property in your project.
is_doc_props_created = client.create_document_properties(pid=pid, document_properties=new_doc_props)
updated_doc_prop = {'dradis.project': 'Test'}
# Updates a Note on the specified Node in your project.
is_doc_prop_updated = client.update_document_property(pid=pid, property_key='dradis.project', property_value='Updated Value')
# Deletes a Document Property in your project.
is_doc_prop_deleted_1 = client.delete_document_property(pid=pid, property_key='dradis.project')
is_doc_prop_deleted_2 = client.delete_document_property(pid=pid, property_key='dradis.client')
Attachment Endpoint
pid = 36
node_id = 544
# Retrieves all the Attachments associated with the specific Node in your project.
attachments = client.get_attachment_list(pid=pid, node_id=node_id)
# Retrieves a single attachment from a Node in your project.
attachment = client.get_attachment(pid=pid, node_id=node_id, attachment_name=attachments[0]['filename'])
# Creates an Attachment on the specified Node in your project.
new_attachment = client.create_attachment(pid=pid, node_id=node_id, attachment_filename='testfile.png')
# Renames a specific Attachment on a Node in your project.
updated_attachment_name = client.rename_attachment(pid=pid, node_id=node_id,
attachment_filename=new_attachment[0],
new_attachment_filename='renamed-testfile.png')
cookie = client.get_dradis_cookie(username='no-sec-marko', password='P4ssw0rd!')
# Downloads a specific Attachment on a Node in your project but needs a valid Dradis session cookie.
is_attachment_downloaded = client.download_attachment(pid=pid, node_id=node_id,
attachment_name=updated_attachment_name['filename'],
cookie=cookie, output_file='./attachment.png')
# Deletes an Attachment from the specified Node in your project.
is_attachment_deleted = client.delete_attachment(pid=pid, node_id=node_id,
attachment_name=updated_attachment_name['filename'])
IssueLibrary Endpoint
# Retrieves all of the IssueLibrary entries from your instance.
library = client.get_issue_library_list()
# Retrieves a single IssueLibrary entry.
issue_entry = client.get_issue_library_entry(issuelib_id=library[0]['id'])
new_lib_issue = {'Title': 'Dangerous HTTP methods: TRACE', 'Rating': 'Medium', 'Description': 'The TRACE HTTP method is '
'used as a debugging '
'mechanism that allows the '
'client to see what is '
'being received at the '
'other end of the request '
'chain and use that data '
'for testing and diagnostic '
'information.'}
updated_lib_issue = {'Title': 'Dangerous HTTP methods: TRACE', 'Rating': 'Medium', 'Description': 'Updated sample '
'IssueLibrary entry '
'description'}
# Creates an IssueLibrary entry.
new_lib_issue_id = client.create_issue_library_entry(issue_library_properties=new_lib_issue)
# Updates a specific IssueLibrary entry.
updated_lib_issue_id = client.update_issue_library_entry(issuelib_id=new_lib_issue_id, issue_library_properties=updated_lib_issue)
# Deletes a specific IssueLibrary entry from your instance.
is_lib_issue_deleted = client.delete_issue_library_entry(issuelib_id=updated_lib_issue_id)
License
Dradis-Client is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Dradis-Client is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with Dradis-Client. If not, see http://www.gnu.org/licenses/.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dradis-client-1.0.0.tar.gz.
File metadata
- Download URL: dradis-client-1.0.0.tar.gz
- Upload date:
- Size: 16.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad0c4ca81c71b48069a7fbabb94257f986c3868147187c02b912a70a9fa9a922
|
|
| MD5 |
2ca3bfd7477cf7685d6236f69ec3b00f
|
|
| BLAKE2b-256 |
70c6d2f3a237f6e600d99a088779d50696ac1d9c1b47c17dbfa6ca12100556dd
|
File details
Details for the file dradis_client-1.0.0-py3-none-any.whl.
File metadata
- Download URL: dradis_client-1.0.0-py3-none-any.whl
- Upload date:
- Size: 15.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9535067d67d1660bc904d8fc8be2987cff056d8627b29826f27aa469cf57dd9d
|
|
| MD5 |
a6e636caa69fdbae1cacad69d76aee5e
|
|
| BLAKE2b-256 |
e2329aa841e8871934f2f1ea8ec52b500997fb580901e9cf4008fa7eeb21c1b5
|