Commit Graph

2080 Commits

Author SHA1 Message Date
burnettk b3b1f44d51
update cryptography 2024-02-01 14:02:49 -05:00
Kevin Burnett 020519a724
support bpmn executable property (#934)
* support executable property

* process model with no primary file is not executable

* filter by executable and primary file and avoid snagging g.user from service

* kill Start buttons on process group list as well

* use more similar code to check is executable and write integration test

* add a test and improve a variable name

---------

Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2024-02-01 10:57:12 -08:00
Kevin Burnett 6a3f8a212f
update spiff and remove dot notation (#933)
* update spiff and remove dot notation

* update script_engine dependency based on spiff lib update

---------

Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2024-02-01 06:51:19 -08:00
jbirddog a214a6aedd
Add migration (#931) 2024-01-31 11:31:14 -05:00
Kevin Burnett 711da2b048
unique bpmn process ids (#927)
* remove SpecReferenceCache

* make sure strings are sometimes unique

* lint

* more random

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: burnettk <burnettk@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2024-01-30 12:48:44 -08:00
burnettk 40b9570e22
process instances for-me is a basic permissions thing needed by everyone 2024-01-30 12:16:46 -05:00
jbirddog 6c209fe2ff
Bump docker (#918)
* Bump docker base image to python 3.12.1

* Add libffi-dev

* Add chardet

* Dumping logs in CI

* Remove tmp CI step, bump gunicorn
2024-01-29 11:09:36 -08:00
burnettk 616659e691
consistent license 2024-01-29 10:16:28 -05:00
Dan Funk 03b21accec
allow looping back in a process to create more messages - minor bug fix - didn't add what would be a complex test to this, as it was a one line change that seems an oversight in the original code. (#924) 2024-01-29 06:40:39 -08:00
jasquat f0f4bcce12
Feature/homepage extension filter refactor (#919)
* WIP: initial work to have a home page created from an extension w/ burnettk

* added support to display an extension as the root page w/ burnettk

* allow extensions to add new routes to base routes w/ burnettk

* use page instead of creating new key route w/ burnettk

* added components to support pi tables in extensions w/ burnettk

* allow using asterisks to mark words as bold in process instance list table

* moved table component from InstancesListTable to own component w/ burnettk

* filters are somewhat working again w/ burnettk

* default homepage uses the table without filters component now w/ burnettk

* renamed instance list tables to be more appropriate w/ burnettk

* display errors if list table is used incorrectly w/ burnettk

* fixed issue where columns were not displaying in the filter list

* pyl

* rely on changes in report hash to determine if report hash state needs updating

* only show link to report if there are instances to show

* many updates for filtering to remove the apply button and clean things up w/ burnettk

* some more fixes for too many renderings w/ burnettk

* advanced filters are working again w/ burnettk

* clear is working again w/ burnettk

* fixed a few linting errors and warnings w/ burnettk

* fixed some cypress tests

* if there are errors then display them right away instead of trying to put together the other elements

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2024-01-26 11:41:07 -05:00
jbirddog 4758634c99
Show Data Store tiles on the Process Group page (#917)
Co-authored-by: Kevin Burnett <18027+burnettk@users.noreply.github.com>
2024-01-24 10:15:08 -05:00
jbirddog 858e8eaec4
Get backend working with Python 3.12 (#876)
Co-authored-by: Kevin Burnett <18027+burnettk@users.noreply.github.com>
2024-01-24 08:00:10 -05:00
jbirddog 60f34e3015
Validate writes to the json data store against its schema (#875)
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Kevin Burnett <18027+burnettk@users.noreply.github.com>
2024-01-24 07:58:30 -05:00
jasquat 0ab1ca446c
force user logout if token cannot be decoded w/ burnettk 2024-01-18 14:51:04 -05:00
jasquat 11384c2a47
queue instance with celery instead of running engine steps on task submit w/ burnettk 2024-01-18 13:29:10 -05:00
jasquat 88f81cd2b3
use caps in api key header name w/ burnettk 2024-01-17 11:04:40 -05:00
jasquat 80bc2f2e42
Feature/typeahead allow guest user (#897)
* decode tokens with jwt instead of with base64 w/ burnettk

* try to verify jwt token with keycloak when we decode it w/ burnettk

* make the token algorithm a constant w/ burnettk

* WIP: create more valid looking jwt from spiff w/ burnettk

* tests are passsing now w/ burnettk

* some pyl stuff w/ burnettk

* fixed mypy issues w/ burnettk

* fixed issues from mypy fixes w/ burnettk

* do not load openid blueprint if not using those configs w/ burnettk

* used the process instance to determine if guest user can use connector api w/ burnettk

* only check the db for process instance if the api call is for typeahead

* removed unused test code

* pyl

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2024-01-16 14:47:25 -05:00
jasquat 2d9fb4430e
updated SpiffWorkflow for data object category fix (#904)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2024-01-16 14:45:55 -05:00
jbirddog 8e05e1e3c0
Add identifier and clz fields to the data stores response (#894) 2024-01-12 08:04:32 -05:00
Kevin Burnett b02f505bea
move snyk stuff to snyk file (#895)
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2024-01-11 06:14:25 -08:00
jasquat 12f929f777
ignore newest cryptography snyk issue 2024-01-10 12:29:50 -05:00
jbirddog 1c0570c147
Bump Restricted Python to 7.x, needed for Python 3.12 support (#872) 2024-01-10 10:46:28 -05:00
jbirddog a8a32b60fa
Add data store at the process group level (#859) 2024-01-10 09:48:31 -05:00
jbirddog ab39569cac
Add direct dependency on jsonschema (#868) 2024-01-10 08:18:34 -05:00
jasquat 7489d17f4f
added comment in migration to explain why it was being done w/ burnettk 2024-01-04 14:38:57 -05:00
jbirddog ad3e63367f
Make file upload detection more flexible, add integration test (#854) 2024-01-04 11:32:13 -05:00
jasquat 6bafd7b144
use urlsafe_base64decode for keycloak id tokens to support certain utf8 characters w/ burnettk (#852)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2024-01-03 16:14:14 -05:00
jasquat 14846bfb86
feature/detached-instance-error (#847)
* store the db ids of the process instance queue records instead of the sqlalchemy objects to avoid detached instance errors w/ burnettk

* raise an error similar to one we raise elsewhere in the unexpected case that this fails

* removed unused method

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2024-01-03 13:34:56 -05:00
jbirddog 73eb221c17
Remove category param (#848) 2024-01-02 17:49:00 -05:00
jbirddog b1206c5b3d
Drop __annotations__ from task data (#834) 2023-12-27 11:50:01 -05:00
jasquat a7a48ee9fc
feature/get-pg-of-readable-pm (#832)
* get parent process groups of process models that the user has access to w/ burnettk

* use the process group list to get the info we need for the group show page for permissions w/ burnettk

* clear the browser cache when updating a process group w/ burnettk

* fixed broken test w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-12-22 13:17:40 -05:00
jbirddog 2f83a68787
Clear caches when deleting a file (#826) 2023-12-21 14:12:48 -05:00
jasquat 88030781d6
do not include task data by default but allow overriding that decision w/ burnettk (#828)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-12-21 09:53:44 -05:00
jasquat d2b39b10c6
feature/handle-null-bpmn-process-on-pi (#827)
* do not error out and allow process instances to recover if the bpmn_process is null but the definition is set w/ burnettk

* fixed another flakey test w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-12-20 16:16:08 -05:00
jasquat 06bf1f24df
fixed flakey task model test 2023-12-20 13:54:20 -05:00
Kevin Burnett e1fefa9fc7
nplusone (#824)
* n plus one checks

* tests passing with nplusone

* satisfy probably-wrong json schema

* remove useless comment and consolidate poetry dev deps

* not actually going to add this dependency, but leave docs for next guy

---------

Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-12-20 07:18:20 -08:00
burnettk d688e2414d
make it so we can delete TaskInstructionsForEndUserModel on instance delete 2023-12-19 15:28:02 -05:00
jasquat 3fce735d4f
Feature/task table drop (#823)
* removed id from task and still working on getting the migration working w/ burnettk

* fixed migration to work on postgres and sqlite as well w/ burnettk

* fixed tests w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-12-19 08:59:29 -08:00
jasquat 0c8ff4ee45
updated get_token to work with internal openid as well w/ burnettk 2023-12-18 16:21:28 -05:00
jasquat 15d0d788e5
Feature/pi show page diagram (#816)
* get most recent tasks based on last_state_change instead of task_model.id

* added api to get task instances of a task

* some changes to support displaying task instances

* forgot to commit the controller

* updated frontend to display info for other instances of a task w/ burnettk

* some formatting to the selected task instance w/ burnettk

* do not get task instances when selecting different instance w/ burnettk

* added tests for task-instances w/ burnettk

* some ui tweaks for task instance view w/ burnettk

* updates based on coderabbit

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-12-18 14:23:51 -05:00
Kevin Burnett d6be107167
use the approach from check_permissions to avoid n plus 1 query issue (#814)
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-12-18 07:27:14 -08:00
burnettk 435c476577
ignore snyk issues with no resolution yet 2023-12-18 10:26:38 -05:00
jasquat 1fdca1408b
return the form dict even if it is empty and let rjsf handle it (#812)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-12-14 14:46:42 -05:00
jasquat 7234f0f181 feature/specify-valid-client-ids (#808)
* allow additional valid client ids to be specified for the purpose of token validation

* import the correct typedict and notrequired for python 3.10

* remove HEY

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-12-13 12:44:59 -08:00
jasquat 9c38ca851b added target branch to publish branch name to avoid conflicts between environments w/ burnettk 2023-12-11 15:32:07 -05:00
jasquat c00d810704 Feature/data object category (#796)
* WIP: some initial code for category in data objects

* attempt to get the data object for the given bpmn process and instance of it w/ burnettk

* updates for data objects

* fixed tests

* made suggestions by code rabbit and moved logic to get process data file out of shared method since it has a completely different implentation

* remove commented out code

* updated SpiffWorkflow for data object category

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-12-11 07:42:01 -08:00
jasquat 91d33305de added bpmn template file that will get added when a new process model is created with the api w/ burnettk 2023-12-08 16:23:08 -05:00
jasquat cf7a41f4b7 upgrade pip for safety 2023-12-08 13:32:49 -05:00
jasquat 4d6358b0e7 queue the process instance AFTER unlocking it, do not set celery worker concurrency to 12, log already locked error in celery workers for debugging 2023-12-07 10:22:50 -05:00
jbirddog d4e0fc69fd Test params (#789) 2023-12-07 08:09:44 -05:00
jasquat 40b02ae488 check that connector-proxy-demo can run when releasing new tags w/ burnettk 2023-12-06 11:21:32 -05:00
burnettk 57cb064025 upgrade ruff and add a few rules 2023-12-05 19:43:41 -05:00
jasquat 18600189c8 Feature/background proc with celery (#788)
* WIP: some initial test code to test out celery w/ burnettk

* some cleanup for celery and added base model to put tasks waiting on timers

* removed dup bpmn file

* some more cleanup and added strategy to queue instructions

* some minor code changes w/ burnettk

* remove the unused next_task key from api calls since nobody uses it w/ burnettk essweine

* added migration for future tasks and added test to make sure we are inserting into it w/ burnettk essweine

* ensure future task run at time can be updated w/ burnettk

* added table to queue instructions for end user in w/ burnettk

* added test to ensure we are storing instructions for end users w/ burnettk

* added progress page to display new instructions to user

* ignore dup instructions on db insert w/ burnettk

* some more updates for celery w/ burnettk

* some pyl and test fixes w/ burnettk

* fixed tests w/ burnettk

* WIP: added in page to show instructions on pi show page w/ burnettk

* pi show page is fully using not interstitial now w/ burnettk

* fixed broken test w/ burnettk

* moved background processing items to own module w/ burnettk

* fixed apscheduler start script

* updated celery task queue to handle future tasks and upgraded black and set its line-length to match ruff w/ burnettk

* added support to run future tasks using countdown w/ burnettk

* build image for celery branch w/ burnettk

* poet does not exist in the image w/ burnettk

* start blocking scheduler should always start the scheduler w/ burnettk

* add init and stuff for this branch

* make this work not just on my mac

* send other args to only

* added running status for process instance and use that on fe to go to show page and added additional identifier to locking system to isolate celery workers better w/ burnettk

* fixed typing error that typeguard found, not sure why mypy did not w/ burnettk

* do not check for no instructions on interstitial page for cypress tests on frontend w/ burnettk

* do not queue process instances twice w/ burnettk

* removed bad file w/ burnettk

* queue tasks using strings to avoid circular imports when attmepting to queue w/ burnettk

* only queue imminent new timer events and mock celery

* some keyboard shortcut support on frontend and added ability to force run a process instance over the api w/ burnettk

* some styles added for the shortcut menu w/ burnettk

* pyl w/ burnettk

* fixed test w/ burnettk

* removed temporary celery script and added support for celery worker in run server locally w/ burnettk

* cleaned up migrations w/ burnettk

* created new migration to clean up old migrations

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-12-05 11:41:59 -05:00
jbirddog 8d72ef5cfd Feature flag support (#787) 2023-12-05 10:29:54 -05:00
burnettk 04acca883d fix comment 2023-12-04 18:30:59 -05:00
Kevin Burnett 353ba4cd31 avoid print statements, generally (#784)
* avoid print statements, generally

* remove test for empty main script

---------

Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-12-01 06:24:11 -08:00
jasquat 1627f5dd07 bugfix/guest-login-multiple-auths (#782)
* This fixes guest login with using multiple auths, removes empty items from ApiError, and raises if redirect_url given to login does not match expected frontend host w/ burnettk

* get body for debug

* try to get the logs from the correct place to upload w/ burnettk

* mock the openid call instead of actually calling it w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-11-30 13:51:01 -05:00
burnettk c814e255e4 argument to switch to left right mode 2023-11-29 22:15:52 -05:00
burnettk f676fab480 command to run pydeps 2023-11-29 21:59:17 -05:00
burnettk af5402c6e4 add init in services 2023-11-29 21:43:27 -05:00
jasquat 74de2063d6 added spiffworkflow-2 realm based on spiffworkflow realm w/ burnettk 2023-11-28 12:41:16 -05:00
burnettk c0a0606913 remove accidentally added keycloak dir ignore w/ jasquat 2023-11-28 12:37:30 -05:00
burnettk 6c7fad9b80 removed bad dir w/ jasquat 2023-11-28 12:20:39 -05:00
Kevin Burnett cfe00a45d4 reset to page 1 when status changes to fix #765 (#769)
* reset to page 1 when status changes to fix #765 w/ jasquat

* upgrade connexion and werkzeug to fix snyk w/ jasquat

* fix all security issues like a boss w/ jasquat

* whoops, still no resolution for cryptography w/ jasquat

---------

Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-11-28 08:58:54 -08:00
burnettk 126ba9512c tweak 2023-11-28 09:54:24 -05:00
jbirddog abe865c19b Data Store CRUD interface (#689) 2023-11-24 13:27:46 -05:00
jasquat d737d40ab7 disabled no task data on completed tasks when rehydrating (#706)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-11-21 10:49:16 -05:00
jasquat 762f945e62 updated connector-proxy-demo dockerfile to be more like backend w/ burnettk 2023-11-20 16:49:30 -05:00
jasquat 91ee554543 ensure we do not delete user group assignments from regexes w/ burnettk (#690)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-11-20 08:27:28 -08:00
burnettk f524b78368 fixes from fixit 2 2023-11-20 11:04:33 -05:00
jasquat b031b0f940 remove the unused next_task key from api calls since nobody uses it w/ burnettk essweine (#688)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-11-17 13:34:04 -08:00
jasquat 5e95849923 sort nested process groups as well (#685)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-11-17 10:12:56 -05:00
Kevin Burnett 8d85e5ac26 added some updates to help with logging deployments w/ burnettk (#683)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-11-16 13:15:49 -08:00
jasquat 9f58c7405d avoid serializing the bpmn process instance just to save data w/ burnettk 2023-11-16 12:32:38 -05:00
Kevin Burnett d9203f4d37 curl and procps in container for debugging (#680)
* curl and procps in container for debugging

* added some spacing between from lines in dockerfiles w/ burnettk

---------

Co-authored-by: burnettk <burnettk@users.noreply.github.com>
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-11-16 07:18:11 -08:00
jasquat fc503ec76b feature/secrets-encryption-cleaning (#673)
* removed simple-crypt and cleaned up usage of keys for encryption w/ burnettk

* renamed var to SPIFFWORKFLOW_BACKEND_ENCRYPTION_KEY w/ burnettk

* pyl w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-11-16 10:12:47 -05:00
jasquat 1eed6e2444 feature/full-breadcrumb-on-task-show (#675)
* show the full breadcrumb on task show page w/ burnettk

* check read permission of process model before displaying in breadcrumb on task show page

* in the breadcrumb if the api returns 401 then just ignore the breadcrumb

* pyl

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-11-16 10:05:08 -05:00
burnettk 166f7e9873 ignore this for a month and hope that we get a resolution on the internet during this time 2023-11-15 14:54:03 -05:00
jasquat 449fe87d43 Feature/deny macro on permission (#672)
* look for deny in the permission action rather than in the target uri and updated the documentation w/ burnettk

* added depecation warning if allowed_permissions is being used intead of actions w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-11-15 11:46:56 -05:00
jasquat 34ce785aea let spiff serialize the bpmn process data to let it handle datetimes before we give it to the db w/ burnettk 2023-11-15 10:43:56 -05:00
jasquat 981cfcb347 Merge branch 'main' of github.com:sartography/spiff-arena 2023-11-15 09:47:23 -05:00
jasquat 6d99fd0ac3 only log out the user when we return a 401, not raise an error 2023-11-15 09:47:20 -05:00
Kevin Burnett 8dcdae2590 Feature/fix filters (#670)
* work in progress

* respect multiple filters for the same field

---------

Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-11-15 06:20:00 -08:00
jasquat 1d37001727 Feature/no data for finished spiff tasks (#661)
* do not add data to spiff tasks if that task is finished w/ burnettk

* build docker image for this branch w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-11-14 12:47:20 -08:00
Dan Funk 12c8b899f0 Copy and Paste Error (#663)
* We were getting copy and paste errors that an id already existed.  This fixes that problem by assuring we always call the importXML method on the diagram modeller (and don't bypass it with a call to the fromXML of the protected _moddle.
we have to correct for the loop characteristics getting removed in a different way.

* run_pyl.

* eslint fixes

* Cypress caught some errors - I hate it, but it was right, and it caught something critical.
2023-11-14 15:14:07 -05:00
jasquat 18207bcfbd bugfix/fix-refresh-token-error (#668)
* when backend returns 401 also remove cookies and redirect in frontend if cookies are not set w/ burnettk

* added a copule helpful comments w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-11-14 14:54:16 -05:00
jasquat 1197a1a51a do not tell users to add a process model/group if they do not have access to do so w/ burnettk 2023-11-13 16:56:41 -05:00
jbirddog c122926e01 Support creating unique top level keys for KKV data store (#613) 2023-11-13 11:37:24 -05:00
jasquat 1596076a15 updated auth identifier header name to include spiffworkflow w/ burnettk 2023-11-09 15:45:52 -05:00
jasquat 07895d3965 get the auth identifier from the cookie or the header or return default 2023-11-09 15:39:06 -05:00
jasquat 45bcba172d default other open id configs is url is specified w/ burnettk 2023-11-09 14:31:30 -05:00
jasquat 04e763116e authentication_identifier comes from cookies, not headers 2023-11-09 13:50:45 -05:00
jasquat b8cfa4fd3c fixed backwards compatibility with multiple auths 2023-11-09 11:09:11 -05:00
jasquat d5b0330609 Feature/support multiple auth (#602)
* added some support for configs to have mutliple auths

* multiple openids services are mostly working - still needs some cleanup

* some cleanup for pyl and fixed login_return for internal openid server w/ burnettk

* if only one auth is returned from backend then just do that w/ burnettk

* login page has been formatted w/ burnettk

* some extra formatting on the login page w/ burnettk

* relabel test openid providers and add user

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-11-09 10:34:07 -05:00
jasquat a48bc8a885 do not attempt to migrate instance from interstitial page if the serializer version has not been set yet 2023-11-09 09:13:18 -05:00
jasquat 7b904387fc updated example permissions to use macros and prefer perm absolute path over filename w/ burnettk 2023-11-08 16:57:19 -05:00
jasquat 57c8112eea run the data migrator from the insterstitial page code when loading the pi show page w/ burnettk (#607)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-11-07 16:20:47 -05:00
Kevin Burnett eb13ab843b fix standard loop task serialization (#606)
* fix standard loop task serialization

* lint

---------

Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-11-06 12:18:33 -08:00
Kevin Burnett 6014f2940d fix serialization issue with custom service task, w/ essweine (#605)
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-11-03 15:00:30 -07:00
burnettk c57cc0ed0b ignore another werkzeug issue until we can upgrade 2023-11-01 18:52:49 -04:00
jasquat 11512a888e disable element units for now w/ burnettk 2023-10-27 15:59:28 -04:00
jasquat 234c9646e1 feature/skip-user-input-required-tasks (#596)
* only check for timer events in ready_user_task_has_associated_timer so we can skip user_input_required instances w/ burnettk

* removed test.py file w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-27 15:01:28 -04:00
jasquat 566f383918 adds basic support to use certain components in extensions w/ burnettk (#597)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-27 14:54:45 -04:00
jasquat c2ce27e961 Feature/drop id column on json data (#587)
* added migration to drop the id column from json_data and make hash the primary key

* removed id column from task_draft_data as well

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-27 11:02:52 -04:00
jbirddog f8112641cc Reenable element units (#593) 2023-10-26 18:20:55 -04:00
jasquat 24741b29de use last_state_change to figure out if a cancelled task needs an event in the task service instead of with get_tasks and check when manually completing tasks w/ burnettk (#595)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-26 16:11:16 -04:00
jbirddog eb3fd9e2af Bump SpiffWorkflow (#590)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-26 12:27:35 -04:00
jasquat 7e128c5a55 Feature/completed tasks on pi show (#591)
* added api to get all completed tasks for an instance and display it in a table w/ burnettk

* moved completed tasks table on pi show page to sub tabs

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-26 11:37:55 -04:00
jasquat a025aaa017 upgraded cryptography to satisfy snyk and added ignore for werkzeug issue since we cannot do anything about it now w/ burnettk 2023-10-26 11:28:37 -04:00
jasquat 83094c66ce process all cancelled tasks to see if that fixes error boundary events 2023-10-26 10:35:52 -04:00
jasquat 39edd60fd6 Feature/hide private data objects (#581)
* added test and some additional support for deny permissions w/ burnettk

* added support for deny through permissions-check api w/ burnettk

* support DENY at the beginning of a permission target marcro

* do not look up permissions using grant type, only use the uniqueness key

* added support in frontend to display a nice error if user does not have access to a data object value w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-25 16:31:06 -04:00
jbirddog 36b7b2462e Remove backend references to Box (#579) 2023-10-25 16:09:25 -04:00
jasquat c18c5a8d9c Feature/do not save cancelled task events twice (#575)
* do not save cancelled task events again

* actually only process cancelled events that were cancelled during the current run

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-25 13:45:20 -04:00
jbirddog 16ae1d9ccd Add support for KKV data stores to the data stores tab (#576) 2023-10-25 12:59:09 -04:00
jasquat 54b7c5c3ec feature/formatting-in-extension-md (#559)
* support formatting data client side in markdown and support greater than and less than for metadata column filters w/ burnettk

* moved spiff conversion functions to FormattingService and use it in InstructionsForEndUser w/ burnettk

* added tests for greater than and less than metadata operators and added negative tests w/ burnettk

* removed unneeded useEffect w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-20 15:19:26 -04:00
jasquat 6664b52985 install vim-tiny instead of vim for security w/ burnettk 2023-10-19 15:01:39 -04:00
jasquat fe4dc14b8d Feature/docker CVE issues (#558)
* updated Dockerfile to try to remove security vulnerabilities w/ burnettk

* we require curl for health checks w/ burnettk

* try to scan docker image in ci

* use Dockerfile from backend w/ burnettk

* continue-on-error w/ burnettk

* attempt to elevate permissions of snyk w/ burnettk

* added snyk security github workflow w/ burnettk

* fixed location of constraints w/ burnettk

* add in or true for snyk tests w/ burnettk

* sent the snyk token w/ burnettk

* specify the directory for the sarif file w/ burnettk

* updated spiffworkflow-connector-command for snyk issue w/ burnettk

* updated sql statements sanitize input

* ignore issues for debug_controller and check frontend with snyk w/ burnettk

* updated babel and electron for snyk w/ burnettk

* some more updates to fix vulnerabilities w/ burnettk

* prune repeated deps for frontend builds since

* uncomment ci code so it runs again and use node for frontend base image w/ burnettk

* fixed backend image name w/ burnettk

* pyl w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-19 14:22:52 -04:00
jasquat 2f9aa12906 Feature/error boundary (#552)
* WIP for error boundary support w/ burnettk

* updates to catch error boundary events and send them back out w/ burnettk

* fixed broken test w/ burnettk

* use connector-http and spiffworkflow-proxy from main w/ burnettk

* updated smtp and slack connectors in connector-proxy-demo w/ burnettk

* added more tests for the service task service call connector to test errors w/ burnettk

* added spiffworkflow-connector-command and some code clean up

* updated the connectors in the proxy demo

* use SpiffWorkflow from git instead of locally

* some cleanup while code reviewing

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-18 14:00:12 -04:00
jasquat b6a4d40f74 updated urllib3 for snyk 2023-10-18 11:21:53 -04:00
jbirddog a80abc4c47 Keyed key/value data store implementation (#548) 2023-10-17 10:59:01 -04:00
jasquat 4d7347c131 do not save events to db when running data migrations w/ burnettk 2023-10-16 15:02:19 -04:00
jasquat abf87a5aa3 corrected typename for tasks in data migration 3 w/ burnettk 2023-10-16 14:51:50 -04:00
jasquat d22e5b2550 check if form contents is None and not truthy when deciding to return back to the user w/ burnettk 2023-10-16 11:42:09 -04:00
burnettk 1eadeb0b29 add cris 2023-10-16 11:24:48 -04:00
burnettk 53def3f3c8 update README 2023-10-13 23:32:01 -04:00
jasquat c2dc4a738e Feature/data migrator tests (#546)
* using new spiffworkflow locally and the db can be recreated w/ burnettk

* tests are passing w/ burnettk

* added version 3 data migration for typenames on tasks and bpmn processes w/ burnettk

* pyl w/ burnettk

* attempting to add tests for data migrator and fix 1.3 for postgres

* run version_1_3 migration differently from postgres versus mysql and sqlite

* look up the task model again to make sure it is fresh w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-12 14:29:51 -04:00
jasquat 4d842e8dbf Improvement/better serialization (#540)
* using new spiffworkflow locally and the db can be recreated w/ burnettk

* tests are passing w/ burnettk

* added version 3 data migration for typenames on tasks and bpmn processes w/ burnettk

* pyl w/ burnettk

* switch SpiffWorkflow back to main

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-12 14:14:02 -04:00
jasquat db4e9292f6 remove colons as well when checking wildcard permissions and updated test to ensure it works as expected 2023-10-11 10:25:02 -04:00
jasquat ceb06cc227 Hotfix/user task with timer cancel (#533)
* cherry picked changes from b12af9f3bc to pin form json files

* use the class name to determine what a task type is w/ burnettk

* initial thoughts to fix cancel timer issue w/ burnettk

* added migration to run predict on all open instances w/ burnettk

* remove debug, refactor data migrations, add benchmark_log_func

* log progress of script

* only process predicted tasks and their parents in the version 2 data miagration w/ burnettk

* added data migrator and using that to run version 2 migrations when needed w/ burnettk

* removed some unwanted code

* fix issue, but tests still need updating

* fix tests by returning code to closer to what it was

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-10-10 11:17:09 -04:00
burnettk dd6dcdcec9 add dinithi 2023-10-09 10:01:20 -04:00
jasquat 8bf92f7a39 Feature/regex support in permissions (#530)
* support wildcards when adding users to groups from waiting table

* moved the user route to authentication_controller to avoid having so many user routes and this controller was all about login

* added test to ensure regexes work for permissions - still need to remove old ones on refresh

* moved token related code out of authorization service and into authentication service w/ burnettk

* remove old user group assignment waiting entries when refreshing permissions w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-06 13:47:40 -04:00
jasquat 01ef4e6eaa pyl w/ burnettk 2023-10-06 13:36:24 -04:00
danfunk a83e11c504 overriding more of the login screen - can't do it all with CSS anymore so overriding one of the ftl files (Whatever they are, not sure, but works) 2023-10-06 11:02:11 -04:00
jasquat 94a01fcc80 Merge branch 'main' of github.com:sartography/spiff-arena 2023-10-05 14:01:09 -04:00
jasquat aeded99114 keycloak output on import seems to have changed 2023-10-05 14:01:06 -04:00
jasquat 15041734a7 use the class name to determine what a task type is w/ burnettk (#527)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-05 13:28:41 -04:00
jasquat cba4a19d3b Feature/remove group service (#529)
* removed group service in favor of user service and messing around with ruff and pre-commeit w/ burnettk

* pyl can succeed now w/ burnettk

* removed debug code w/ burnettk

* pyl

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-05 13:27:38 -04:00
burnettk d4984a0269 do the joinedload so we actually eliminate the n plus 1 query 2023-10-05 09:30:02 -04:00
danfunk 77845d38ce copy was not creating the spifftheme directory. 2023-10-04 15:48:57 -04:00
jasquat b12af9f3bc Feature/pin form schemas to revision (#526)
* task show loads the correct revision of the json schema form w/ burnettk

* display error if form cannot be found at revision w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-04 15:23:42 -04:00
jasquat dbbf14fe58 fixed copy of theme to keycloak docker image w/ burnettk 2023-10-04 15:08:55 -04:00
danfunk 3ce513a29b Enabled copy in the docker file
Added a spiffworkflow logo, colors, fonts, styling to login page based off the styles used on our website.
Maybe someday these can bleed through to the app itself.
2023-10-04 14:31:08 -04:00
jasquat b23bdbbebc upgrade keycloak to 22.0.4 and added a base custom theme for login screen w/ burnettk 2023-10-04 11:32:53 -04:00
jbirddog 34a0323c4d Upsearch for data stores (#520) 2023-10-04 09:42:25 -04:00
jasquat 22570ce8d3 fix git command with c option 2023-10-04 08:37:41 -04:00
burnettk d7d3858a7a return error if no token instead of blowing up 2023-10-03 22:07:20 -04:00
burnettk d4104f4d12 tell sentry about release info if we have it 2023-10-03 21:23:25 -04:00
burnettk 9a59d37b53 remove debug print statement 2023-10-03 16:03:52 -04:00
Kevin Burnett fa5109ff57 update permission check to hopefully improve performance (#523)
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-10-03 13:00:13 -07:00
jasquat 5d4713fc0e feature/use-context-with-git-commands (#524)
* use the c option with git commands instead of using cd from python w/ burnettk

* removed the cd method since we should not be using it since it is not threadsafe

* pyl

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-10-03 16:00:03 -04:00
jasquat 1b06d9c987 updated urllib3 for snyk 2023-10-03 14:42:01 -04:00
burnettk f754ee1658 avoid notifying sentry on standard 405 method not allowed 2023-10-02 22:16:38 -04:00
jasquat a9877c116b move task draft data insert into try statement to handle Deadlock errors 2023-10-02 08:35:00 -04:00
burnettk e3f775e54f ignore process instance not found in terms of sentry notification 2023-10-01 12:36:00 -04:00
jasquat d6f3965c2b do not check for git source branch when using the webhook, let it fail naturally if not a git repo w/ burnettk 2023-09-29 16:39:02 -04:00
jasquat 8220aa42ef added bin/console command that runs flask shell and align zoom tooltips to the bottom w/ burnettk 2023-09-29 16:00:16 -04:00
jasquat 6c41d54502 better fix where we ensure we get the process id from the primary bpmn file 2023-09-29 10:57:23 -04:00
jasquat a8ad7ad979 removed test file 2023-09-29 10:45:14 -04:00
jasquat 336cd3a1c7 Merge branch 'main' of github.com:sartography/spiff-arena 2023-09-29 10:43:35 -04:00
jasquat 42e5c91613 call activities do not need to mock data in unit tests and ensure we add the primary bpmn file last otherwise we lose it - seems another fix will be needed for this 2023-09-29 10:43:32 -04:00
jbirddog 37ae7e2f7f Refactor finding process models to support finding other file types (#516) 2023-09-29 09:38:45 -04:00
jasquat f3e7bbaa02 a couple updates for extensions w/ burnettk 2023-09-28 17:19:37 -04:00
jasquat a84750741e updated SpiffWorkflow for depth fix (#519)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-28 12:51:48 -07:00
jasquat 10fa556525 handle dup key error when saving draft data by updating the record on conflict w/ burnettk (#518)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-28 12:01:57 -07:00
jasquat 47f94dccbb Feature/nonetype debug stuff (#513)
* some debug items w/ burnettk

* removed some db commits from workflow execution service so the passed in save is the only thing that actually commits the transaction

* set max depth to 50000 for now w/ burnettk

* pyl w/ burnettk

* use temp maxdepth fix in SpiffWorkflow w/ burnettk

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-27 17:04:47 -04:00
jasquat 08098dd54e set an authenticated attribute on g to check against instead of token w/ burnettk 2023-09-27 16:59:16 -04:00
jasquat ff558388ec updated files table on pm show page to force single line and added migration to increase column size of process-model identifier in message triggerable table w/ burnettk (#515)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-27 09:00:09 -07:00
jasquat 2619af1a67 Feature/dynamically set configs (#512)
* added method to get configs from env so we can manipulate the values in a consistent way w/ burnettk

* grouped configs in default py to make it a little easier to understand

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-26 15:03:13 -04:00
burnettk e9bd81d1cb fix typo 2023-09-25 15:50:27 -04:00
jasquat 4be95df48c do not pass mocked data on unit tests to multi instance task types w/ burnettk 2023-09-25 15:48:06 -04:00
jasquat 3e0c503119 support dmn files in process model unit test w/ burnettk 2023-09-25 12:19:35 -04:00
burnettk 5958a57d25 actually LGPL 2023-09-25 11:13:46 -04:00
jasquat 41292b7c6d make sure we load the cache_generation table w/ burnettk 2023-09-25 10:55:28 -04:00
jasquat 633b5d7ecb use the long revision when comparing git revs for webhook w/ burnettk 2023-09-25 10:37:08 -04:00
burnettk 6463a7461f fix admin path and rollback on exception. w/ jlantz and elizabeth 2023-09-22 16:51:36 -04:00
jasquat ca3563931b fix permissions for getting extension process models w/ burnettk 2023-09-22 13:57:03 -04:00
jasquat 8bf38aaa1c Feature/new reference cache (#511)
* added basic model for new reference cache w/ burnettk

* switched out SpecReferenceCache for ReferenceCacheModel w/ burnettk jbirddog

* pyl w/ burnettk jbirddog

* save items to the db using the new cache with generation table w/ burnettk

* bulk save for performance

* tests are passing

* actually use the new generation table - we still need a test to ensure we are using it

* added test to ensure using new cache generation

* corrected reference interface on frontend w/ burnettk

* do not perform git pull in webhook if the revision is the same as the current w/ burnettk jbirddog

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-09-22 11:28:59 -04:00
jasquat b035191964 updated cryptography for snyk w/ burnettk 2023-09-22 10:36:06 -04:00
jasquat 1826cc4b6c Improvement/flexible task iteration (#507)
* updated to use new spiff branch and fixed broken tests w/ burnettk essweine

* updated spiffworkflow with new main build w/ burnettk essweine

* initial updates to new spiff branch w/ burnettk essweine

* more updates for new spiff w/ burnettk essweine

* fixed some linting issues w/ burnettk essweine

* fixed some failing tests w/ burnettk

* updated spiffworkflow for cancel fix w/ burnettk

* Improvement/flexible task iteration 2 (#504)

* wip

* consistent failure, mostly

* removing test code and tests

* removing unused test bpmn files

* removing unused test bpmn files

* minor cleanup of commented code

* spaces and unused imports

* go back to spiff on main

---------

Co-authored-by: burnettk <burnettk@users.noreply.github.com>

* lint

* updated test to reflect storing predicted tasks w/ burnettk

* add some orders so postgres does not do whatever it wants, and clear log

* fix lint

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: danfunk <daniel.h.funk@gmail.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-09-21 14:47:18 -07:00
jasquat ff9d34fe83 updated milestone table query to include logic similar to caching last_milestone on the pi w/ burnettk (#505)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-20 13:25:42 -04:00
jasquat 1b18cb88c1 check for user attr on g before attempting to use it 2023-09-19 07:36:10 -04:00
Kevin Burnett ed4eb4cd28 store predicted tasks in the database and store task cancelled events w/ burnettk (#500)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-18 13:24:23 -07:00
jbirddog 804555bc4d File based generic json data store (#490) 2023-09-18 15:55:24 -04:00
Dan Funk 691611c695 Bug/various bugs (#494)
* Don't bug out in older instances that don't have runtime_info

* Add zoom buttons to React Diagram Editor

* This removes some potential features for on-boarding, that we are not currently using, but fixes the issue with 100's of onboarding processes piling up and sitting around.  Hoepfully we can wrap this into the extensions mechanism so everything works the same way eventually.

* Improved error messages on form builder
Don't try to auto-save the file before it is fully loaded.
Example data was not getting saved on update.

* Found several errors with new zooming buttons in DMN, so cleaning that up.

Recent changes prevented creating a new dmn table.

* Errors were not being displyed for the Editor Routes

* Going to disable handling user tasks in the onboarding controller for now.
2023-09-18 11:22:29 -04:00
jasquat d747af2d7a fixed process instance event table on the show page to work a little more intuitively w/ burnettk 2023-09-15 12:29:07 -04:00
jasquat f6d3bc8e73 Feature/api keys (#489)
* some initial work to support user api keys w/ burnettk

* some updates to store and use service accounts - migrations do not work in sqlite atm

* pyl

* minor tweak to the migration

* refactored user route

* this is working if returning user that created the service account

* put back migrations from main w/ burnettk

* tests pass with new migration w/ burnettk

* do not remove service account permissions on refresh_permissions w/ burnettk

* added new component to make some api calls to populate child components and routes w/ burnettk

* allow displaying extensions in configuration tab w/ burnettk

* removed service accounts controller in favor of extension and encrypt the api keys

* add fuzz to username to make deleting and recreating service accounts easier

* allow specifying the process id to use when running an extension w/ burnettk

* allow extensions to navigate to each other on form submit w/ burnettk

* removed commented out debug code

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-15 10:10:57 -04:00
jbirddog 45f85a7f77 Table based generic json data store (#486) 2023-09-13 11:57:26 -04:00
Dan Funk b432f22fe0 Bug/predicted tasks dropped (#484)
* when removing predicted tasks for data storage, don't alter the in-memory version of the workflow.

* run_pyl

* Bump gitPython for security vulnerability.
2023-09-12 16:15:43 -04:00
jasquat 9312b8cf91 pass a class to the modal to put it back (#483)
* pass a class to the modal to put it back

* update gitpython for safety

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-12 15:39:32 -04:00
jasquat ba97518207 only return guest_confirmation if it is a guest task 2023-09-12 11:11:05 -04:00
burnettk f15b8c5c08 add /debug/url-info path 2023-09-11 20:17:10 -04:00
burnettk d935def567 debugging function 2023-09-11 16:56:27 -04:00
burnettk e4d50f850e update spiff to get a couple bug fixes 2023-09-11 10:32:34 -04:00
jasquat a72ed7ffb5 disable element units by default and added test that was failing due to it w/ burnettk (#480)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-08 13:47:31 -07:00
jasquat 42b44cef07 feature/user-guest-sign-in-fixes (#479)
* do not change guest user permissions when running refresh_permissions w/ burnettk

* linting

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-08 13:32:37 -07:00
jasquat 912886f3e6 Improvement/task and spec relations (#477)
* updated to use new spiff branch and fixed broken tests w/ burnettk essweine

* updated spiffworkflow with new main build w/ burnettk essweine

* work around dictionary changed size during iteration error in parallel tests

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-09-08 12:54:43 -04:00
burnettk 4e47eadfea add SPIFFWORKFLOW_BACKEND_OPEN_ID_IS_AUTHORITY_FOR_USER_GROUPS and default to false 2023-09-08 12:54:32 -04:00
Dan Funk 948c633b2c Feature/better form nav (#474)
* Detect focus loss/return in the Diagram Editor - so that we can reload the process model and assure that we know about any changed files.

Allow for looking specifically for json SCHEMA files (those files that are named -schema.json or .schema.json (as is the convention).  Only show these in the dropdown for the form.

* * Run descriptions through the markdown processor so you can use bold/italic etc... in your description fields within a form.
* Move ExampleTable into it's own view component to keep the size of the form builder sane.
* Assure markdown within jrsf forms have reasonable styling that follows the containers style, rather than setting to some other default.
* Add a couple of example forms so people can get a sense of what is possible.
* Connect up the new Json Schema Editor Component to the process model edit diagram.
* Just select the schema file - not the ui file when selecting the form for a component - we may revert this to just a text box.
*

* Cleanup the formatting of arrays, so that they are sligtly intended, do not contain an awkward unneeded heading, and have some tighter css.

* Connect the form editing in the modal back to the BPMN-JS editor

Auto-Save edits in the Form Builder

Lots and lots of tweaks to the react form builder ui

* various fixes.

* test for prepare_schema

* minor fix for run_pyl

* css cleanup
less issues with reloading and jumping about when in the editor
Don't sort keys when returning the json.
More intelligent "ready"

* bump package to point to branch of bpmn-js-spiffworkflow so others can check it out.

* Assure that json keys are not sorted during serialization by default.
Allow adding example fields to an existing schema

Create a set of examples.

* db complaints in migration change.

* removed items from interface file that had been moved elsewhere w/ burnettk

* rename prepare_form to prepare-form

* rename prepare_form to prepare-form

* Remove commented out code.

* typo

* add a comment about the empty column

* move back to the main branch

---------

Co-authored-by: jasquat <jasquat@users.noreply.github.com>
Co-authored-by: burnettk <burnettk@users.noreply.github.com>
2023-09-08 11:07:43 -04:00
jasquat 161a0bceb6 do not run the background scheduler in ci for cypress tests 2023-09-08 10:03:36 -04:00
jasquat a7556dc958 remove the publish button if backend is not configured to publish w/ burnettk (#473)
Co-authored-by: jasquat <jasquat@users.noreply.github.com>
2023-09-07 16:03:47 -04:00