Skip to content

Commit

Permalink
soar-15967 update dependencies, update plugin runtime, add unit tests (
Browse files Browse the repository at this point in the history
  • Loading branch information
llaszuk-r7 authored Nov 13, 2023
1 parent d624cef commit b80c637
Show file tree
Hide file tree
Showing 18 changed files with 171 additions and 229 deletions.
10 changes: 5 additions & 5 deletions plugins/pdf_generator/.CHECKSUM
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{
"spec": "cd197acd42f077d07b4734d25178439d",
"manifest": "4cace783bc21dc6e9d5e641722ee1c52",
"setup": "ac9cabc3a4b9f42bcd440280d7ab188f",
"spec": "ef0d3ba33cfdb35d007174f323079e63",
"manifest": "2daa5f5af570451e47c6d6c91e425794",
"setup": "2a984e9284f0d9571da1a489fb3e59ea",
"schemas": [
{
"identifier": "generate_pdf/schema.py",
"hash": "bd8b3fc54016cf8b4f4ad9950d00b712"
"hash": "8abe08954429699de0bb10d17b310e9f"
},
{
"identifier": "connection/schema.py",
"hash": "cb60c2b5b62fafb9634d667a8ad96277"
"hash": "bd524b567f9638ba1c6f7e0c9e45ff2e"
}
]
}
28 changes: 12 additions & 16 deletions plugins/pdf_generator/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
FROM komand/python-3-plugin:2
# The three supported python parent images are:
# - komand/python-2-plugin
# - komand/python-3-plugin
# - komand/python-pypy3-plugin
#
# Update the tag to a full semver version
FROM rapid7/insightconnect-python-3-38-plugin:5

# Add any custom package dependencies here
# NOTE: Add pip packages to requirements.txt
LABEL organization=rapid7
LABEL sdk=python

# End package dependencies

# Add source code
WORKDIR /python/src

ADD ./plugin.spec.yaml /plugin.spec.yaml
ADD . /python/src
ADD ./requirements.txt /python/src/requirements.txt

# Install pip dependencies
RUN apt-get update && apt-get install -y python3-pip python3-cffi python3-brotli libpango-1.0-0 libpangoft2-1.0-0 libpangocairo-1.0-0
RUN if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

# Install plugin
RUN python setup.py build && python setup.py install
ADD . /python/src

RUN python setup.py build && python setup.py install

# User to run plugin code. The two supported users are: root, nobody
USER nobody

ENTRYPOINT ["/usr/local/bin/komand_pdf_generator"]
46 changes: 30 additions & 16 deletions plugins/pdf_generator/bin/komand_pdf_generator
Original file line number Diff line number Diff line change
@@ -1,30 +1,44 @@
#!/usr/bin/env python
# GENERATED BY KOMAND SDK - DO NOT EDIT
import komand
from komand_pdf_generator import connection, actions, triggers
# GENERATED BY INSIGHT-PLUGIN - DO NOT EDIT
import os
import json
from sys import argv

Name = "PDF Generator"
Vendor = "rapid7"
Version = "1.0.2"
Description = "Create PDF reports from workflow data"

Name = 'PDF Generator'
Vendor = 'rapid7'
Version = '1.0.1'
Description = 'Create PDF reports from workflow data'


class ICONPdfGenerator(komand.Plugin):
def __init__(self):
super(self.__class__, self).__init__(
def main():
if 'http' in argv:
if os.environ.get("GUNICORN_CONFIG_FILE"):
with open(os.environ.get("GUNICORN_CONFIG_FILE")) as gf:
gunicorn_cfg = json.load(gf)
if gunicorn_cfg.get("worker_class", "sync") == "gevent":
from gevent import monkey
monkey.patch_all()
elif 'gevent' in argv:
from gevent import monkey
monkey.patch_all()

import insightconnect_plugin_runtime
from komand_pdf_generator import connection, actions, triggers, tasks

class ICONPdfGenerator(insightconnect_plugin_runtime.Plugin):
def __init__(self):
super(self.__class__, self).__init__(
name=Name,
vendor=Vendor,
version=Version,
description=Description,
connection=connection.Connection()
)
self.add_action(actions.GeneratePdf())
)
self.add_action(actions.GeneratePdf())



def main():
"""Run plugin"""
cli = komand.CLI(ICONPdfGenerator())
cli = insightconnect_plugin_runtime.CLI(ICONPdfGenerator())
cli.run()


Expand Down
65 changes: 46 additions & 19 deletions plugins/pdf_generator/help.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,54 +8,81 @@ reports to distribute workflow details.
* Generate a PDF

# Requirements

*This plugin does not contain any requirements.*

_This plugin does not contain any requirements._
# Supported Product Versions

* Pillow 10.1.0
* WeasyPrint==52.5

# Documentation

## Setup

This plugin does not contain a connection.
*This plugin does not contain a connection.*

## Technical Details

### Actions

#### Generate PDF

This action is used to generate a PDF from a text input.
#### Generate PDF

Generate a PDF from a text input

##### Input

|Name|Type|Default|Required|Description|Enum|
|----|----|-------|--------|-----------|----|
|text|string|None|True|Text input|None|
|Name|Type|Default|Required|Description|Enum|Example|
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|text|string|None|True|Text input|None|example|

Example input:

##### Output
```
{
"text": "example"
}
```

|Name|Type|Required|Description|
|----|----|--------|-----------|
|pdf|bytes|True|Generated PDF|
##### Output

|Name|Type|Required|Description|Example|
| :--- | :--- | :--- | :--- | :--- |
|pdf|bytes|True|Generated PDF|UmFwaWQ3IEluc2lnaHRDb25uZWN0Cgo=|

Example output:

```
{
"pdf": "UmFwaWQ3IEluc2lnaHRDb25uZWN0Cgo="
}
```
### Triggers

*This plugin does not contain any triggers.*
### Tasks

*This plugin does not contain any tasks.*

This plugin does not contain any triggers.

### Custom Output Types

_This plugin does not contain any custom output types._
### Custom Types

*This plugin does not contain any custom output types.*

## Troubleshooting

This plugin does not contain any troubleshooting information.
*There is no troubleshooting for this plugin.*

# Version History

* 1.0.2 - Update plugin runtime to InsightConnect | Add unit tests | Updated all dependencies to the newest versions
* 1.0.1 - New spec and help.md format for the Extension Library
* 1.0.0 - Initial plugin

# Links

[Weasyprint](https://doc.courtbouillon.org/weasyprint/stable/)

## References

* [PDF](https://en.wikipedia.org/wiki/Portable_Document_Format)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
# GENERATED BY KOMAND SDK - DO NOT EDIT
# GENERATED BY INSIGHT-PLUGIN - DO NOT EDIT

from .generate_pdf.action import GeneratePdf

Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# GENERATED BY KOMAND SDK - DO NOT EDIT
# GENERATED BY INSIGHT-PLUGIN - DO NOT EDIT
from .action import GeneratePdf
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import komand
from .schema import GeneratePdfInput, GeneratePdfOutput

# Custom imports below
from base64 import b64encode
from html import escape
from textwrap import wrap

import insightconnect_plugin_runtime
from weasyprint import HTML
from cgi import escape

from .schema import GeneratePdfInput, GeneratePdfOutput


class GeneratePdf(komand.Action):
class GeneratePdf(insightconnect_plugin_runtime.Action):
def __init__(self):
super(self.__class__, self).__init__(
name="generate_pdf",
Expand Down Expand Up @@ -39,138 +39,3 @@ def run(self, params={}):
b64_content = b64encode(pdf_content).decode()

return {"pdf": b64_content}

def test(self):
return {
"pdf": (
"JVBERi0xLjMKJeLjz9MKMSAwIG9iago8PC9BdXRob3IgPD4gL0NyZWF0b3IgK"
"GNhaXJvIDEuMTQuMCAoaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnKSkKICAvS2"
"V5d29yZHMgPD4gL1Byb2R1Y2VyIChXZWFzeVByaW50IDAuNDIuMyBcKGh0dHA"
"6Ly93ZWFzeXByaW50Lm9yZy9cKSkKICAvVGl0bGUgPD4+PgplbmRvYmoKMiAw"
"IG9iago8PC9QYWdlcyAzIDAgUiAvVHlwZSAvQ2F0YWxvZz4+CmVuZG9iagozI"
"DAgb2JqCjw8L0NvdW50IDEgL0tpZHMgWzQgMCBSXSAvVHlwZSAvUGFnZXM+Pg"
"plbmRvYmoKNCAwIG9iago8PC9CbGVlZEJveCBbMCAwIDU5NSA4NDFdIC9Db25"
"0ZW50cyA1IDAgUiAvR3JvdXAKICA8PC9DUyAvRGV2aWNlUkdCIC9JIHRydWUg"
"L1MgL1RyYW5zcGFyZW5jeSAvVHlwZSAvR3JvdXA+PiAvTWVkaWFCb3gKICBbM"
"CAwIDU5NSA4NDFdIC9QYXJlbnQgMyAwIFIgL1Jlc291cmNlcyA2IDAgUiAvVH"
"JpbUJveCBbMCAwIDU5NSA4NDFdCiAgL1R5cGUgL1BhZ2U+PgplbmRvYmoKNSA"
"wIG9iago8PC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjEgMCBSPj4K"
"c3RyZWFtCnicNYyxCsJAEET7/YoptUhub8mephUES4UtbUK4C0iM5i7/j0fAa"
"ob3hllphbsP2xbzgrHAfRVlXOAGxlSIwdBece48ckSix44YefpPLkZedlYjSC"
"uKU/BtYO1CD3uTSw031cISHZ4i/hbn+VOLHO1FV6ufP7cSH6UKZW5kc3RyZWF"
"tCmVuZG9iago2IDAgb2JqCjw8L0V4dEdTdGF0ZSA8PC9hMCA8PC9DQSAxIC9j"
"YSAxPj4+PiAvRm9udCA8PC9mLTAtMCA3IDAgUj4+IC9QYXR0ZXJuCiAgPDwvc"
"DUgOCAwIFI+Pj4+CmVuZG9iago3IDAgb2JqCjw8L0Jhc2VGb250IC9YTVpMSl"
"ErRGVqYVZ1U2Fuc01vbm8gL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgL0Z"
"pcnN0Q2hhcgogIDMyIC9Gb250RGVzY3JpcHRvciAxNiAwIFIgL0xhc3RDaGFy"
"IDE0NiAvU3VidHlwZSAvVHJ1ZVR5cGUgL1RvVW5pY29kZQogIDE3IDAgUiAvV"
"HlwZSAvRm9udCAvV2lkdGhzCiAgWzAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwID"
"AgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAo"
"gIDAgMCAwIDAgMCA2MDIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg"
"MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAogIDYwMiAwIDAgMCAwIDAgMCA2M"
"DIgMCAwIDYwMiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC"
"AwIDAgMAogIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDYwMiA2MDJdPj4KZW5"
"kb2JqCjggMCBvYmoKPDwvQkJveCBbMCAxMTIzIDc5NCAyMjQ2XSAvTGVuZ3Ro"
"IDkgMCBSIC9NYXRyaXggWzAuNzUgMCAwIDAuNzUgMCAtODQzLjVdCiAgL1Bha"
"W50VHlwZSAxIC9QYXR0ZXJuVHlwZSAxIC9SZXNvdXJjZXMgPDwvWE9iamVjdC"
"A8PC94OCAxMCAwIFI+Pj4+CiAgL1RpbGluZ1R5cGUgMSAvWFN0ZXAgMTU4OCA"
"vWVN0ZXAgMjI0Nj4+CnN0cmVhbQogL3g4IERvCiAKCmVuZHN0cmVhbQplbmRv"
"YmoKOSAwIG9iagoxMAplbmRvYmoKMTAgMCBvYmoKPDwvQkJveCBbMCAxMTIzI"
"Dc5NCAyMjQ2XSAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDExIDAgUi"
"AvUmVzb3VyY2VzCiAgMTIgMCBSIC9TdWJ0eXBlIC9Gb3JtIC9UeXBlIC9YT2J"
"qZWN0Pj4Kc3RyZWFtCnicK+QKVCjkMlAwMjIxUzC3NNYzs7RU0DU0NDLSMzVS"
"KEpVCFfI4yrkMlQwAEIQCZQyVkjO5dJPNFBIL1bQrzA0UnDJ5woEQgBg+RASC"
"mVuZHN0cmVhbQplbmRvYmoKMTEgMCBvYmoKNzcKZW5kb2JqCjEyIDAgb2JqCj"
"w8L0V4dEdTdGF0ZSA8PC9hMCA8PC9DQSAxIC9jYSAxPj4+PiAvWE9iamVjdCA"
"8PC94MTIgMTMgMCBSPj4+PgplbmRvYmoKMTMgMCBvYmoKPDwvQkJveCBbMCAx"
"MTIzIDAgMTEyM10gL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAxNCAwI"
"FIgL1Jlc291cmNlcwogIDE1IDAgUiAvU3VidHlwZSAvRm9ybSAvVHlwZSAvWE"
"9iamVjdD4+CnN0cmVhbQp4nCvkCuQCAAKSANcKZW5kc3RyZWFtCmVuZG9iago"
"xNCAwIG9iagoxMgplbmRvYmoKMTUgMCBvYmoKPDw+PgplbmRvYmoKMTYgMCBv"
"YmoKPDwvQXNjZW50IDkyOCAvQ2FwSGVpZ2h0IDEwNDEgL0Rlc2NlbnQgLTIzN"
"SAvRmxhZ3MgMzIgL0ZvbnRCQm94CiAgWy01NTcgLTM3NCA3MTcgMTA0MV0gL0"
"ZvbnRGYW1pbHkgKERlamFWdSBTYW5zIE1vbm8pIC9Gb250RmlsZTIgMTkgMCB"
"SCiAgL0ZvbnROYW1lIC9YTVpMSlErRGVqYVZ1U2Fuc01vbm8gL0l0YWxpY0Fu"
"Z2xlIDAgL1N0ZW1IIDgwIC9TdGVtViA4MAogIC9UeXBlIC9Gb250RGVzY3Jpc"
"HRvcj4+CmVuZG9iagoxNyAwIG9iago8PC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC"
"9MZW5ndGggMTggMCBSPj4Kc3RyZWFtCnicXZDJbsMgEIbvPMUc00MEttIolpC"
"lKr340EV1+wAYBhepBoTxwW9fliiVegC+YeafjV6H58GaCPQ9ODliBG2sCri6"
"LUiECWdjSdOCMjLerHLLRXhCk3jc14jLYLUjnAP9SM41hh0OT8pN+EAAgL4Fh"
"cHYGQ5f17F+jZv3P7igjcBI34NCndK9CP8qFgRaxMdBJb+J+zHJ/iI+d4/QFr"
"upLUmncPVCYhB2RsIZ64Fr3RO06p/vXBWTlt8iEN41KbJlzaUn/HRJzNgp8/m"
"xcHoSy8oys66ccvOurdqu1LllzBXzau6jyC2ENEXZX2k/N24s3lfsnc+qcn4B"
"t297UQplbmRzdHJlYW0KZW5kb2JqCjE4IDAgb2JqCjI1NQplbmRvYmoKMTkgM"
"CBvYmoKPDwvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDIwIDAgUiAvTG"
"VuZ3RoMSA0MTcyPj4Kc3RyZWFtCnic3VZ7WJRVGn/P9/vODAzDMDPMIMjFGWl"
"Qg1EuqUGZA97TzLQ21CwvSJQRllq2hFKu5QVCS8dLVK6ZlWsttaZTKFlq2qK5"
"JlipZZblUqy5pliIh31nsO3Z3ad99qk/9tk9Z773vL/3nPd6zvm+IUFEJionk"
"GtK8aTph795ajoRfETauCn3zXQ1rTCaiWQ14/TC6bcXj9emHSMy7mWtjbff9U"
"DhJ9cnjgryPL+saOqkgotpi9cQhc1mWZ8iFoQFNBPjGsaXFRXPnO3eYshi3MA"
"44a6SKZPYeRjj04xdxZNmT5cv6d2Iwq1BPP3eqdNzdm83Mk5nn/GkUZHy60Vy"
"HUdrpC5bSRcOXmgQjs0iTM7TdOq1s6E5g6wNzQ3N6dE2t83jtrmLdGqbgfi2L"
"5TfaPnuzL2GHqxDQuzHbngNDpIU64ugZ/GaATolCoO1oa1hLxtpa04Xyb2js6"
"DVt+1cPRm794s56uGQLi0k0ofKRoqgFJ8jbIX2ik4LTAYjkmRGuEiidDNrZ/I"
"vg3pdfYKZ9OgsjibLlsw0eWG91qO+/uIH9bLxYrVW0Jqq7b6YHbSrUWn753q+"
"XkpOSqBBvhSKgTAtDq80xGwWhopI8VZcRXRd5KpEaAnW8BgDDUuwW4cmWs82t"
"zXvtNmzsznqE2ebT1hPcT97yp5ty04XTrfTEZOV2aev0yKSXWSzUlam3dhTJH"
"c1GPX8ts/ffDl/e/EdO8arC+qwcJ0+dD6gL10wf6NVu3WcYcueK7O3pKaKbBE"
"tzMKnPtm19sWaas6f91g3GbpQJOcfHU4wbTbvwmYJg06GiBHhFt6Btr3BeHpx"
"aLZsDsMRc5VwJndN6W1z93Zrc8eP/aDpudfUR+KY8D84p7rhbXy/hPNfyPkP5"
"fwjqBMl+6INFXaqMNfZV8WG26MGwu68JjaUbEee1lPpoquhI7veV6R0y7TbrF"
"pyV81mtWtFFUuWVFQuWVLZdL7lq6aWFhw7fKjxyJHGQ4er1fvqM3VcHRRe0UU"
"kiZ7/chbwLAXPgkgkQ/Ak/XAWspxIjtYy2natmmxwvKceEnOJOk4DKHiLzKRr"
"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"
"QJkVy7Tbo5HObg2eqrRyiYOBOTQngMwqwwKhjYtEFBOgBODq38UfNKLQeCAxB"
"ekBUiIArmV4rU/59G/+0AfmFLpL8B9eHe4wplbmRzdHJlYW0KZW5kb2JqCjIw"
"IDAgb2JqCjI2MTMKZW5kb2JqCjIxIDAgb2JqCjEyMQplbmRvYmoKeHJlZgowI"
"DIyCjAwMDAwMDAwMDAgNjU1MzUgZg0KMDAwMDAwMDAxNSAwMDAwMCBuDQowMD"
"AwMDAwMTgwIDAwMDAwIG4NCjAwMDAwMDAyMjcgMDAwMDAgbg0KMDAwMDAwMDI"
"4MiAwMDAwMCBuDQowMDAwMDAwNTAxIDAwMDAwIG4NCjAwMDAwMDA2OTUgMDAw"
"MDAgbg0KMDAwMDAwMDc5NyAwMDAwMCBuDQowMDAwMDAxMjQwIDAwMDAwIG4NC"
"jAwMDAwMDE0NjcgMDAwMDAgbg0KMDAwMDAwMTQ4NSAwMDAwMCBuDQowMDAwMD"
"AxNzEwIDAwMDAwIG4NCjAwMDAwMDE3MjkgMDAwMDAgbg0KMDAwMDAwMTgwOSA"
"wMDAwMCBuDQowMDAwMDAxOTY3IDAwMDAwIG4NCjAwMDAwMDE5ODYgMDAwMDAg"
"bg0KMDAwMDAwMjAwNyAwMDAwMCBuDQowMDAwMDAyMjU1IDAwMDAwIG4NCjAwM"
"DAwMDI1ODQgMDAwMDAgbg0KMDAwMDAwMjYwNCAwMDAwMCBuDQowMDAwMDA1Mz"
"A1IDAwMDAwIG4NCjAwMDAwMDUzMjYgMDAwMDAgbg0KdHJhaWxlcgoKPDwvSW5"
"mbyAxIDAgUiAvUm9vdCAyIDAgUiAvU2l6ZSAyMj4+CnN0YXJ0eHJlZgo1MzQ2"
"CiUlRU9GCg=="
)
}
Loading

0 comments on commit b80c637

Please sign in to comment.