From ec129c4432f5d4e8e418bbb8ff34d5f17f4533d6 Mon Sep 17 00:00:00 2001 From: RomanBachaloSigmaSoftware Date: Fri, 15 Mar 2024 14:21:00 +0200 Subject: [PATCH 01/22] update example --- .../examples/eg011_embedded_sending.py | 191 ++++++++++++++++-- 1 file changed, 177 insertions(+), 14 deletions(-) diff --git a/app/eSignature/examples/eg011_embedded_sending.py b/app/eSignature/examples/eg011_embedded_sending.py index ea5ef59..9e438eb 100644 --- a/app/eSignature/examples/eg011_embedded_sending.py +++ b/app/eSignature/examples/eg011_embedded_sending.py @@ -1,7 +1,10 @@ -from docusign_esign import EnvelopesApi, ReturnUrlRequest +import base64 +from os import path + +from docusign_esign import EnvelopesApi, ReturnUrlRequest, EnvelopesApi, EnvelopeDefinition, \ + Document, Signer, CarbonCopy, SignHere, Tabs, Recipients from flask import url_for, session, request -from .eg002_signing_via_email import Eg002SigningViaEmailController from ...consts import pattern, demo_docs_path from ...docusign import create_api_client @@ -24,7 +27,7 @@ def get_args(): "signer_name": signer_name, "cc_email": cc_email, "cc_name": cc_name, - "status": "sent", + "status": "created", } args = { "starting_view": starting_view, @@ -36,36 +39,196 @@ def get_args(): } return args - @staticmethod - def worker(args,doc_docx_path,doc_pdf_path): + @classmethod + def worker(cls, args, doc_docx_path, doc_pdf_path): """ This function does the work of creating the envelope in draft mode and returning a URL for the sender"s view """ # Step 2. Create the envelope with "created" (draft) status - args["envelope_args"]["status"] = "created" - # Using worker from example 002 - results = Eg002SigningViaEmailController.worker(args, doc_docx_path, doc_pdf_path) - envelope_id = results["envelope_id"] + envelope = cls.create_envelope(args, doc_docx_path, doc_pdf_path) + envelope_id = envelope.envelope_id # Step 3. Create the sender view + sender_view_url = cls.create_sender_view(args, envelope_id) + + return {"envelope_id": envelope_id, "redirect_url": sender_view_url} + + @classmethod + #ds-snippet-start:eSign11Step3 + def create_sender_view(cls, args, envelope_id): view_request = ReturnUrlRequest(return_url=args["ds_return_url"]) # Exceptions will be caught by the calling function - #ds-snippet-start:eSign11Step3 api_client = create_api_client(base_path=args["base_path"], access_token=args["access_token"]) envelope_api = EnvelopesApi(api_client) - results = envelope_api.create_sender_view( + sender_view = envelope_api.create_sender_view( account_id=args["account_id"], envelope_id=envelope_id, return_url_request=view_request ) # Switch to Recipient and Documents view if requested by the user - url = results.url + url = sender_view.url if args["starting_view"] == "recipient": url = url.replace("send=1", "send=0") - #ds-snippet-end:eSign13Step3 - return {"envelope_id": envelope_id, "redirect_url": url} + return url + #ds-snippet-end:eSign11Step3 + + @classmethod + #ds-snippet-start:eSign11Step2 + def create_envelope(cls, args, doc_docx_path, doc_pdf_path): + envelope_args = args["envelope_args"] + # Create the envelope request object + envelope_definition = cls.make_envelope(envelope_args, doc_docx_path, doc_pdf_path) + api_client = create_api_client(base_path=args["base_path"], access_token=args["access_token"]) + # Call Envelopes::create API method + # Exceptions will be caught by the calling function + envelopes_api = EnvelopesApi(api_client) + return envelopes_api.create_envelope(account_id=args["account_id"], envelope_definition=envelope_definition) + + @classmethod + def make_envelope(cls, args, doc_docx_path, doc_pdf_path): + """ + Creates envelope + Document 1: An HTML document. + Document 2: A Word .docx document. + Document 3: A PDF document. + DocuSign will convert all of the documents to the PDF format. + The recipients" field tags are placed using anchor strings. + """ + + # document 1 (html) has sign here anchor tag **signature_1** + # document 2 (docx) has sign here anchor tag /sn1/ + # document 3 (pdf) has sign here anchor tag /sn1/ + # + # The envelope has two recipients. + # recipient 1 - signer + # recipient 2 - cc + # The envelope will be sent first to the signer. + # After it is signed, a copy is sent to the cc person. + + # create the envelope definition + env = EnvelopeDefinition( + email_subject="Please sign this document set" + ) + doc1_b64 = base64.b64encode(bytes(cls.create_document1(args), "utf-8")).decode("ascii") + # read files 2 and 3 from a local directory + # The reads could raise an exception if the file is not available! + with open(path.join(demo_docs_path, doc_docx_path), "rb") as file: + doc2_docx_bytes = file.read() + doc2_b64 = base64.b64encode(doc2_docx_bytes).decode("ascii") + with open(path.join(demo_docs_path, doc_pdf_path), "rb") as file: + doc3_pdf_bytes = file.read() + doc3_b64 = base64.b64encode(doc3_pdf_bytes).decode("ascii") + + # Create the document models + document1 = Document( # create the DocuSign document object + document_base64=doc1_b64, + name="Order acknowledgement", # can be different from actual file name + file_extension="html", # many different document types are accepted + document_id="1" # a label used to reference the doc + ) + document2 = Document( # create the DocuSign document object + document_base64=doc2_b64, + name="Battle Plan", # can be different from actual file name + file_extension="docx", # many different document types are accepted + document_id="2" # a label used to reference the doc + ) + document3 = Document( # create the DocuSign document object + document_base64=doc3_b64, + name="Lorem Ipsum", # can be different from actual file name + file_extension="pdf", # many different document types are accepted + document_id="3" # a label used to reference the doc + ) + # The order in the docs array determines the order in the envelope + env.documents = [document1, document2, document3] + + # Create the signer recipient model + signer1 = Signer( + email=args["signer_email"], + name=args["signer_name"], + recipient_id="1", + routing_order="1" + ) + # routingOrder (lower means earlier) determines the order of deliveries + # to the recipients. Parallel routing order is supported by using the + # same integer as the order for two or more recipients. + + # create a cc recipient to receive a copy of the documents + cc1 = CarbonCopy( + email=args["cc_email"], + name=args["cc_name"], + recipient_id="2", + routing_order="2" + ) + + # Create signHere fields (also known as tabs) on the documents, + # We"re using anchor (autoPlace) positioning + # + # The DocuSign platform searches throughout your envelope"s + # documents for matching anchor strings. So the + # signHere2 tab will be used in both document 2 and 3 since they + # use the same anchor string for their "signer 1" tabs. + sign_here1 = SignHere( + anchor_string="**signature_1**", + anchor_units="pixels", + anchor_y_offset="10", + anchor_x_offset="20" + ) + + sign_here2 = SignHere( + anchor_string="/sn1/", + anchor_units="pixels", + anchor_y_offset="10", + anchor_x_offset="20" + ) + + # Add the tabs model (including the sign_here tabs) to the signer + # The Tabs object wants arrays of the different field/tab types + signer1.tabs = Tabs(sign_here_tabs=[sign_here1, sign_here2]) + + # Add the recipients to the envelope object + recipients = Recipients(signers=[signer1], carbon_copies=[cc1]) + env.recipients = recipients + + # Request that the envelope be sent by setting |status| to "sent". + # To request that the envelope be created as a draft, set to "created" + env.status = args["status"] + + return env + + @classmethod + def create_document1(cls, args): + """ Creates document 1 -- an html document""" + + return f""" + + + + + + +

World Wide Corp

+

Order Processing Division

+

Ordered by {args["signer_name"]}

+

Email: {args["signer_email"]}

+

Copy to: {args["cc_name"]}, {args["cc_email"]}

+

+ Candy bonbon pastry jujubes lollipop wafer biscuit biscuit. Topping brownie sesame snaps sweet roll pie. + Croissant danish biscuit soufflé caramels jujubes jelly. Dragée danish caramels lemon drops dragée. + Gummi bears cupcake biscuit tiramisu sugar plum pastry. Dragée gummies applicake pudding liquorice. + Donut jujubes oat cake jelly-o. + Dessert bear claw chocolate cake gummies lollipop sugar plum ice cream gummies cheesecake. +

+ +

Agreed: **signature_1**/

+ + + """ + #ds-snippet-end:eSign11Step2 From 60804cd8c0ed8ad53c83399d1feac1a98690f774 Mon Sep 17 00:00:00 2001 From: RomanBachaloSigmaSoftware Date: Fri, 15 Mar 2024 14:25:06 +0200 Subject: [PATCH 02/22] fix linter error --- app/webforms/examples/eg001_create_instance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/webforms/examples/eg001_create_instance.py b/app/webforms/examples/eg001_create_instance.py index 6d72432..49f4a2a 100644 --- a/app/webforms/examples/eg001_create_instance.py +++ b/app/webforms/examples/eg001_create_instance.py @@ -2,7 +2,7 @@ from docusign_webforms import ApiClient, FormInstanceManagementApi, FormManagementApi, CreateInstanceRequestBody from docusign_esign import Document, Signer, SignHere, Tabs, Recipients, TemplatesApi, Checkbox, DateSigned, \ - Text, EnvelopeTemplate + Text, EnvelopeTemplate from ...docusign import create_api_client From 85deeee9adc278ab40ed40ffe4ee48ee9b62f9ba Mon Sep 17 00:00:00 2001 From: RomanBachaloSigmaSoftware <77355790+RomanBachaloSigmaSoftware@users.noreply.github.com> Date: Fri, 22 Mar 2024 22:52:40 +0200 Subject: [PATCH 03/22] Added maestro code examples (#142) * added examples * updates and fixes * remove redundant scope * update example 1 * adding codeDepot markers --------- Co-authored-by: Paige Rossi --- .gitignore | 3 + app/__init__.py | 5 + app/consts.py | 3 + app/docusign/ds_client.py | 8 + app/docusign/utils.py | 12 +- app/ds_config_sample.py | 1 + app/maestro/__init__.py | 3 + .../examples/eg001_trigger_workflow.py | 75 +++ app/maestro/examples/eg002_cancel_workflow.py | 45 ++ .../examples/eg003_get_workflow_status.py | 35 ++ app/maestro/utils.py | 584 ++++++++++++++++++ app/maestro/views/__init__.py | 3 + app/maestro/views/eg001_trigger_workflow.py | 184 ++++++ app/maestro/views/eg002_cancel_workflow.py | 103 +++ .../views/eg003_get_workflow_status.py | 76 +++ app/static/assets/search.js | 3 + app/templates/error.html | 2 +- app/templates/home.html | 2 +- .../maestro/eg001_publish_workflow.html | 11 + .../maestro/eg001_trigger_workflow.html | 59 ++ .../maestro/eg002_cancel_workflow.html | 38 ++ .../maestro/eg003_get_workflow_status.html | 38 ++ 22 files changed, 1290 insertions(+), 3 deletions(-) create mode 100644 app/maestro/__init__.py create mode 100644 app/maestro/examples/eg001_trigger_workflow.py create mode 100644 app/maestro/examples/eg002_cancel_workflow.py create mode 100644 app/maestro/examples/eg003_get_workflow_status.py create mode 100644 app/maestro/utils.py create mode 100644 app/maestro/views/__init__.py create mode 100644 app/maestro/views/eg001_trigger_workflow.py create mode 100644 app/maestro/views/eg002_cancel_workflow.py create mode 100644 app/maestro/views/eg003_get_workflow_status.py create mode 100644 app/templates/maestro/eg001_publish_workflow.html create mode 100644 app/templates/maestro/eg001_trigger_workflow.html create mode 100644 app/templates/maestro/eg002_cancel_workflow.html create mode 100644 app/templates/maestro/eg003_get_workflow_status.html diff --git a/.gitignore b/.gitignore index 73a0dc0..101b3e4 100644 --- a/.gitignore +++ b/.gitignore @@ -123,3 +123,6 @@ private.key # Current flask session flask_session/ + +# Workflow ID file +WORKFLOW_ID.txt \ No newline at end of file diff --git a/app/__init__.py b/app/__init__.py index ac472b8..39f35b4 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -12,6 +12,7 @@ from .monitor import views as monitor_views from .admin import views as admin_views from .connect import views as connect_views +from .maestro import views as maestro_views from .webforms import views as webforms_views from .views import core @@ -114,6 +115,10 @@ app.register_blueprint(connect_views.cneg001) +app.register_blueprint(maestro_views.mseg001) +app.register_blueprint(maestro_views.mseg002) +app.register_blueprint(maestro_views.mseg003) + app.register_blueprint(webforms_views.weg001) if "DYNO" in os.environ: # On Heroku? diff --git a/app/consts.py b/app/consts.py index 532015f..530ce45 100644 --- a/app/consts.py +++ b/app/consts.py @@ -29,6 +29,8 @@ # Base uri for callback function base_uri_suffix = "/restapi" +# Workflow name +workflow_name = "Example workflow - send invite to signer" # Default languages for brand languages = { @@ -114,5 +116,6 @@ "ROOMS": "Rooms", "ADMIN": "Admin", "CONNECT": "Connect", + "MAESTRO": "Maestro", "WEBFORMS": "WebForms" } diff --git a/app/docusign/ds_client.py b/app/docusign/ds_client.py index 384194e..348b4b4 100644 --- a/app/docusign/ds_client.py +++ b/app/docusign/ds_client.py @@ -33,6 +33,10 @@ "asset_group_account_read", "asset_group_account_clone_write", "asset_group_account_clone_read" ] +MAESTRO_SCOPES = [ + "signature", "aow_manage" +] + WEBFORMS_SCOPES = [ "signature", "webforms_read", "webforms_instance_read", "webforms_instance_write" ] @@ -61,6 +65,8 @@ def _auth_code_grant(cls, api): use_scopes.extend(CLICK_SCOPES) elif api == "Admin": use_scopes.extend(ADMIN_SCOPES) + elif api == "Maestro": + use_scopes.extend(MAESTRO_SCOPES) elif api == "WebForms": use_scopes.extend(WEBFORMS_SCOPES) else: @@ -99,6 +105,8 @@ def _jwt_auth(cls, api): use_scopes.extend(CLICK_SCOPES) elif api == "Admin": use_scopes.extend(ADMIN_SCOPES) + elif api == "Maestro": + use_scopes.extend(MAESTRO_SCOPES) elif api == "WebForms": use_scopes.extend(WEBFORMS_SCOPES) else: diff --git a/app/docusign/utils.py b/app/docusign/utils.py index 730751f..eefc0c0 100644 --- a/app/docusign/utils.py +++ b/app/docusign/utils.py @@ -1,7 +1,7 @@ from datetime import timedelta, datetime from functools import wraps import requests -import urllib +from urllib.parse import urlparse, parse_qs import json import re @@ -148,6 +148,16 @@ def get_user_info(access_token, base_path, oauth_host_name): api_client.set_oauth_host_name(oauth_host_name) return api_client.get_user_info(access_token) +def get_parameter_value_from_url(url, param_name): + parsed_url = urlparse(url) + query_params = parse_qs(parsed_url.query) + + # Access the parameter value (returns a list) + param_value_list = query_params.get(param_name, []) + + # If the parameter exists, return the first value; otherwise, return None + return param_value_list[0] if param_value_list else None + def replace_template_id(file_path, template_id): with open(file_path, 'r') as file: content = file.read() diff --git a/app/ds_config_sample.py b/app/ds_config_sample.py index 2d04866..b18d165 100644 --- a/app/ds_config_sample.py +++ b/app/ds_config_sample.py @@ -16,6 +16,7 @@ "rooms_api_client_host": "https://demo.rooms.docusign.com/restapi", "monitor_api_client_host": "https://lens-d.docusign.net", "admin_api_client_host": "https://api-d.docusign.net/management", + "maestro_api_client_host": "https://demo.services.docusign.net/", "webforms_api_client_host": "https://apps-d.docusign.com/api/webforms/v1.1", "allow_silent_authentication": True, # a user can be silently authenticated if they have an # active login session on another tab of the same browser diff --git a/app/maestro/__init__.py b/app/maestro/__init__.py new file mode 100644 index 0000000..1697d73 --- /dev/null +++ b/app/maestro/__init__.py @@ -0,0 +1,3 @@ +from .views import mseg001 +from .views import mseg002 +from .views import mseg003 diff --git a/app/maestro/examples/eg001_trigger_workflow.py b/app/maestro/examples/eg001_trigger_workflow.py new file mode 100644 index 0000000..7a99cac --- /dev/null +++ b/app/maestro/examples/eg001_trigger_workflow.py @@ -0,0 +1,75 @@ +from docusign_maestro import WorkflowManagementApi, WorkflowTriggerApi, TriggerPayload +from flask import session, request + +from app.docusign.utils import get_parameter_value_from_url +from app.ds_config import DS_CONFIG +from app.maestro.utils import create_maestro_api_client +from app.consts import pattern + + +class Eg001TriggerWorkflowController: + @staticmethod + def get_args(): + """Get request and session arguments""" + return { + "account_id": session["ds_account_id"], + "base_path": DS_CONFIG["maestro_api_client_host"], + "access_token": session["ds_access_token"], + "workflow_id": session["workflow_id"], + "instance_name": pattern.sub("", request.form.get("instance_name")), + "signer_email": pattern.sub("", request.form.get("signer_email")), + "signer_name": pattern.sub("", request.form.get("signer_name")), + "cc_email": pattern.sub("", request.form.get("cc_email")), + "cc_name": pattern.sub("", request.form.get("cc_name")), + } + + @staticmethod + def get_workflow_definitions(args): + api_client = create_maestro_api_client(args["base_path"], args["access_token"]) + workflow_management_api = WorkflowManagementApi(api_client) + workflow_definitions = workflow_management_api.get_workflow_definitions(args["account_id"], status="active") + + return workflow_definitions + + @staticmethod + def get_workflow_definition(args): + #ds-snippet-start:Maestro1Step2 + api_client = create_maestro_api_client(args["base_path"], args["access_token"]) + #ds-snippet-end:Maestro1Step2 + + #ds-snippet-start:Maestro1Step3 + workflow_management_api = WorkflowManagementApi(api_client) + workflow_definition = workflow_management_api.get_workflow_definition(args["account_id"], args["workflow_id"]) + #ds-snippet-end:Maestro1Step3 + + return workflow_definition + + @staticmethod + def trigger_workflow(workflow, args): + api_client = create_maestro_api_client(args["base_path"], args["access_token"]) + + #ds-snippet-start:Maestro1Step4 + trigger_payload = TriggerPayload( + instance_name=args["instance_name"], + participant={}, + payload={ + "signerEmail": args["signer_email"], + "signerName": args["signer_name"], + "ccEmail": args["cc_email"], + "ccName": args["cc_name"] + }, + metadata={} + ) + mtid = get_parameter_value_from_url(workflow.trigger_url, "mtid") + mtsec = get_parameter_value_from_url(workflow.trigger_url, "mtsec") + #ds-snippet-end:Maestro1Step4 + + #ds-snippet-start:Maestro1Step5 + workflow_trigger_api = WorkflowTriggerApi(api_client) + trigger_response = workflow_trigger_api.trigger_workflow( + args["account_id"], + trigger_payload, + mtid=mtid, mtsec=mtsec + ) + #ds-snippet-end:Maestro1Step5 + return trigger_response diff --git a/app/maestro/examples/eg002_cancel_workflow.py b/app/maestro/examples/eg002_cancel_workflow.py new file mode 100644 index 0000000..4425ef1 --- /dev/null +++ b/app/maestro/examples/eg002_cancel_workflow.py @@ -0,0 +1,45 @@ +from docusign_maestro import WorkflowInstanceManagementApi +from flask import session + +from app.ds_config import DS_CONFIG +from app.maestro.utils import create_maestro_api_client + + +class Eg002CancelWorkflowController: + @staticmethod + def get_args(): + """Get request and session arguments""" + return { + "account_id": session["ds_account_id"], + "base_path": DS_CONFIG["maestro_api_client_host"], + "access_token": session["ds_access_token"], + "workflow_id": session["workflow_id"], + "instance_id": session["instance_id"] + } + + @staticmethod + def get_instance_state(args): + api_client = create_maestro_api_client(args["base_path"], args["access_token"]) + workflow_instance_management_api = WorkflowInstanceManagementApi(api_client) + instance = workflow_instance_management_api.get_workflow_instance( + args["account_id"], + args["workflow_id"], + args["instance_id"] + ) + + return instance.instance_state + + @staticmethod + def cancel_workflow_instance(args): + #ds-snippet-start:Maestro2Step2 + api_client = create_maestro_api_client(args["base_path"], args["access_token"]) + #ds-snippet-end:Maestro2Step2 + + #ds-snippet-start:Maestro2Step3 + workflow_instance_management_api = WorkflowInstanceManagementApi(api_client) + cancel_result = workflow_instance_management_api.cancel_workflow_instance( + args["account_id"], + args["instance_id"] + ) + #ds-snippet-end:Maestro2Step3 + return cancel_result diff --git a/app/maestro/examples/eg003_get_workflow_status.py b/app/maestro/examples/eg003_get_workflow_status.py new file mode 100644 index 0000000..4777f0a --- /dev/null +++ b/app/maestro/examples/eg003_get_workflow_status.py @@ -0,0 +1,35 @@ +from docusign_maestro import WorkflowInstanceManagementApi +from flask import session + +from app.ds_config import DS_CONFIG +from app.maestro.utils import create_maestro_api_client + + +class Eg003GetWorkflowStatusController: + @staticmethod + def get_args(): + """Get request and session arguments""" + return { + "account_id": session["ds_account_id"], + "base_path": DS_CONFIG["maestro_api_client_host"], + "access_token": session["ds_access_token"], + "workflow_id": session["workflow_id"], + "instance_id": session["instance_id"] + } + + @staticmethod + def get_workflow_instance(args): + #ds-snippet-start:Maestro3Step2 + api_client = create_maestro_api_client(args["base_path"], args["access_token"]) + #ds-snippet-end:Maestro3Step2 + + #ds-snippet-start:Maestro3Step3 + workflow_instance_management_api = WorkflowInstanceManagementApi(api_client) + instance = workflow_instance_management_api.get_workflow_instance( + args["account_id"], + args["workflow_id"], + args["instance_id"] + ) + #ds-snippet-end:Maestro3Step3 + + return instance diff --git a/app/maestro/utils.py b/app/maestro/utils.py new file mode 100644 index 0000000..a44125d --- /dev/null +++ b/app/maestro/utils.py @@ -0,0 +1,584 @@ +import uuid +from docusign_maestro import ApiClient, WorkflowManagementApi, WorkflowDefinition, DeployRequest, \ + DSWorkflowTrigger, DSWorkflowVariableFromVariable, DeployStatus + +import json + + +def create_maestro_api_client(base_path, access_token): + api_client = ApiClient() + api_client.host = base_path + api_client.set_default_header(header_name="Authorization", header_value=f"Bearer {access_token}") + + return api_client + + +def create_workflow(args): + signer_id = str(uuid.uuid4()) + cc_id = str(uuid.uuid4()) + trigger_id = "wfTrigger" + + participants = { + signer_id: { + "participantRole": "Signer" + }, + cc_id: { + "participantRole": "CC" + } + } + + dac_id_field = f"dacId_{trigger_id}" + id_field = f"id_{trigger_id}" + signer_name_field = f"signerName_{trigger_id}" + signer_email_field = f"signerEmail_{trigger_id}" + cc_name_field = f"ccName_{trigger_id}" + cc_email_field = f"ccEmail_{trigger_id}" + + trigger = DSWorkflowTrigger( + name="Get_URL", + type="Http", + http_type="Get", + id=trigger_id, + input={ + 'metadata': { + 'customAttributes': {} + }, + 'payload': { + dac_id_field: { + 'source': 'step', + 'propertyName': 'dacId', + 'stepId': trigger_id + }, + id_field: { + 'source': 'step', + 'propertyName': 'id', + 'stepId': trigger_id + }, + signer_name_field: { + 'source': 'step', + 'propertyName': 'signerName', + 'stepId': trigger_id + }, + signer_email_field: { + 'source': 'step', + 'propertyName': 'signerEmail', + 'stepId': trigger_id + }, + cc_name_field: { + 'source': 'step', + 'propertyName': 'ccName', + 'stepId': trigger_id + }, + cc_email_field: { + 'source': 'step', + 'propertyName': 'ccEmail', + 'stepId': trigger_id + } + }, + 'participants': {} + }, + output={ + dac_id_field: { + 'source': 'step', + 'propertyName': 'dacId', + 'stepId': trigger_id + } + } + ) + + variables = { + dac_id_field: DSWorkflowVariableFromVariable(source='step', property_name='dacId', step_id=trigger_id), + id_field: DSWorkflowVariableFromVariable(source='step', property_name='id', step_id=trigger_id), + signer_name_field: DSWorkflowVariableFromVariable(source='step', property_name='signerName', + step_id=trigger_id), + signer_email_field: DSWorkflowVariableFromVariable(source='step', property_name='signerEmail', + step_id=trigger_id), + cc_name_field: DSWorkflowVariableFromVariable(source='step', property_name='ccName', step_id=trigger_id), + cc_email_field: DSWorkflowVariableFromVariable(source='step', property_name='ccEmail', step_id=trigger_id), + 'envelopeId_step2': DSWorkflowVariableFromVariable(source='step', property_name='envelopeId', step_id='step2', + type='String'), + 'combinedDocumentsBase64_step2': DSWorkflowVariableFromVariable(source='step', + property_name='combinedDocumentsBase64', + step_id='step2', type='File'), + 'fields.signer.text.value_step2': DSWorkflowVariableFromVariable(source='step', + property_name='fields.signer.text.value', + step_id='step2', type='String') + } + + step1 = { + 'id': 'step1', + 'name': 'Set Up Invite', + 'moduleName': 'Notification-SendEmail', + 'configurationProgress': 'Completed', + 'type': 'DS-EmailNotification', + 'config': { + 'templateType': 'WorkflowParticipantNotification', + 'templateVersion': 1, + 'language': 'en', + 'sender_name': 'DocuSign Orchestration', + 'sender_alias': 'Orchestration', + 'participantId': signer_id + }, + 'input': { + 'recipients': [ + { + 'name': { + 'source': 'step', + 'propertyName': 'signerName', + 'stepId': trigger_id + }, + 'email': { + 'source': 'step', + 'propertyName': 'signerEmail', + 'stepId': trigger_id + } + } + ], + 'mergeValues': { + 'CustomMessage': 'Follow this link to access and complete the workflow.', + 'ParticipantFullName': { + 'source': 'step', + 'propertyName': 'signerName', + 'stepId': trigger_id + } + } + }, + 'output': {} + } + + step2 = { + "id": 'step2', + "name": 'Get Signatures', + "moduleName": 'ESign', + "configurationProgress": 'Completed', + "type": 'DS-Sign', + "config": { + "participantId": signer_id, + }, + "input": { + "isEmbeddedSign": True, + "documents": [ + { + "type": 'FromDSTemplate', + "eSignTemplateId": args["template_id"], + }, + ], + "emailSubject": 'Please sign this document', + "emailBlurb": '', + "recipients": { + "signers": [ + { + "defaultRecipient": 'false', + "tabs": { + "signHereTabs": [ + { + "stampType": 'signature', + "name": 'SignHere', + "tabLabel": 'Sign Here', + "scaleValue": '1', + "optional": 'false', + "documentId": '1', + "recipientId": '1', + "pageNumber": '1', + "xPosition": '191', + "yPosition": '148', + "tabId": '1', + "tabType": 'signhere', + }, + ], + 'textTabs': [ + { + "requireAll": 'false', + "value": '', + "required": 'false', + "locked": 'false', + "concealValueOnDocument": 'false', + "disableAutoSize": 'false', + "tabLabel": 'text', + "font": 'helvetica', + "fontSize": 'size14', + "localePolicy": {}, + "documentId": '1', + "recipientId": '1', + "pageNumber": '1', + "xPosition": '153', + "yPosition": '230', + "width": '84', + "height": '23', + "tabId": '2', + "tabType": 'text', + }, + ], + "checkboxTabs": [ + { + "name": '', + "tabLabel": 'ckAuthorization', + "selected": 'false', + "selectedOriginal": 'false', + "requireInitialOnSharedChange": 'false', + "required": 'true', + "locked": 'false', + "documentId": '1', + "recipientId": '1', + "pageNumber": '1', + "xPosition": '75', + "yPosition": '417', + "width": '0', + "height": '0', + "tabId": '3', + "tabType": 'checkbox', + }, + { + "name": '', + "tabLabel": 'ckAuthentication', + "selected": 'false', + "selectedOriginal": 'false', + "requireInitialOnSharedChange": 'false', + "required": 'true', + "locked": 'false', + "documentId": '1', + "recipientId": '1', + "pageNumber": '1', + "xPosition": '75', + "yPosition": '447', + "width": '0', + "height": '0', + "tabId": '4', + "tabType": 'checkbox', + }, + { + "name": '', + "tabLabel": 'ckAgreement', + "selected": 'false', + "selectedOriginal": 'false', + "requireInitialOnSharedChange": 'false', + "required": 'true', + "locked": 'false', + "documentId": '1', + "recipientId": '1', + "pageNumber": '1', + "xPosition": '75', + "yPosition": '478', + "width": '0', + "height": '0', + "tabId": '5', + "tabType": 'checkbox', + }, + { + "name": '', + "tabLabel": 'ckAcknowledgement', + "selected": 'false', + "selectedOriginal": 'false', + "requireInitialOnSharedChange": 'false', + "required": 'true', + "locked": 'false', + "documentId": '1', + "recipientId": '1', + "pageNumber": '1', + "xPosition": '75', + "yPosition": '508', + "width": '0', + "height": '0', + "tabId": '6', + "tabType": 'checkbox', + }, + ], + "radioGroupTabs": [ + { + "documentId": '1', + "recipientId": '1', + "groupName": 'radio1', + "radios": [ + { + "pageNumber": '1', + "xPosition": '142', + "yPosition": '384', + "value": 'white', + "selected": 'false', + "tabId": '7', + "required": 'false', + "locked": 'false', + "bold": 'false', + "italic": 'false', + "underline": 'false', + "fontColor": 'black', + "fontSize": 'size7', + }, + { + "pageNumber": '1', + "xPosition": '74', + "yPosition": '384', + "value": 'red', + "selected": 'false', + "tabId": '8', + "required": 'false', + "locked": 'false', + "bold": 'false', + "italic": 'false', + "underline": 'false', + "fontColor": 'black', + "fontSize": 'size7', + }, + { + "pageNumber": '1', + "xPosition": '220', + "yPosition": '384', + "value": 'blue', + "selected": 'false', + "tabId": '9', + "required": 'false', + "locked": 'false', + "bold": 'false', + "italic": 'false', + "underline": 'false', + "fontColor": 'black', + "fontSize": 'size7', + }, + ], + "shared": 'false', + "requireInitialOnSharedChange": 'false', + "requireAll": 'false', + "tabType": 'radiogroup', + "value": '', + "originalValue": '', + }, + ], + "listTabs": [ + { + "listItems": [ + { + "text": 'Red', + "value": 'red', + "selected": 'false', + }, + { + "text": 'Orange', + "value": 'orange', + "selected": 'false', + }, + { + "text": 'Yellow', + "value": 'yellow', + "selected": 'false', + }, + { + "text": 'Green', + "value": 'green', + "selected": 'false', + }, + { + "text": 'Blue', + "value": 'blue', + "selected": 'false', + }, + { + "text": 'Indigo', + "value": 'indigo', + "selected": 'false', + }, + { + "text": 'Violet', + "value": 'violet', + "selected": 'false', + }, + ], + "value": '', + "originalValue": '', + "required": 'false', + "locked": 'false', + "requireAll": 'false', + "tabLabel": 'list', + "font": 'helvetica', + "fontSize": 'size14', + "localePolicy": {}, + "documentId": '1', + "recipientId": '1', + "pageNumber": '1', + "xPosition": '142', + "yPosition": '291', + "width": '78', + "height": '0', + "tabId": '10', + "tabType": 'list', + }, + ], + "numericalTabs": [ + { + "validationType": 'currency', + "value": '', + "required": 'false', + "locked": 'false', + "concealValueOnDocument": 'false', + "disableAutoSize": 'false', + "tabLabel": 'numericalCurrency', + "font": 'helvetica', + "fontSize": 'size14', + "localePolicy": { + "cultureName": 'en-US', + "currencyPositiveFormat": + 'csym_1_comma_234_comma_567_period_89', + "currencyNegativeFormat": + 'opar_csym_1_comma_234_comma_567_period_89_cpar', + "currencyCode": 'usd', + }, + "documentId": '1', + "recipientId": '1', + "pageNumber": '1', + "xPosition": '163', + "yPosition": '260', + "width": '84', + "height": '0', + "tabId": '11', + "tabType": 'numerical', + }, + ], + }, + "signInEachLocation": 'false', + "agentCanEditEmail": 'false', + "agentCanEditName": 'false', + "requireUploadSignature": 'false', + "name": { + "source": 'step', + "propertyName": 'signerName', + "stepId": trigger_id, + }, + "email": { + "source": 'step', + "propertyName": 'signerEmail', + "stepId": trigger_id, + }, + "recipientId": '1', + "recipientIdGuid": '00000000-0000-0000-0000-000000000000', + "accessCode": '', + "requireIdLookup": 'false', + "routingOrder": '1', + "note": '', + "roleName": 'signer', + "completedCount": '0', + "deliveryMethod": 'email', + "templateLocked": 'false', + "templateRequired": 'false', + "inheritEmailNotificationConfiguration": 'false', + "recipientType": 'signer', + }, + ], + "carbonCopies": [ + { + "agentCanEditEmail": 'false', + "agentCanEditName": 'false', + "name": { + "source": 'step', + "propertyName": 'ccName', + "stepId": trigger_id, + }, + "email": { + "source": 'step', + "propertyName": 'ccEmail', + "stepId": trigger_id, + }, + "recipientId": '2', + "recipientIdGuid": '00000000-0000-0000-0000-000000000000', + "accessCode": '', + "requireIdLookup": 'false', + "routingOrder": '2', + "note": '', + "roleName": 'cc', + "completedCount": '0', + "deliveryMethod": 'email', + "templateLocked": 'false', + "templateRequired": 'false', + "inheritEmailNotificationConfiguration": 'false', + "recipientType": 'carboncopy', + }, + ], + "certifiedDeliveries": [], + }, + }, + "output": { + "envelopeId_step2": { + "source": 'step', + "propertyName": 'envelopeId', + "stepId": 'step2', + "type": 'String', + }, + "combinedDocumentsBase64_step2": { + "source": 'step', + "propertyName": 'combinedDocumentsBase64', + "stepId": 'step2', + "type": 'File', + }, + 'fields.signer.text.value_step2': { + "source": 'step', + "propertyName": 'fields.signer.text.value', + "stepId": 'step2', + "type": 'String', + }, + }, + } + + step3 = { + "id": 'step3', + "name": 'Show a Confirmation Screen', + "moduleName": 'ShowConfirmationScreen', + "configurationProgress": 'Completed', + "type": 'DS-ShowScreenStep', + "config": { + "participantId": signer_id + }, + "input": { + "httpType": "Post", + "payload": { + "participantId": signer_id, + "confirmationMessage": { + "title": 'Tasks complete', + "description": 'You have completed all your workflow tasks.' + } + } + }, + "output": {} + } + + workflow_definition = WorkflowDefinition( + workflow_name="Example workflow - send invite to signer", + workflow_description="", + document_version="1.0.0", + schema_version="1.0.0", + account_id=args["account_id"], + participants=participants, + trigger=trigger, + variables=variables, + steps=[step1, step2, step3] + ) + + api_client = create_maestro_api_client(args["base_path"], args["access_token"]) + workflow_management_api = WorkflowManagementApi(api_client) + # body = {"workflowDefinition": workflow_definition.__dict__} + workflow = workflow_management_api.create_workflow_definition( + args["account_id"], + {"workflowDefinition": workflow_definition} + ) + + return workflow.workflow_definition_id + + +def publish_workflow(args, workflow_id): + api_client = create_maestro_api_client(args["base_path"], args["access_token"]) + workflow_management_api = WorkflowManagementApi(api_client) + + try: + deploy_request = DeployRequest( + deployment_status=DeployStatus.PUBLISH + ) + workflow_management_api.publish_or_un_publish_workflow_definition( + args["account_id"], + workflow_id, + deploy_request + ) + except Exception as err: + if hasattr(err, 'response') and hasattr(err.response, 'data'): + response_data = json.loads(err.response.data) + if 'message' in response_data: + is_consent_required = response_data['message'] == 'Consent required' + if is_consent_required: + return response_data["consentUrl"] + raise err diff --git a/app/maestro/views/__init__.py b/app/maestro/views/__init__.py new file mode 100644 index 0000000..93520d8 --- /dev/null +++ b/app/maestro/views/__init__.py @@ -0,0 +1,3 @@ +from .eg001_trigger_workflow import mseg001 +from .eg002_cancel_workflow import mseg002 +from .eg003_get_workflow_status import mseg003 diff --git a/app/maestro/views/eg001_trigger_workflow.py b/app/maestro/views/eg001_trigger_workflow.py new file mode 100644 index 0000000..8df42bd --- /dev/null +++ b/app/maestro/views/eg001_trigger_workflow.py @@ -0,0 +1,184 @@ +"""Example 001: How to trigger a Maestro workflow""" + +import json + +from docusign_maestro.client.api_exception import ApiException +from flask import render_template, Blueprint, session + +from ..examples.eg001_trigger_workflow import Eg001TriggerWorkflowController +from ...docusign import authenticate, ensure_manifest, get_example_by_number +from ...ds_config import DS_CONFIG +from ...error_handlers import process_error +from ...consts import API_TYPE +from ..utils import create_workflow, publish_workflow + +example_number = 1 +api = API_TYPE["MAESTRO"] +eg = f"mseg00{example_number}" # reference (and url) for this example +mseg001 = Blueprint(eg, __name__) + + +@mseg001.route(f"/{eg}", methods=["POST"]) +@ensure_manifest(manifest_url=DS_CONFIG["example_manifest_url"]) +@authenticate(eg=eg, api=api) +def trigger_workflow(): + """ + 1. Get required arguments + 2. Call the worker method + 3. Show results + """ + example = get_example_by_number(session["manifest"], example_number, api) + + # 1. Get required arguments + args = Eg001TriggerWorkflowController.get_args() + try: + # 1. Call the worker method + print("args:\n\n") + print(args) + workflow = Eg001TriggerWorkflowController.get_workflow_definition(args) + results = Eg001TriggerWorkflowController.trigger_workflow(workflow, args) + session["instance_id"] = results.instance_id + except ApiException as err: + if hasattr(err, "status"): + if err.status == 403: + return render_template( + "error.html", + err=err, + error_code=err.status, + error_message=session["manifest"]["SupportingTexts"]["ContactSupportToEnableFeature"] + .format("Maestro") + ) + + return process_error(err) + # 3. Show results + return render_template( + "example_done.html", + title=example["ExampleName"], + message=example["ResultsPageText"], + json=json.dumps(json.dumps(results.to_dict())) + ) + + +@mseg001.route(f"/{eg}", methods=["GET"]) +@ensure_manifest(manifest_url=DS_CONFIG["example_manifest_url"]) +@authenticate(eg=eg, api=api) +def get_view(): + """responds with the form for the example""" + example = get_example_by_number(session["manifest"], example_number, api) + additional_page_data = next((p for p in example["AdditionalPage"] if p["Name"] == "publish_workflow"), None) + + args = { + "account_id": session["ds_account_id"], + "base_path": DS_CONFIG["maestro_api_client_host"], + "access_token": session["ds_access_token"], + "template_id": session.get("template_id", None) + } + try: + workflows = Eg001TriggerWorkflowController.get_workflow_definitions(args) + + if workflows.count > 0: + sorted_workflows = sorted( + workflows.value, + key=lambda w: w.last_updated_date, + reverse=True + ) + + if sorted_workflows: + session["workflow_id"] = sorted_workflows[0].id + + if "workflow_id" not in session: + if "template_id" not in session: + return render_template( + "maestro/eg001_trigger_workflow.html", + title=example["ExampleName"], + example=example, + template_ok=False, + source_file="eg001_trigger_workflow.py", + source_url=DS_CONFIG["github_example_url"] + "eg001_trigger_workflow.py", + documentation=DS_CONFIG["documentation"] + eg, + show_doc=DS_CONFIG["documentation"], + ) + + # if there is no workflow, then create one + session["workflow_id"] = create_workflow(args) + consent_url = publish_workflow(args, session["workflow_id"]) + + if consent_url: + return render_template( + "maestro/eg001_publish_workflow.html", + title=example["ExampleName"], + message=additional_page_data["ResultsPageText"], + consent_url=consent_url + ) + + except ApiException as err: + if hasattr(err, "status"): + if err.status == 403: + return render_template( + "error.html", + err=err, + error_code=err.status, + error_message=session["manifest"]["SupportingTexts"]["ContactSupportToEnableFeature"] + .format("Maestro") + ) + + return process_error(err) + + return render_template( + "maestro/eg001_trigger_workflow.html", + title=example["ExampleName"], + example=example, + template_ok=True, + source_file="eg001_trigger_workflow.py", + source_url=DS_CONFIG["github_example_url"] + "eg001_trigger_workflow.py", + documentation=DS_CONFIG["documentation"] + eg, + show_doc=DS_CONFIG["documentation"], + ) + +@mseg001.route(f"/{eg}publish", methods=["POST"]) +@ensure_manifest(manifest_url=DS_CONFIG["example_manifest_url"]) +@authenticate(eg=eg, api=api) +def publish_workflow_view(): + """responds with the form for the example""" + example = get_example_by_number(session["manifest"], example_number, api) + additional_page_data = next((p for p in example["AdditionalPage"] if p["Name"] == "publish_workflow"), None) + + args = { + "account_id": session["ds_account_id"], + "base_path": DS_CONFIG["maestro_api_client_host"], + "access_token": session["ds_access_token"] + } + try: + consent_url = publish_workflow(args, session["workflow_id"]) + + if consent_url: + return render_template( + "maestro/eg001_publish_workflow.html", + title=example["ExampleName"], + message=additional_page_data["ResultsPageText"], + consent_url=consent_url + ) + + except ApiException as err: + if hasattr(err, "status"): + if err.status == 403: + return render_template( + "error.html", + err=err, + error_code=err.status, + error_message=session["manifest"]["SupportingTexts"]["ContactSupportToEnableFeature"] + .format("Maestro") + ) + + return process_error(err) + + return render_template( + "maestro/eg001_trigger_workflow.html", + title=example["ExampleName"], + example=example, + template_ok=True, + source_file="eg001_trigger_workflow.py", + source_url=DS_CONFIG["github_example_url"] + "eg001_trigger_workflow.py", + documentation=DS_CONFIG["documentation"] + eg, + show_doc=DS_CONFIG["documentation"], + ) diff --git a/app/maestro/views/eg002_cancel_workflow.py b/app/maestro/views/eg002_cancel_workflow.py new file mode 100644 index 0000000..e5a86fa --- /dev/null +++ b/app/maestro/views/eg002_cancel_workflow.py @@ -0,0 +1,103 @@ +"""Example 002: How to cancel a Maestro workflow instance""" + +import json + +from docusign_maestro.client.api_exception import ApiException +from flask import render_template, Blueprint, session + +from ..examples.eg002_cancel_workflow import Eg002CancelWorkflowController +from ...docusign import authenticate, ensure_manifest, get_example_by_number +from ...ds_config import DS_CONFIG +from ...error_handlers import process_error +from ...consts import API_TYPE + +example_number = 2 +api = API_TYPE["MAESTRO"] +eg = f"mseg00{example_number}" # reference (and url) for this example +mseg002 = Blueprint(eg, __name__) + + +@mseg002.route(f"/{eg}", methods=["POST"]) +@ensure_manifest(manifest_url=DS_CONFIG["example_manifest_url"]) +@authenticate(eg=eg, api=api) +def cancel_workflow(): + """ + 1. Get required arguments + 2. Call the worker method + 3. Show results + """ + example = get_example_by_number(session["manifest"], example_number, api) + + # 1. Get required arguments + args = Eg002CancelWorkflowController.get_args() + try: + # 1. Call the worker method + results = Eg002CancelWorkflowController.cancel_workflow_instance(args) + except ApiException as err: + if hasattr(err, "status"): + if err.status == 403: + return render_template( + "error.html", + err=err, + error_code=err.status, + error_message=session["manifest"]["SupportingTexts"]["ContactSupportToEnableFeature"] + .format("Maestro") + ) + + return process_error(err) + # 3. Show results + return render_template( + "example_done.html", + title=example["ExampleName"], + message=example["ResultsPageText"].format(session["instance_id"]), + json=json.dumps(json.dumps(results.to_dict())) + ) + + +@mseg002.route(f"/{eg}", methods=["GET"]) +@ensure_manifest(manifest_url=DS_CONFIG["example_manifest_url"]) +@authenticate(eg=eg, api=api) +def get_view(): + """responds with the form for the example""" + example = get_example_by_number(session["manifest"], example_number, api) + + instance_ok = False + workflow_id = session.get("workflow_id", None) + instance_id = session.get("instance_id", None) + if workflow_id and instance_id: + args = { + "account_id": session["ds_account_id"], + "base_path": DS_CONFIG["maestro_api_client_host"], + "access_token": session["ds_access_token"], + "workflow_id": workflow_id, + "instance_id": instance_id + } + + try: + state = Eg002CancelWorkflowController.get_instance_state(args) + instance_ok = state.lower() == "in progress" + except ApiException as err: + if hasattr(err, "status"): + if err.status == 403: + return render_template( + "error.html", + err=err, + error_code=err.status, + error_message=session["manifest"]["SupportingTexts"]["ContactSupportToEnableFeature"] + .format("Maestro") + ) + + return process_error(err) + + return render_template( + "maestro/eg002_cancel_workflow.html", + title=example["ExampleName"], + example=example, + instance_ok=instance_ok, + workflow_id=workflow_id, + instance_id=instance_id, + source_file="eg002_cancel_workflow.py", + source_url=DS_CONFIG["github_example_url"] + "eg002_cancel_workflow.py", + documentation=DS_CONFIG["documentation"] + eg, + show_doc=DS_CONFIG["documentation"], + ) diff --git a/app/maestro/views/eg003_get_workflow_status.py b/app/maestro/views/eg003_get_workflow_status.py new file mode 100644 index 0000000..6a5cc37 --- /dev/null +++ b/app/maestro/views/eg003_get_workflow_status.py @@ -0,0 +1,76 @@ +"""Example 003: How to get the status of a Maestro workflow instance""" + +import json + +from docusign_maestro.client.api_exception import ApiException +from flask import render_template, Blueprint, session + +from ..examples.eg003_get_workflow_status import Eg003GetWorkflowStatusController +from ...docusign import authenticate, ensure_manifest, get_example_by_number +from ...ds_config import DS_CONFIG +from ...error_handlers import process_error +from ...consts import API_TYPE + +example_number = 3 +api = API_TYPE["MAESTRO"] +eg = f"mseg00{example_number}" # reference (and url) for this example +mseg003 = Blueprint(eg, __name__) + + +@mseg003.route(f"/{eg}", methods=["POST"]) +@ensure_manifest(manifest_url=DS_CONFIG["example_manifest_url"]) +@authenticate(eg=eg, api=api) +def get_workflow_status(): + """ + 1. Get required arguments + 2. Call the worker method + 3. Show results + """ + example = get_example_by_number(session["manifest"], example_number, api) + + # 1. Get required arguments + args = Eg003GetWorkflowStatusController.get_args() + try: + # 1. Call the worker method + results = Eg003GetWorkflowStatusController.get_workflow_instance(args) + except ApiException as err: + if hasattr(err, "status"): + if err.status == 403: + return render_template( + "error.html", + err=err, + error_code=err.status, + error_message=session["manifest"]["SupportingTexts"]["ContactSupportToEnableFeature"] + .format("Maestro") + ) + + return process_error(err) + # 3. Show results + return render_template( + "example_done.html", + title=example["ExampleName"], + message=example["ResultsPageText"].format(results.instance_state), + json=json.dumps(json.dumps(results.to_dict(), default=str)) + ) + + +@mseg003.route(f"/{eg}", methods=["GET"]) +@ensure_manifest(manifest_url=DS_CONFIG["example_manifest_url"]) +@authenticate(eg=eg, api=api) +def get_view(): + """responds with the form for the example""" + example = get_example_by_number(session["manifest"], example_number, api) + + workflow_id = session.get("workflow_id", None) + instance_id = session.get("instance_id", None) + return render_template( + "maestro/eg003_get_workflow_status.html", + title=example["ExampleName"], + example=example, + workflow_id=workflow_id, + instance_id=instance_id, + source_file="eg003_get_workflow_status.py", + source_url=DS_CONFIG["github_example_url"] + "eg003_get_workflow_status.py", + documentation=DS_CONFIG["documentation"] + eg, + show_doc=DS_CONFIG["documentation"], + ) diff --git a/app/static/assets/search.js b/app/static/assets/search.js index 92e2e2c..8c564c7 100644 --- a/app/static/assets/search.js +++ b/app/static/assets/search.js @@ -6,6 +6,7 @@ const DS_SEARCH = (function () { ROOMS: "rooms", ADMIN: "admin", CONNECT: "connect", + MAESTRO: "maestro", WEBFORMS: "webforms" } @@ -143,6 +144,8 @@ const DS_SEARCH = (function () { return "eg"; case API_TYPES.CONNECT: return "cneg"; + case API_TYPES.MAESTRO: + return "mseg"; case API_TYPES.WEBFORMS: return "weg"; } diff --git a/app/templates/error.html b/app/templates/error.html index 35b9a86..1a8819d 100644 --- a/app/templates/error.html +++ b/app/templates/error.html @@ -7,7 +7,7 @@

Problem: an error occurred

Error information:

{% if error_code %} -

{{ error_code }}: {{ error_message }}

+

{{ error_code }}: {{ error_message | safe }}

{% else %}

{{ err }}

{% endif %} diff --git a/app/templates/home.html b/app/templates/home.html index 72e9b04..701c56f 100644 --- a/app/templates/home.html +++ b/app/templates/home.html @@ -45,7 +45,7 @@

{{ group["Name"] }}

{% for example in group["Examples"] -%} {% if not example["SkipForLanguages"] or "python" not in example["SkipForLanguages"] %} {% if example.CFREnabled != "CFROnly" %} - {% set api_prefix = "a" if api["Name"] == "Admin" else "c" if api["Name"] == "Click" else "r" if api["Name"] == "Rooms" else "m" if api["Name"] == "Monitor" else "cn" if api["Name"] == "Connect" else "w" if api["Name"] == "WebForms" else "" %} + {% set api_prefix = "a" if api["Name"] == "Admin" else "c" if api["Name"] == "Click" else "r" if api["Name"] == "Rooms" else "m" if api["Name"] == "Monitor" else "cn" if api["Name"] == "Connect" else "ms" if api["Name"] == "Maestro" else "w" if api["Name"] == "WebForms" else "" %}

diff --git a/app/templates/maestro/eg001_publish_workflow.html b/app/templates/maestro/eg001_publish_workflow.html new file mode 100644 index 0000000..b17ae2d --- /dev/null +++ b/app/templates/maestro/eg001_publish_workflow.html @@ -0,0 +1,11 @@ + {% extends "base.html" %} {% block content %} + +

{{ title }}

+

{{ message.format(consent_url) | safe }}

+ +
+ + {% include 'submit_button.html' %} +
+ +{% endblock %} diff --git a/app/templates/maestro/eg001_trigger_workflow.html b/app/templates/maestro/eg001_trigger_workflow.html new file mode 100644 index 0000000..3660b61 --- /dev/null +++ b/app/templates/maestro/eg001_trigger_workflow.html @@ -0,0 +1,59 @@ + {% extends "base.html" %} {% block content %} + +{% include 'example_info.html' %} + +{% set form_index = 0 %} +{% set instance_name_index = 0 %} +{% set signer_email_index = 1 %} +{% set signer_name_index = 2 %} +{% set cc_email_index = 3 %} +{% set cc_name_index = 4 %} +{% set redirect_to8_index = 0 %} + +{% if template_ok %} +
+ {% if 'FormName' in example['Forms'][form_index] %} +

{{ example['Forms'][form_index]['FormName'] | safe }}

+ {% endif %} + +
+ + +
+
+ + + {{ session['manifest']['SupportingTexts']['HelpingTexts']['EmailWontBeShared'] | safe}} +
+
+ + +
+
+ + + The email for the cc recipient must be different from the signer's email. +
+
+ + +
+ + + {% include 'submit_button.html' %} +
+{% else %} + {{ example['RedirectsToOtherCodeExamples'][redirect_to8_index]['RedirectText'].format('href="eg008"') | safe }} + +
+ {% include 'continue_button.html' %} +
+{% endif %} + +{% endblock %} diff --git a/app/templates/maestro/eg002_cancel_workflow.html b/app/templates/maestro/eg002_cancel_workflow.html new file mode 100644 index 0000000..a0545d7 --- /dev/null +++ b/app/templates/maestro/eg002_cancel_workflow.html @@ -0,0 +1,38 @@ + {% extends "base.html" %} {% block content %} + +{% include 'example_info.html' %} + +{% set form_index = 0 %} +{% set workflow_id_index = 0 %} +{% set instance_id_index = 1 %} +{% set redirect_to8_index = 0 %} + +{% if instance_ok %} +
+ {% if 'FormName' in example['Forms'][form_index] %} +

{{ example['Forms'][form_index]['FormName'] | safe }}

+ {% endif %} + +
+ + +
+
+ + +
+ + + {% include 'submit_button.html' %} +
+{% else %} + {{ example['RedirectsToOtherCodeExamples'][redirect_to8_index]['RedirectText'].format('href="mseg001"') | safe }} + +
+ {% include 'continue_button.html' %} +
+{% endif %} + +{% endblock %} diff --git a/app/templates/maestro/eg003_get_workflow_status.html b/app/templates/maestro/eg003_get_workflow_status.html new file mode 100644 index 0000000..50b4abd --- /dev/null +++ b/app/templates/maestro/eg003_get_workflow_status.html @@ -0,0 +1,38 @@ + {% extends "base.html" %} {% block content %} + +{% include 'example_info.html' %} + +{% set form_index = 0 %} +{% set workflow_id_index = 0 %} +{% set instance_id_index = 1 %} +{% set redirect_to8_index = 0 %} + +{% if workflow_id and instance_id %} +
+ {% if 'FormName' in example['Forms'][form_index] %} +

{{ example['Forms'][form_index]['FormName'] | safe }}

+ {% endif %} + +
+ + +
+
+ + +
+ + + {% include 'submit_button.html' %} +
+{% else %} + {{ example['RedirectsToOtherCodeExamples'][redirect_to8_index]['RedirectText'].format('href="mseg001"') | safe }} + +
+ {% include 'continue_button.html' %} +
+{% endif %} + +{% endblock %} From 7d5c2fd1565b925bd322d793a31951225758c271 Mon Sep 17 00:00:00 2001 From: RomanBachaloSigmaSoftware <77355790+RomanBachaloSigmaSoftware@users.noreply.github.com> Date: Fri, 22 Mar 2024 23:05:29 +0200 Subject: [PATCH 04/22] add enforce_signer_visibility (#146) --- .../examples/eg040_document_visibility.py | 1 + .../eSignature/eg040_document_visibility.html | 28 ++++++++++--------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/app/eSignature/examples/eg040_document_visibility.py b/app/eSignature/examples/eg040_document_visibility.py index 293467e..f940518 100644 --- a/app/eSignature/examples/eg040_document_visibility.py +++ b/app/eSignature/examples/eg040_document_visibility.py @@ -82,6 +82,7 @@ def make_envelope(cls, args, doc_docx_path, doc_pdf_path): """ env = EnvelopeDefinition( email_subject = "Please sign this document set", + enforce_signer_visibility = "true", ) doc1_b64 = base64.b64encode(bytes(cls.create_document1(args), "utf-8")).decode("ascii") diff --git a/app/templates/eSignature/eg040_document_visibility.html b/app/templates/eSignature/eg040_document_visibility.html index 61f03bc..176d203 100644 --- a/app/templates/eSignature/eg040_document_visibility.html +++ b/app/templates/eSignature/eg040_document_visibility.html @@ -3,10 +3,12 @@ {% include 'example_info.html' %} {% set recipient_form_index = 0 %} -{% set signer_email_index = 0 %} -{% set signer_name_index = 1 %} -{% set cc_email_index = 2 %} -{% set cc_name_index = 3 %} +{% set signer1_email_index = 0 %} +{% set signer1_name_index = 1 %} +{% set signer2_email_index = 2 %} +{% set signer2_name_index = 3 %} +{% set cc_email_index = 4 %} +{% set cc_name_index = 5 %}
{% if 'FormName' in example['Forms'][recipient_form_index] %} @@ -14,32 +16,32 @@ {% endif %}
- + {{ session['manifest']['SupportingTexts']['HelpingTexts']['EmailWontBeShared'] | safe}}
- - {{ example['Forms'][recipient_form_index]['Inputs'][signer1_name_index]['InputName'] }} +
- - {{ example['Forms'][recipient_form_index]['Inputs'][signer2_email_index]['InputName'] }} + {{ session['manifest']['SupportingTexts']['HelpingTexts']['EmailWontBeShared'] | safe}}
- - {{ example['Forms'][recipient_form_index]['Inputs'][signer2_name_index]['InputName'] }} +
+ aria-describedby="emailHelp" placeholder="{{ example['Forms'][recipient_form_index]['Inputs'][cc_email_index]['InputPlaceholder'] }}" required /> The email for the cc recipient must be different from the signer emails.
From 2a5b3a75f612793d98017b53396406823519ab23 Mon Sep 17 00:00:00 2001 From: Paige Rossi Date: Wed, 3 Apr 2024 11:41:37 -0700 Subject: [PATCH 05/22] adding Maestro SDK --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 785d076..345e30b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,6 +10,7 @@ docusign-monitor==1.2.0 docusign-click==1.4.0 docusign-admin==1.4.0 docusign-webforms==1.0.2rc12 +docusign-maestro==1.0.0rc1 Flask==1.1.1 Flask-OAuthlib==0.9.6 Flask-Session From cc8df91898e6bea27c94e2f7aa708622e6f94c1f Mon Sep 17 00:00:00 2001 From: karissarjacobsen <73908223+karissarjacobsen@users.noreply.github.com> Date: Thu, 11 Apr 2024 23:45:55 +0000 Subject: [PATCH 06/22] add cleanup commands to azure pipeline --- azure-pipelines.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index aeaf00f..341a87c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -100,6 +100,15 @@ steps: - script: dir $(Build.SourcesDirectory)/code-examples-python-private/app +- task: CmdLine@2 + inputs: + script: 'docker rm -f $(docker ps -a -q)' + continueOnError: true + +- script: | + docker system prune -a --force + displayName: "cleanup docker files" + - task: Docker@2 displayName: Build python image inputs: From e0ba4ca614c2ecdcf9d601ecdbfd9c31d55e9d12 Mon Sep 17 00:00:00 2001 From: karissarjacobsen <73908223+karissarjacobsen@users.noreply.github.com> Date: Fri, 12 Apr 2024 01:12:51 +0000 Subject: [PATCH 07/22] add check for running containers --- azure-pipelines.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 341a87c..3aa6980 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -100,10 +100,16 @@ steps: - script: dir $(Build.SourcesDirectory)/code-examples-python-private/app -- task: CmdLine@2 - inputs: - script: 'docker rm -f $(docker ps -a -q)' - continueOnError: true +- script: | + echo "Checking for running Docker containers..." + containers=$(docker ps -q) + if [ ! -z "$containers" ]; then + echo "Stopping running Docker containers..." + docker stop $(docker ps -q) + else + echo "No Docker containers are running." + fi + displayName: "check for running containers" - script: | docker system prune -a --force From b595fae69d1fbf57fee623f60a80ae22fb19e95a Mon Sep 17 00:00:00 2001 From: RomanBachaloSigmaSoftware <77355790+RomanBachaloSigmaSoftware@users.noreply.github.com> Date: Fri, 12 Apr 2024 23:46:03 +0300 Subject: [PATCH 08/22] add dynamic table to document generation (#147) --- app/ds_config_sample.py | 1 + .../examples/eg042_document_generation.py | 54 +++++++++++++++--- .../Offer_Letter_Dynamic_Table.docx | Bin 0 -> 36681 bytes .../eSignature/eg042_document_generation.html | 9 ++- requirements.txt | 2 +- 5 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 app/static/demo_documents/Offer_Letter_Dynamic_Table.docx diff --git a/app/ds_config_sample.py b/app/ds_config_sample.py index b18d165..cd9593f 100644 --- a/app/ds_config_sample.py +++ b/app/ds_config_sample.py @@ -29,6 +29,7 @@ "doc_terms_pdf": "Term_Of_Service.pdf", "doc_txt": "Welcome.txt", "doc_offer_letter": "Offer_Letter_Demo.docx", + "doc_dynamic_table": "Offer_Letter_Dynamic_Table.docx", # Payment gateway information is optional "gateway_account_id": "{DS_PAYMENT_GATEWAY_ID}", "gateway_name": "stripe", diff --git a/app/eSignature/examples/eg042_document_generation.py b/app/eSignature/examples/eg042_document_generation.py index 0ec6251..7edd5cf 100644 --- a/app/eSignature/examples/eg042_document_generation.py +++ b/app/eSignature/examples/eg042_document_generation.py @@ -3,7 +3,7 @@ from os import path from docusign_esign import EnvelopesApi, TemplatesApi, EnvelopeDefinition, Document, Signer, SignHere, \ DateSigned, Tabs, Recipients, DocGenFormField, EnvelopeTemplate, TemplateRole, DocGenFormFields, \ - DocGenFormFieldRequest, Envelope + DocGenFormFieldRequest, Envelope, DocGenFormFieldRowValue from ...consts import demo_docs_path, pattern from ...ds_config import DS_CONFIG @@ -20,8 +20,9 @@ def get_args(): "manager_name": pattern.sub("", request.form.get("manager_name")), "job_title": pattern.sub("", request.form.get("job_title")), "salary": pattern.sub("", request.form.get("salary")), + "rsus": pattern.sub("", request.form.get("rsus")), "start_date": pattern.sub("", request.form.get("start_date")), - "doc_file": path.join(demo_docs_path, DS_CONFIG["doc_offer_letter"]) + "doc_file": path.join(demo_docs_path, DS_CONFIG["doc_dynamic_table"]) } args = { "account_id": session["ds_account_id"], @@ -164,7 +165,7 @@ def recipient_tabs(cls): anchor_y_offset="-22" ) date_signed = DateSigned( - anchor_string="Date", + anchor_string="Date Signed", anchor_units="pixels", anchor_y_offset="-22" ) @@ -197,6 +198,7 @@ def make_envelope(cls, template_id, args): #ds-snippet-start:eSign42Step7 @classmethod def form_fields(cls, args, document_id_guid): + bonus_value = "20%" doc_gen_form_field_request = DocGenFormFieldRequest( doc_gen_form_fields=[ DocGenFormFields( @@ -214,13 +216,51 @@ def form_fields(cls, args, document_id_guid): name="Job_Title", value=args["job_title"] ), - DocGenFormField( - name="Salary", - value=args["salary"] - ), DocGenFormField( name="Start_Date", value=args["start_date"] + ), + DocGenFormField( + name="Compensation_Package", + type="TableRow", + row_values=[ + DocGenFormFieldRowValue( + doc_gen_form_field_list=[ + DocGenFormField( + name="Compensation_Component", + value="Salary" + ), + DocGenFormField( + name="Details", + value=f"${args['salary']}" + ) + ] + ), + DocGenFormFieldRowValue( + doc_gen_form_field_list=[ + DocGenFormField( + name="Compensation_Component", + value="Bonus" + ), + DocGenFormField( + name="Details", + value=bonus_value + ) + ] + ), + DocGenFormFieldRowValue( + doc_gen_form_field_list=[ + DocGenFormField( + name="Compensation_Component", + value="RSUs" + ), + DocGenFormField( + name="Details", + value=args["rsus"] + ) + ] + ) + ] ) ] ) diff --git a/app/static/demo_documents/Offer_Letter_Dynamic_Table.docx b/app/static/demo_documents/Offer_Letter_Dynamic_Table.docx new file mode 100644 index 0000000000000000000000000000000000000000..8c109beea0326ed2d92cd78cd2489bb52996c066 GIT binary patch literal 36681 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%0Av6P|nqe-e0Nb-m$v0QIe1hA` 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 {% if 'FormName' in example['Forms'][form_index] %} @@ -36,8 +37,7 @@
@@ -45,6 +45,11 @@
+
+ + +
Date: Tue, 16 Apr 2024 14:18:10 -0700 Subject: [PATCH 09/22] updating Docusign branding (#148) --- PAYMENTS_INSTALLATION.md | 2 +- README.md | 40 +++++++++--------- .../quick_acg_app/templates/base.html | 2 +- app/static/assets/favicon.ico | Bin 33310 -> 0 bytes app/static/assets/favicon.png | Bin 0 -> 1221 bytes app/templates/base.html | 2 +- 6 files changed, 23 insertions(+), 23 deletions(-) delete mode 100644 app/static/assets/favicon.ico create mode 100644 app/static/assets/favicon.png diff --git a/PAYMENTS_INSTALLATION.md b/PAYMENTS_INSTALLATION.md index d575c2c..de789f9 100644 --- a/PAYMENTS_INSTALLATION.md +++ b/PAYMENTS_INSTALLATION.md @@ -11,7 +11,7 @@ DocuSign offers built-in connections to multiple payment gateways. The payments ![Skipping the Stripe account form](docs/stripe_skip_account_form_link.png) - An enabled Stripe payment gateway is now associated with your DocuSign developer account and is shown under **Payment Gateway**. + An enabled Stripe payment gateway is now associated with your Docusign developer account and is shown under **Payment Gateway**. 1. Save the **Gateway Account ID** GUID to the code example launcher configuration file. diff --git a/README.md b/README.md index 48442fb..064236a 100644 --- a/README.md +++ b/README.md @@ -9,66 +9,66 @@ This GitHub repo includes code examples for the DocuSign Admin API, Click API, e This repo is a Python 3 application that supports the following authentication workflows: -* Authentication with DocuSign via [Authorization Code Grant](https://developers.docusign.com/platform/auth/authcode). +* Authentication with Docusign via [Authorization Code Grant](https://developers.docusign.com/platform/auth/authcode). When the token expires, the user is asked to re-authenticate. The refresh token is not used. -* Authentication with DocuSign via [JSON Web Token (JWT) Grant](https://developers.docusign.com/platform/auth/jwt/). +* Authentication with Docusign via [JSON Web Token (JWT) Grant](https://developers.docusign.com/platform/auth/jwt/). When the token expires, it updates automatically. ## eSignature API For more information about the scopes used for obtaining authorization to use the eSignature API, see [Required scopes](https://developers.docusign.com/docs/esign-rest-api/esign101/auth#required-scopes). -For a list of code examples that use the eSignature API, see the [How-to guides overview](https://developers.docusign.com/docs/esign-rest-api/how-to/) on the DocuSign Developer Center. +For a list of code examples that use the eSignature API, see the [How-to guides overview](https://developers.docusign.com/docs/esign-rest-api/how-to/) on the Docusign Developer Center. ## Rooms API -**Note:** To use the Rooms API, you must also [create your Rooms developer account](https://developers.docusign.com/docs/rooms-api/rooms101/create-account). Examples 4 and 6 require that you have the DocuSign Forms feature enabled in your Rooms for Real Estate account. +**Note:** To use the Rooms API, you must also [create your Rooms developer account](https://developers.docusign.com/docs/rooms-api/rooms101/create-account). Examples 4 and 6 require that you have the Docusign Forms feature enabled in your Rooms for Real Estate account. For more information about the scopes used for obtaining authorization to use the Rooms API, see [Required scopes](https://developers.docusign.com/docs/rooms-api/rooms101/auth/). -For a list of code examples that use the Rooms API, see the [How-to guides overview](https://developers.docusign.com/docs/rooms-api/how-to/) on the DocuSign Developer Center. +For a list of code examples that use the Rooms API, see the [How-to guides overview](https://developers.docusign.com/docs/rooms-api/how-to/) on the Docusign Developer Center. ## Click API For more information about the scopes used for obtaining authorization to use the Click API, see [Required scopes](https://developers.docusign.com/docs/click-api/click101/auth/#required-scopes) -For a list of code examples that use the Click API, see the [How-to guides overview](https://developers.docusign.com/docs/click-api/how-to/) on the DocuSign Developer Center. +For a list of code examples that use the Click API, see the [How-to guides overview](https://developers.docusign.com/docs/click-api/how-to/) on the Docusign Developer Center. ## Monitor API -**Note:** To use the Monitor API, you must also [enable DocuSign Monitor for your organization](https://developers.docusign.com/docs/monitor-api/how-to/enable-monitor/). +**Note:** To use the Monitor API, you must also [enable Docusign Monitor for your organization](https://developers.docusign.com/docs/monitor-api/how-to/enable-monitor/). For information about the scopes used for obtaining authorization to use the Monitor API, see the [scopes section](https://developers.docusign.com/docs/monitor-api/monitor101/auth/). -For a list of code examples that use the Monitor API, see the [How-to guides overview](https://developers.docusign.com/docs/monitor-api/how-to/) on the DocuSign Developer Center. +For a list of code examples that use the Monitor API, see the [How-to guides overview](https://developers.docusign.com/docs/monitor-api/how-to/) on the Docusign Developer Center. ## Admin API -**Note:** To use the Admin API, you must [create an organization](https://support.docusign.com/en/guides/org-admin-guide-create-org) in your DocuSign developer account. Also, to run the DocuSign CLM code example, [CLM must be enabled for your organization](https://support.docusign.com/en/articles/DocuSign-and-SpringCM). +**Note:** To use the Admin API, you must [create an organization](https://support.docusign.com/en/guides/org-admin-guide-create-org) in your Docusign developer account. Also, to run the Docusign CLM code example, [CLM must be enabled for your organization](https://support.docusign.com/en/articles/DocuSign-and-SpringCM). For information about the scopes used for obtaining authorization to use the Admin API, see the [scopes section](https://developers.docusign.com/docs/admin-api/admin101/auth/). -For a list of code examples that use the Admin API, see the [How-to guides overview](https://developers.docusign.com/docs/admin-api/how-to/) on the DocuSign Developer Center. +For a list of code examples that use the Admin API, see the [How-to guides overview](https://developers.docusign.com/docs/admin-api/how-to/) on the Docusign Developer Center. ## Web Forms API -The Web Forms API is available in all developer accounts, but only in certain production account plans. Contact [DocuSign Support](https://support.docusign.com/) or your account manager to find out whether the Web Forms API is available for your production account plan. +The Web Forms API is available in all developer accounts, but only in certain production account plans. Contact [Docusign Support](https://support.docusign.com/) or your account manager to find out whether the Web Forms API is available for your production account plan. For more information about the scopes used for obtaining authorization to use the Rooms API, see [Required scopes](https://developers.docusign.com/docs/web-forms-api/plan-integration/authentication/). -For a list of code examples that use the Web Forms API, see the [How-to guides overview](https://developers.docusign.com/docs/web-forms-api/how-to/) on the DocuSign Developer Center. +For a list of code examples that use the Web Forms API, see the [How-to guides overview](https://developers.docusign.com/docs/web-forms-api/how-to/) on the Docusign Developer Center. ## Installation ### Prerequisites -**Note:** If you downloaded this code using [Quickstart](https://developers.docusign.com/docs/esign-rest-api/quickstart/) from the DocuSign Developer Center, skip items 1 and 2 as they were automatically performed for you. +**Note:** If you downloaded this code using [Quickstart](https://developers.docusign.com/docs/esign-rest-api/quickstart/) from the Docusign Developer Center, skip items 1 and 2 as they were automatically performed for you. -1. A free [DocuSign developer account](https://go.docusign.com/o/sandbox/); create one if you don't already have one. -1. A DocuSign app and integration key that is configured to use either [Authorization Code Grant](https://developers.docusign.com/platform/auth/authcode/) or [JWT Grant](https://developers.docusign.com/platform/auth/jwt/) authentication. +1. A free [Docusign developer account](https://go.docusign.com/o/sandbox/); create one if you don't already have one. +1. A Docusign app and integration key that is configured to use either [Authorization Code Grant](https://developers.docusign.com/platform/auth/authcode/) or [JWT Grant](https://developers.docusign.com/platform/auth/jwt/) authentication. This [video](https://www.youtube.com/watch?v=eiRI4fe5HgM) demonstrates how to obtain an integration key. @@ -91,7 +91,7 @@ For a list of code examples that use the Web Forms API, see the [How-to guides o ### Installation steps -**Note:** If you downloaded this code using [Quickstart](https://developers.docusign.com/docs/esign-rest-api/quickstart/) from the DocuSign Developer Center, skip step 4 as it was automatically performed for you. +**Note:** If you downloaded this code using [Quickstart](https://developers.docusign.com/docs/esign-rest-api/quickstart/) from the Docusign Developer Center, skip step 4 as it was automatically performed for you. 1. Extract the Quickstart ZIP file or download or clone the code-examples-python repository. 1. In your command-line environment, switch to the folder: @@ -109,7 +109,7 @@ For a list of code examples that use the Web Forms API, see the [How-to guides o ### Installation steps for JWT Grant authentication -**Note:** If you downloaded this code using [Quickstart](https://developers.docusign.com/docs/esign-rest-api/quickstart/) from the DocuSign Developer Center, skip step 4 as it was automatically performed for you. +**Note:** If you downloaded this code using [Quickstart](https://developers.docusign.com/docs/esign-rest-api/quickstart/) from the Docusign Developer Center, skip step 4 as it was automatically performed for you. Also, in order to select JSON Web Token authentication in the launcher, in app/ds_config.py, change the `quickstart` setting to `"false"`. 1. Extract the Quickstart ZIP file or download or clone the code-examples-python repository. @@ -126,14 +126,14 @@ Also, in order to select JSON Web Token authentication in the launcher, in app/d **Note:** You will need to alias the python command to run Python 3 or use `python3 run.py` 1. Open a browser to http://localhost:3000 1. On the black navigation bar, select **Login**. -1. From the picklist, select **JSON Web Token** > **Authenticate with DocuSign**. -1. When prompted, log in to your DocuSign developer account. If this is your first time using the app, select **ACCEPT** at the consent window. +1. From the picklist, select **JSON Web Token** > **Authenticate with Docusign**. +1. When prompted, log in to your Docusign developer account. If this is your first time using the app, select **ACCEPT** at the consent window. 1. Select your desired code example. ## JWT grant remote signing and Authorization Code Grant embedded signing projects -See [DocuSign Quickstart overview](https://developers.docusign.com/docs/esign-rest-api/quickstart/overview/) on the DocuSign Developer Center for more information on how to run the JWT grant remote signing project and the Authorization Code Grant embedded signing project. +See [Docusign Quickstart overview](https://developers.docusign.com/docs/esign-rest-api/quickstart/overview/) on the Docusign Developer Center for more information on how to run the JWT grant remote signing project and the Authorization Code Grant embedded signing project. ### Installation steps for JWT grant remote signing example diff --git a/app/quick_acg/quick_acg_app/templates/base.html b/app/quick_acg/quick_acg_app/templates/base.html index ecaa531..a34c465 100644 --- a/app/quick_acg/quick_acg_app/templates/base.html +++ b/app/quick_acg/quick_acg_app/templates/base.html @@ -5,7 +5,7 @@ - + {{ title }} diff --git a/app/static/assets/favicon.ico b/app/static/assets/favicon.ico deleted file mode 100644 index fd990b6942f717e57af521d6c65eb20998282e55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33310 zcmeHQYit}>6+V9L%Wu0*9p_<_rYKYbwSQ1)DWoY0h(AdDKte)LXcN-LiIX^v^YW`n zleAT#gc1-czbJve5L8uD8mhXKN+3kjl(s2(l!t`GPnyJDdv|8d`F8j0%+6zXc6WAn zX1gmLoq61Q&i9>r=H5GZW^AGcYN4(!Vm(Cbnu)$fME(8g{V>ra9~&A3v18d{N{!GXeUNL`6ZAvTP4Gd38@#XMX-V7|bNIvZ})+GN9LQrkFp>G$^WxO9f= zuT0R!+g1AT&6J&nh6G*VZ5#uS%Q@;JZvUE1mB%*fHa4dG!NxydwfAk+22G7BL9EU> zIo8t5^_z;X9||f28%}&xsSNrF?rMm;lVtzHiirCh)2~YST#w!O7L_(}E`H&5h3>jd zlMT1VIpK&w^v7Q& zSeEGZQwjP5%WJ1pLO(nEq(ZOS2+pAl1ohr|p|I;!u*{v)`T#lRmcDv6L0|s7l5BtU zQEu6VohxknOLu7fCh`RRmK#1`XVV?#ws*q^Y=6cV~94dKv~pr+8#%CX|@{K&X1-Pn%I^a*MNI!IFUStbHW34oZ3(3 z%jXmxP0o!)*M)}?@l_H@8 zg+ppef~<8C;%&VI0}4U($FQxhliW_*gKhYLFCz|cKwas}%cbE1zP#oiF~k>9rLq_%biU;}tyCN)?$>yWZ_(w(kjuAVIIy)mZQ;bX zU^sZ6yYrYrd<%v{+)i#>2l_l0+vvk&TXbKKdF%l0QZQg{DE39K>{sdB^RcYs4aE2E zFDkTZxf#RZk>W8-Z_oA*`&e%PC&2^Vm|n9xe_AzRD0NOdHJrjQIH1z|FKOc@)*1za ze$5XUR;S}|z@@(Nha;!Rq>tgtR^Yv9Q8e&SPy6%|BvMPG45Gd%G4h_s#9C zzj9AO`_9(xL5Vbvzx>h#f3qIi+7=Q(sfGuDC z9pkz(fAN|IuYC9s6R+VGJiwL@KXO6Jdri+UwtV>g9)IMR*WxaCoaF!6-^Te_-U6MN zh|yyQ8o`875a}tCE4G>2FpWi6SkASxbFdm zzdTp@`=NaKT0dXD@%TTlD|G&)%HIRI(WaMQQTQ2roY!p>diO zmdtxXIAHwwjF)f5ntEL8eMUV8{G9_>f5G=y(YNuYBU?Ee^d=ax=B-_e#5Z09TA%{FcQF&4qq%lHH@u!94*fRocWAeKFy=Cv+aGxD1Tmut+) zDSzY|;_Ww{c6h<%3UhMGAJ-!C(axUVj)M#O7^nPEw$}KgO`Y;bu5@+OPWvPOaZNkr zkG`V2#`-_>=}!6MyX@O;xyJ8m&C}qD1%B6Tfd-bvXn9|puJ6UTxRe%*k9xs)qe*YK zjGLO4ajI0UALnGegVy|~a4qXq>60H{C}{k18YlTqT{Pw!dXagEUZWk{5dAzyZ(sZi zCZ}BL<@`NYueYE7+VA9al*YHrai8I>=iHUZr3ZJ<^ZOX7_eA#GGf#^id)8mh7|iU5 zX1;}$x%4Pv@Da#^iEYfCpF0U}y{`2<0CzoKtL-t)1B~6}%)e^bPPV)5@Az49mt%YH zt*sawx<7xr3wP0oK`rzL#cO*7&EWL zV2b|^gx!4Ji1{mb*?)r~Wxu*WTHfCW?C|s>{v+i3Ilto>ua{6Q7|M+Beav)#7w@b%e@<)%|xNZCv z$4LyT-3Lq#TlasX_oQ-Oc#F3BhDzcPXfZ#d!nLsb+tzvDmHTAlde+{}*4z;T{J$9C zYt&Z!Q3o*?{Z4iaymo*5(AYdRHznxceYyK0d@pC@E&I8?#lf{Oc5kZB#h8nI$tkbs zv%kszE;+7o;cL{vK>lw5{`72h`Z~8_j2t)emi-Wa-{h7bui61e;cL|RzRRn)-NJ?M zrHs5~KOD+`{kVmrT6S8)_H*C}pQ{$GO8IST%^t_3?V%ByO5v!MpN=+r{`kJITDU6Z zx2xU$-mWd;@3GBE47)q+`M2}6;lzfY%k*~H^T)N}XKqfg_w~%#j(;Bo{>ysp`FC>P z;3S5AE^~dKJ^${G+ULKr-=06N4L`T76YMvwy~1k%isd@Ms^zuc{!U_4FXO*=`RZ*} RZ?k$1)N`Po1HQ_E{{uWiH2VMm diff --git a/app/static/assets/favicon.png b/app/static/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..fefff5520d83a3686f8d1a411a24582bf40717b0 GIT binary patch literal 1221 zcmV;$1UmbPP)*vk@IiGJN#SJqlwialH6qg2vEMmTZGeX}RZT&bcjZ z`O^~8uqNM}d;919KIi-UopXK#4tep_tKi$W!NbGgOy*@Knqny@m}s(rK4K{yw(S8X z>f&rR#8XpX#{o+TCIU}Rg41cRZ66jM`iqwNGEtO?X4!F=9mgw;^+i+}iS8;Xud!`M z41jGzX_!Eu0f3a2`GJ%jOf;__sE7)RNO2uif36%yu`gDRb6-jM7Q61Q6H3Yk4(tJ7 zqT&%9@B>$%c1rI*X4@W8+SwzeKpqpIR>lD)(&^JMYfN;(JR3L>0G&EN4HYM5Scrgr zK0X9PfUPmGC8~7uwV41K0To)p@E=0bpyb$>ZV`KRzsZ^d_*VyY-0_=wGF$lMaT-?tGXttS4a7LP-O?w>9frMsDU^g2$*zCoHmAAko>myqQi{04h77S30IA z%wg1I04@WJ#$tDC04lRDvXnU{YBguUi2?Xc%D=`1qHCPVn4SP91fZAXQxjauId+^g z+Ww=aV50@E-qE|Dg-{U)c=Z%S&@9E#Sl7~KI=!aPh^kd^i-|f-OEx|Z-5oUqxPr9@ zr_u3SqnTH2$!3hlqAQ!}R8c$N5&gwPpDEXknjRw__nT9yn*wF-1&Z5mV&;!lymO}= z!%I;N)l~tOU4EfZuJR j-cEwUNw9XfZVLVf6}&j39e`aL00000NkvXXu0mjfO4u@9 literal 0 HcmV?d00001 diff --git a/app/templates/base.html b/app/templates/base.html index f7f7619..4da339c 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -5,7 +5,7 @@ - + {{ title }} From 8ff9ae67fb45f292eed840995f085450e49bae8d Mon Sep 17 00:00:00 2001 From: RomanBachaloSigmaSoftware Date: Wed, 1 May 2024 13:27:11 +0300 Subject: [PATCH 10/22] maintenance --- .../quick_acg_app/templates/base.html | 4 +- requirements.txt | 52 +++++++++---------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/app/quick_acg/quick_acg_app/templates/base.html b/app/quick_acg/quick_acg_app/templates/base.html index a34c465..56ecec7 100644 --- a/app/quick_acg/quick_acg_app/templates/base.html +++ b/app/quick_acg/quick_acg_app/templates/base.html @@ -37,7 +37,7 @@ data-busy="href">{{ session["manifest"]["SupportingTexts"]["LoginButton"] }} (current) {% endif %} - + {% if session['ds_user_name'] %} Welcome {{ session['ds_user_name'] }} @@ -65,8 +65,6 @@

Working...   

- - {% if 'ds_user_name' in session %}
diff --git a/requirements.txt b/requirements.txt index 52587e6..56fd7bc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,40 +1,40 @@ -astroid==2.11.5 -certifi==2021.10.8 -cffi==1.15.1 -chardet==5.1.0 +astroid==3.1.0 +certifi==2024.2.2 +cffi==1.16.0 +chardet==5.2.0 Click -cryptography==39.0.0 +cryptography==42.0.5 docusign-esign==3.26.0rc1 docusign-rooms==1.3.0 docusign-monitor==1.2.0 docusign-click==1.4.0 -docusign-admin==1.4.0 +docusign-admin==1.4.1 docusign-webforms==1.0.2rc12 docusign-maestro==1.0.0rc1 -Flask==1.1.1 +Flask==2.3.3 Flask-OAuthlib==0.9.6 -Flask-Session -flask-wtf==0.14.3 -flake8==5.0.4 -idna==3.4 -isort==4.3.21 -itsdangerous==1.1.0 -Jinja2>=2.10.3 -lazy-object-proxy==1.4.3 -MarkupSafe==1.1.1 +Flask-Session==0.8.0 +flask-wtf==1.2.1 +flake8==7.0.0 +idna==3.7 +isort==5.13.2 +itsdangerous==2.2.0 +Jinja2>=3.1.3 +lazy-object-proxy==1.10.0 +MarkupSafe==2.1.5 mccabe==0.7.0 oauthlib==2.1.0 -pipenv==2022.1.8 +pipenv==2023.12.1 py-oauth2==0.0.10 -pycparser==2.21 -pylint==2.14.1 +pycparser==2.22 +pylint==3.1.0 python-dateutil==2.8.2 -python-dotenv==0.21.0 -requests>=2.28.2 +python-dotenv==1.0.1 +requests>=2.31.0 requests-oauthlib==1.1.0 -six==1.13.0 -urllib3>=1.26.14 -virtualenv==20.21.0 +six==1.16.0 +urllib3>=2.2.1 +virtualenv==20.25.3 virtualenv-clone==0.5.7 -Werkzeug==2.0.0 -wrapt==1.11.2 +Werkzeug==2.3.8 +wrapt==1.16.0 From c3a2bc82958b6d7cb48aecc8ff7683d57fe2be34 Mon Sep 17 00:00:00 2001 From: RomanBachaloSigmaSoftware Date: Tue, 14 May 2024 11:37:17 +0300 Subject: [PATCH 11/22] update embedded sending --- .../examples/eg011_embedded_sending.py | 46 ++++++++++++++++--- .../eSignature/eg011_embedded_sending.html | 4 +- requirements.txt | 2 +- 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/app/eSignature/examples/eg011_embedded_sending.py b/app/eSignature/examples/eg011_embedded_sending.py index 9e438eb..6df76a1 100644 --- a/app/eSignature/examples/eg011_embedded_sending.py +++ b/app/eSignature/examples/eg011_embedded_sending.py @@ -1,8 +1,9 @@ import base64 from os import path -from docusign_esign import EnvelopesApi, ReturnUrlRequest, EnvelopesApi, EnvelopeDefinition, \ - Document, Signer, CarbonCopy, SignHere, Tabs, Recipients +from docusign_esign import EnvelopesApi, EnvelopesApi, EnvelopeDefinition, \ + Document, Signer, CarbonCopy, SignHere, Tabs, Recipients, EnvelopeViewRequest, EnvelopeViewSettings, \ + EnvelopeViewRecipientSettings, EnvelopeViewDocumentSettings, EnvelopeViewTaggerSettings, EnvelopeViewTemplateSettings from flask import url_for, session, request from ...consts import pattern, demo_docs_path @@ -36,6 +37,7 @@ def get_args(): "access_token": session["ds_access_token"], "envelope_args": envelope_args, "ds_return_url": url_for("ds.ds_return", _external=True), + "starting_view": starting_view, } return args @@ -58,7 +60,7 @@ def worker(cls, args, doc_docx_path, doc_pdf_path): @classmethod #ds-snippet-start:eSign11Step3 def create_sender_view(cls, args, envelope_id): - view_request = ReturnUrlRequest(return_url=args["ds_return_url"]) + view_request = cls.make_envelope_view_request(args) # Exceptions will be caught by the calling function api_client = create_api_client(base_path=args["base_path"], access_token=args["access_token"]) @@ -66,13 +68,11 @@ def create_sender_view(cls, args, envelope_id): sender_view = envelope_api.create_sender_view( account_id=args["account_id"], envelope_id=envelope_id, - return_url_request=view_request + envelope_view_request=view_request ) # Switch to Recipient and Documents view if requested by the user url = sender_view.url - if args["starting_view"] == "recipient": - url = url.replace("send=1", "send=0") return url #ds-snippet-end:eSign11Step3 @@ -199,6 +199,40 @@ def make_envelope(cls, args, doc_docx_path, doc_pdf_path): env.status = args["status"] return env + + @classmethod + def make_envelope_view_request(cls, args): + view_request = EnvelopeViewRequest( + return_url=args["ds_return_url"], + view_access="envelope", + settings=EnvelopeViewSettings( + starting_screen=args["starting_view"], + send_button_action="send", + show_back_button="false", + back_button_action="previousPage", + show_header_actions="false", + show_discard_action="false", + lock_token="", + recipient_settings=EnvelopeViewRecipientSettings( + show_edit_recipients="false", + show_contacts_list="false" + ), + document_settings=EnvelopeViewDocumentSettings( + show_edit_documents="false", + show_edit_document_visibility="false", + show_edit_pages="false" + ), + tagger_settings=EnvelopeViewTaggerSettings( + palette_sections="default", + palette_default="custom" + ), + template_settings=EnvelopeViewTemplateSettings( + show_matching_templates_prompt="true" + ) + ) + ) + + return view_request @classmethod def create_document1(cls, args): diff --git a/app/templates/eSignature/eg011_embedded_sending.html b/app/templates/eSignature/eg011_embedded_sending.html index 336f424..565c492 100644 --- a/app/templates/eSignature/eg011_embedded_sending.html +++ b/app/templates/eSignature/eg011_embedded_sending.html @@ -17,8 +17,8 @@
diff --git a/requirements.txt b/requirements.txt index 52587e6..360c6c2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ cffi==1.15.1 chardet==5.1.0 Click cryptography==39.0.0 -docusign-esign==3.26.0rc1 +docusign-esign==4.0.0rc1 docusign-rooms==1.3.0 docusign-monitor==1.2.0 docusign-click==1.4.0 From d2980ee285a057d7cba2ea19b3b9e87d756ac253 Mon Sep 17 00:00:00 2001 From: Raileen Del Rosario Date: Mon, 20 May 2024 15:27:06 -0700 Subject: [PATCH 12/22] moving a function for codeDepot markers --- .../examples/eg011_embedded_sending.py | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/app/eSignature/examples/eg011_embedded_sending.py b/app/eSignature/examples/eg011_embedded_sending.py index 6df76a1..9e42084 100644 --- a/app/eSignature/examples/eg011_embedded_sending.py +++ b/app/eSignature/examples/eg011_embedded_sending.py @@ -75,6 +75,40 @@ def create_sender_view(cls, args, envelope_id): url = sender_view.url return url + + @classmethod + def make_envelope_view_request(cls, args): + view_request = EnvelopeViewRequest( + return_url=args["ds_return_url"], + view_access="envelope", + settings=EnvelopeViewSettings( + starting_screen=args["starting_view"], + send_button_action="send", + show_back_button="false", + back_button_action="previousPage", + show_header_actions="false", + show_discard_action="false", + lock_token="", + recipient_settings=EnvelopeViewRecipientSettings( + show_edit_recipients="false", + show_contacts_list="false" + ), + document_settings=EnvelopeViewDocumentSettings( + show_edit_documents="false", + show_edit_document_visibility="false", + show_edit_pages="false" + ), + tagger_settings=EnvelopeViewTaggerSettings( + palette_sections="default", + palette_default="custom" + ), + template_settings=EnvelopeViewTemplateSettings( + show_matching_templates_prompt="true" + ) + ) + ) + + return view_request #ds-snippet-end:eSign11Step3 @classmethod @@ -199,40 +233,6 @@ def make_envelope(cls, args, doc_docx_path, doc_pdf_path): env.status = args["status"] return env - - @classmethod - def make_envelope_view_request(cls, args): - view_request = EnvelopeViewRequest( - return_url=args["ds_return_url"], - view_access="envelope", - settings=EnvelopeViewSettings( - starting_screen=args["starting_view"], - send_button_action="send", - show_back_button="false", - back_button_action="previousPage", - show_header_actions="false", - show_discard_action="false", - lock_token="", - recipient_settings=EnvelopeViewRecipientSettings( - show_edit_recipients="false", - show_contacts_list="false" - ), - document_settings=EnvelopeViewDocumentSettings( - show_edit_documents="false", - show_edit_document_visibility="false", - show_edit_pages="false" - ), - tagger_settings=EnvelopeViewTaggerSettings( - palette_sections="default", - palette_default="custom" - ), - template_settings=EnvelopeViewTemplateSettings( - show_matching_templates_prompt="true" - ) - ) - ) - - return view_request @classmethod def create_document1(cls, args): From 07537d1cb064388e3238819622ba7ced193c1cef Mon Sep 17 00:00:00 2001 From: Daniel Husar Date: Wed, 29 May 2024 18:59:56 +0200 Subject: [PATCH 13/22] Add docker --- Dockerfile | 19 +++++++++++++++++++ README.md | 4 ++++ run.py | 10 +++++++--- 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 Dockerfile mode change 100755 => 100644 run.py diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0f292b3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +# start by pulling the python image +FROM python:3.11.9-slim-bullseye + +# copy the requirements file into the image +COPY ./requirements.txt /app/requirements.txt + +# switch working directory +WORKDIR /app + +# install the dependencies and packages in the requirements file +RUN pip install -r requirements.txt + +# copy every content from the local file to the image +COPY . /app + +# configure the container to run in an executed manner +ENTRYPOINT [ "python" ] + +CMD ["run.py", "--docker"] diff --git a/README.md b/README.md index 064236a..d5c9ccf 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,10 @@ For a list of code examples that use the Web Forms API, see the [How-to guides o **Note:** You will need to alias the python command to run Python 3 or use `python3 run.py` 1. Open a browser to http://localhost:3000 +### Installation steps with docker +1. `docker image build -t docusign .` +1. `docker run --name docusign_python -p 3000:3000 -d docusign` + ### Installation steps for JWT Grant authentication **Note:** If you downloaded this code using [Quickstart](https://developers.docusign.com/docs/esign-rest-api/quickstart/) from the Docusign Developer Center, skip step 4 as it was automatically performed for you. diff --git a/run.py b/run.py old mode 100755 new mode 100644 index 8c7e594..0ee4c9f --- a/run.py +++ b/run.py @@ -2,17 +2,21 @@ from app import app from flask_session import Session import os +import sys + +host = "0.0.0.0" if "--docker" in sys.argv else "localhost" +port = int(os.environ.get("PORT", 3000)) if os.environ.get("DEBUG", False) == "True": app.config["DEBUG"] = True app.config['SESSION_TYPE'] = 'filesystem' sess = Session() sess.init_app(app) - port = int(os.environ.get("PORT", 3000)) - app.run(host="localhost", port=3000, debug=True) + port = int(os.environ.get("PORT", port)) + app.run(host=host, port=port, debug=True) else: app.config['SESSION_TYPE'] = 'filesystem' sess = Session() sess.init_app(app) - app.run(host="localhost", port=3000, extra_files="api_type.py") + app.run(host=host, port=port, extra_files="api_type.py") From 23af9d05bcae72c1475142e785744000105c6d17 Mon Sep 17 00:00:00 2001 From: Daniel Husar Date: Wed, 29 May 2024 19:02:21 +0200 Subject: [PATCH 14/22] tweak --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d5c9ccf..5d6cf30 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ For a list of code examples that use the Web Forms API, see the [How-to guides o ### Installation steps with docker 1. `docker image build -t docusign .` -1. `docker run --name docusign_python -p 3000:3000 -d docusign` +1. `docker run --name docusign_python -p 3000:3000 -d docusign` ### Installation steps for JWT Grant authentication From e92b6e623bc68e8e6854b18c41affe6e0437b67a Mon Sep 17 00:00:00 2001 From: Daniel Husar Date: Wed, 29 May 2024 19:21:29 +0200 Subject: [PATCH 15/22] remove dup port --- requirements.txt | 2 +- run.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 360c6c2..c46b5d2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,7 +32,7 @@ python-dateutil==2.8.2 python-dotenv==0.21.0 requests>=2.28.2 requests-oauthlib==1.1.0 -six==1.13.0 +six>1.13.0 urllib3>=1.26.14 virtualenv==20.21.0 virtualenv-clone==0.5.7 diff --git a/run.py b/run.py index 0ee4c9f..eeb0490 100644 --- a/run.py +++ b/run.py @@ -12,7 +12,6 @@ app.config['SESSION_TYPE'] = 'filesystem' sess = Session() sess.init_app(app) - port = int(os.environ.get("PORT", port)) app.run(host=host, port=port, debug=True) else: app.config['SESSION_TYPE'] = 'filesystem' From cbc7dc5f911266e586a964e49682a7b828de602c Mon Sep 17 00:00:00 2001 From: Daniel Husar Date: Wed, 29 May 2024 20:49:46 +0200 Subject: [PATCH 16/22] revert six change --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index c46b5d2..360c6c2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,7 +32,7 @@ python-dateutil==2.8.2 python-dotenv==0.21.0 requests>=2.28.2 requests-oauthlib==1.1.0 -six>1.13.0 +six==1.13.0 urllib3>=1.26.14 virtualenv==20.21.0 virtualenv-clone==0.5.7 From 54f7153379f88e53e22bef449616cd8c136d7be0 Mon Sep 17 00:00:00 2001 From: Paige Rossi Date: Fri, 7 Jun 2024 14:30:15 -0700 Subject: [PATCH 17/22] updating docker instructions in readme --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 5d6cf30..2ded991 100644 --- a/README.md +++ b/README.md @@ -108,8 +108,13 @@ For a list of code examples that use the Web Forms API, see the [How-to guides o 1. Open a browser to http://localhost:3000 ### Installation steps with docker + +**Note**: Running the launcher with docker will use Python 3.11 + +1. Open the Docker application 1. `docker image build -t docusign .` 1. `docker run --name docusign_python -p 3000:3000 -d docusign` +1. Open a browser to http://localhost:3000 ### Installation steps for JWT Grant authentication From 70e19728e0db872fbff4956a2ef79995757fcef5 Mon Sep 17 00:00:00 2001 From: Raileen Del Rosario Date: Tue, 11 Jun 2024 16:36:27 -0700 Subject: [PATCH 18/22] updating six package --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 360c6c2..8772c98 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,7 +32,7 @@ python-dateutil==2.8.2 python-dotenv==0.21.0 requests>=2.28.2 requests-oauthlib==1.1.0 -six==1.13.0 +six==1.16.0 urllib3>=1.26.14 virtualenv==20.21.0 virtualenv-clone==0.5.7 From 8b096a91447547ec3abf51ead3098c8ddac24e76 Mon Sep 17 00:00:00 2001 From: RomanBachaloSigmaSoftware <77355790+RomanBachaloSigmaSoftware@users.noreply.github.com> Date: Thu, 13 Jun 2024 02:13:55 +0300 Subject: [PATCH 19/22] Added checks for email and user name for examples 20, 22 and 23 (#153) * added custom error messages * fix linter issues --- app/eSignature/views/eg020_phone_authentication.py | 7 +++++++ app/eSignature/views/eg022_kba_authentication.py | 7 +++++++ app/eSignature/views/eg023_idv_authentication.py | 7 +++++++ app/templates/eSignature/eg020_phone_authentication.html | 5 ++--- app/templates/eSignature/eg022_kba_authentication.html | 5 ++--- app/templates/eSignature/eg023_idv_authentication.html | 5 ++--- 6 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/eSignature/views/eg020_phone_authentication.py b/app/eSignature/views/eg020_phone_authentication.py index 28878a3..4704f7b 100644 --- a/app/eSignature/views/eg020_phone_authentication.py +++ b/app/eSignature/views/eg020_phone_authentication.py @@ -32,6 +32,13 @@ def phone_authentication(): # 1. Get required arguments args = Eg020PhoneAuthenticationController.get_args() + if args["envelope_args"]["signer_email"] == DS_CONFIG["signer_email"]: + return render_template( + "error.html", + error_code=400, + error_message=session["manifest"]["SupportingTexts"]["IdenticalEmailsNotAllowedErrorMessage"] + ) + try: # Step 2: Call the worker method for authenticating with phone results = Eg020PhoneAuthenticationController.worker(args) diff --git a/app/eSignature/views/eg022_kba_authentication.py b/app/eSignature/views/eg022_kba_authentication.py index c9887d3..a9d5e02 100644 --- a/app/eSignature/views/eg022_kba_authentication.py +++ b/app/eSignature/views/eg022_kba_authentication.py @@ -31,6 +31,13 @@ def kba_authentication(): # 1. Get required arguments args = Eg022KBAAuthenticationController.get_args() + + if args["envelope_args"]["signer_email"] == DS_CONFIG["signer_email"]: + return render_template( + "error.html", + error_code=400, + error_message=session["manifest"]["SupportingTexts"]["IdenticalEmailsNotAllowedErrorMessage"] + ) try: # Step 2: Call the worker method for kba results = Eg022KBAAuthenticationController.worker(args) diff --git a/app/eSignature/views/eg023_idv_authentication.py b/app/eSignature/views/eg023_idv_authentication.py index 29f534a..b9dfc2a 100644 --- a/app/eSignature/views/eg023_idv_authentication.py +++ b/app/eSignature/views/eg023_idv_authentication.py @@ -31,6 +31,13 @@ def idv_authentication(): # 1. Get required data args = Eg023IDVAuthenticationController.get_args() + + if args["envelope_args"]["signer_email"] == DS_CONFIG["signer_email"]: + return render_template( + "error.html", + error_code=400, + error_message=session["manifest"]["SupportingTexts"]["IdenticalEmailsNotAllowedErrorMessage"] + ) try: # 2: Call the worker method for idv authentication results = Eg023IDVAuthenticationController.worker(args) diff --git a/app/templates/eSignature/eg020_phone_authentication.html b/app/templates/eSignature/eg020_phone_authentication.html index ba5a3e4..4a87551 100644 --- a/app/templates/eSignature/eg020_phone_authentication.html +++ b/app/templates/eSignature/eg020_phone_authentication.html @@ -29,14 +29,13 @@
+ aria-describedby="emailHelp" placeholder="{{ example['Forms'][recipient_form_index]['Inputs'][signer_email_index]['InputPlaceholder'] }}" required> {{ session['manifest']['SupportingTexts']['HelpingTexts']['EmailWontBeShared'] | safe}}
+ required>
{% include 'submit_button.html' %} diff --git a/app/templates/eSignature/eg022_kba_authentication.html b/app/templates/eSignature/eg022_kba_authentication.html index f36a8e4..5419680 100644 --- a/app/templates/eSignature/eg022_kba_authentication.html +++ b/app/templates/eSignature/eg022_kba_authentication.html @@ -14,14 +14,13 @@
+ aria-describedby="emailHelp" placeholder="{{ example['Forms'][recipient_form_index]['Inputs'][signer_email_index]['InputPlaceholder'] }}" required> {{ session['manifest']['SupportingTexts']['HelpingTexts']['EmailWontBeShared'] | safe}}
+ required>
{% include 'submit_button.html' %} diff --git a/app/templates/eSignature/eg023_idv_authentication.html b/app/templates/eSignature/eg023_idv_authentication.html index 40dd003..91caec9 100644 --- a/app/templates/eSignature/eg023_idv_authentication.html +++ b/app/templates/eSignature/eg023_idv_authentication.html @@ -16,14 +16,13 @@
+ aria-describedby="emailHelp" placeholder="{{ example['Forms'][recipient_form_index]['Inputs'][signer_email_index]['InputPlaceholder'] }}" required> {{ session['manifest']['SupportingTexts']['HelpingTexts']['EmailWontBeShared'] | safe}}
+ required>
{% include 'submit_button.html' %} From f6583900de4b05d6bd88f8ffb161dd8a35fb3ee3 Mon Sep 17 00:00:00 2001 From: RomanBachaloSigmaSoftware <77355790+RomanBachaloSigmaSoftware@users.noreply.github.com> Date: Thu, 13 Jun 2024 02:39:37 +0300 Subject: [PATCH 20/22] fix for new maestro sdk (#151) --- app/ds_config_sample.py | 2 +- app/maestro/examples/eg001_trigger_workflow.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/ds_config_sample.py b/app/ds_config_sample.py index cd9593f..a2ca089 100644 --- a/app/ds_config_sample.py +++ b/app/ds_config_sample.py @@ -16,7 +16,7 @@ "rooms_api_client_host": "https://demo.rooms.docusign.com/restapi", "monitor_api_client_host": "https://lens-d.docusign.net", "admin_api_client_host": "https://api-d.docusign.net/management", - "maestro_api_client_host": "https://demo.services.docusign.net/", + "maestro_api_client_host": "https://apps-d.docusign.com/api/maestro", "webforms_api_client_host": "https://apps-d.docusign.com/api/webforms/v1.1", "allow_silent_authentication": True, # a user can be silently authenticated if they have an # active login session on another tab of the same browser diff --git a/app/maestro/examples/eg001_trigger_workflow.py b/app/maestro/examples/eg001_trigger_workflow.py index 7a99cac..65637e6 100644 --- a/app/maestro/examples/eg001_trigger_workflow.py +++ b/app/maestro/examples/eg001_trigger_workflow.py @@ -68,6 +68,7 @@ def trigger_workflow(workflow, args): workflow_trigger_api = WorkflowTriggerApi(api_client) trigger_response = workflow_trigger_api.trigger_workflow( args["account_id"], + args["workflow_id"], trigger_payload, mtid=mtid, mtsec=mtsec ) From 4faea785fddd8fe2910e64fbb71d15d1ff3ef1f2 Mon Sep 17 00:00:00 2001 From: Paige Rossi <70241979+paigesrossi@users.noreply.github.com> Date: Fri, 21 Jun 2024 10:17:37 -0700 Subject: [PATCH 21/22] updating launcher image (#154) * updating launcher image * display image regardless of login status --- app/static/assets/banner-code.png | Bin 53558 -> 90508 bytes app/static/assets/css.css | 4 +++- app/templates/base.html | 2 +- app/templates/home.html | 8 +++----- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/static/assets/banner-code.png b/app/static/assets/banner-code.png index 292d14e9eb8e14c7fdb570f769ae5d95af3829b3..ce8cc905b7f6686648505b91db6c3282acb9e090 100644 GIT binary patch literal 90508 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 literal 53558 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 LdK`IxC8YiX2lGP* diff --git a/app/static/assets/css.css b/app/static/assets/css.css index 5518c42..4308da9 100644 --- a/app/static/assets/css.css +++ b/app/static/assets/css.css @@ -18,7 +18,9 @@ body { .jumbotron { - background: #000 !important; + background-image: url(/static/assets/banner-code.png) !important; + background-position: right; + min-height: 500px; padding-top: 0 !important; padding-bottom: 0 !important; padding-left: 30px !important; diff --git a/app/templates/base.html b/app/templates/base.html index 4da339c..0e6b8bf 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -70,7 +70,7 @@

Working...   

{% if 'ds_user_name' in session %} -
+
{% else %}
diff --git a/app/templates/home.html b/app/templates/home.html index 701c56f..7fb1416 100644 --- a/app/templates/home.html +++ b/app/templates/home.html @@ -2,25 +2,23 @@ {% extends "base.html" %} {% block content %} - - {% if not 'ds_user_name' in session %} -
+
+ +

Python Launcher

{{ session['manifest']['SupportingTexts']['HomePageText'] }}

-
- {% endif %}