Skip to content

Commit 6d897f1

Browse files
updated example
1 parent bfa350e commit 6d897f1

File tree

8 files changed

+73
-42
lines changed

8 files changed

+73
-42
lines changed

app/docusign/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
from .ds_client import DSClient
2-
from .utils import ds_token_ok, create_api_client, authenticate, ensure_manifest, get_example_by_number, get_manifest
2+
from .utils import ds_token_ok, create_api_client, authenticate, ensure_manifest, get_example_by_number, get_manifest, \
3+
get_user_info

app/docusign/utils.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,7 @@ def is_cfr(accessToken, accountId, basePath):
142142

143143
return account_details.status21_cfr_part11
144144

145+
def get_user_info(access_token, base_path, oauth_host_name):
146+
api_client = create_api_client(base_path, access_token)
147+
api_client.set_oauth_host_name(oauth_host_name)
148+
return api_client.get_user_info(access_token)

app/eSignature/examples/eg043_shared_access.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
from flask import session, request
2-
from docusign_esign import EnvelopesApi, UsersApi, AccountsApi, NewUsersDefinition, UserInformation,\
3-
UserAuthorizationCreateRequest, AuthorizationUser
1+
import json
2+
3+
from docusign_esign import EnvelopesApi, UsersApi, AccountsApi, NewUsersDefinition, UserInformation, \
4+
UserAuthorizationCreateRequest, AuthorizationUser, ApiException
45
from datetime import datetime, timedelta
56

6-
from ...consts import pattern
7-
from ...ds_config import DS_JWT
87
from ...docusign import create_api_client
98

109

@@ -14,13 +13,35 @@ def create_agent(cls, args):
1413
api_client = create_api_client(base_path=args["base_path"], access_token=args["access_token"])
1514
users_api = UsersApi(api_client)
1615

17-
return users_api.create(args["account_id"], new_users_definition=cls.new_users_definition(args))
16+
try:
17+
users = users_api.list(args["account_id"], email=args["email"], status="Active")
18+
if int(users.result_set_size) > 0:
19+
return users.users[0]
20+
21+
except ApiException as err:
22+
error_body_json = err and hasattr(err, "body") and err.body
23+
error_body = json.loads(error_body_json)
24+
error_code = error_body and "errorCode" in error_body and error_body["errorCode"]
25+
26+
if error_code != "USER_NOT_FOUND":
27+
raise err
28+
29+
new_users = users_api.create(args["account_id"], new_users_definition=cls.new_users_definition(args))
30+
return new_users.new_users[0]
1831

1932
@classmethod
2033
def create_authorization(cls, args):
2134
api_client = create_api_client(base_path=args["base_path"], access_token=args["access_token"])
2235
accounts_api = AccountsApi(api_client)
2336

37+
authorizations = accounts_api.get_agent_user_authorizations(
38+
args["account_id"],
39+
args["agent_user_id"],
40+
permissions="manage"
41+
)
42+
if int(authorizations.result_set_size) > 0:
43+
return
44+
2445
return accounts_api.create_user_authorization(
2546
args["account_id"],
2647
args["user_id"],
@@ -52,5 +73,5 @@ def get_envelopes(cls, args):
5273
api_client.set_default_header("X-DocuSign-Act-On-Behalf", args["user_id"])
5374
envelopes_api = EnvelopesApi(api_client)
5475

55-
from_date = (datetime.utcnow() - timedelta(days=30)).isoformat()
76+
from_date = (datetime.utcnow() - timedelta(days=10)).isoformat()
5677
return envelopes_api.list_status_changes(account_id=args["account_id"], from_date=from_date)

app/eSignature/views/eg043_shared_access.py

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from flask import render_template, session, Blueprint, redirect, current_app, url_for, request
77

88
from ..examples.eg043_shared_access import Eg043SharedAccessController
9-
from ...docusign import authenticate, ensure_manifest, get_example_by_number
9+
from ...docusign import authenticate, ensure_manifest, get_example_by_number, get_user_info
1010
from ...docusign.utils import ds_logout_internal, authenticate_agent
1111
from ...ds_config import DS_CONFIG, DS_JWT
1212
from ...error_handlers import process_error
@@ -26,7 +26,7 @@ def create_agent():
2626
"account_id": session["ds_account_id"],
2727
"base_path": session["ds_base_path"],
2828
"access_token": session["ds_access_token"],
29-
"email": pattern.sub("", request.form.get("email")),
29+
"email": request.form.get("email"),
3030
"user_name": pattern.sub("", request.form.get("user_name")),
3131
"activation": pattern.sub("", request.form.get("activation"))
3232
}
@@ -36,40 +36,63 @@ def create_agent():
3636
except ApiException as err:
3737
return process_error(err)
3838

39-
session["agent_user_id"] = results.new_users[0].user_id
39+
session["agent_user_id"] = results.user_id
4040

4141
example = get_example_by_number(session["manifest"], example_number, api)
4242
return render_template(
43-
"eSignature/eg043_shared_access/eg043_shared_access_agent_created.html",
43+
"example_done.html",
4444
title="Agent user created",
4545
message=example["ResultsPageText"],
46-
json=json.dumps(json.dumps(results.to_dict()))
46+
json=json.dumps(json.dumps(results.to_dict())),
47+
redirect_url=f"/{eg}auth"
4748
)
4849

4950

5051
@eg043.route(f"/{eg}auth", methods=["GET"])
5152
@authenticate(eg=eg, api=api)
5253
@ensure_manifest(manifest_url=DS_CONFIG["example_manifest_url"])
5354
def create_authorization():
55+
user_info = get_user_info(
56+
session["ds_access_token"],
57+
session["ds_base_path"],
58+
DS_CONFIG["authorization_server"].replace("https://", "")
59+
)
5460
args = {
5561
"account_id": session["ds_account_id"],
5662
"base_path": session["ds_base_path"],
5763
"access_token": session["ds_access_token"],
58-
"user_id": DS_JWT["ds_impersonated_user_id"],
64+
"user_id": user_info.sub,
5965
"agent_user_id": session["agent_user_id"]
6066
}
6167
try:
6268
# 2. Create the authorization for agent user
6369
Eg043SharedAccessController.create_authorization(args)
6470
except ApiException as err:
71+
error_body_json = err and hasattr(err, "body") and err.body
72+
error_body = json.loads(error_body_json)
73+
error_code = error_body and "errorCode" in error_body and error_body["errorCode"]
74+
if error_code == "USER_NOT_FOUND":
75+
example = get_example_by_number(session["manifest"], example_number, api)
76+
additional_page_data = next((p for p in example["AdditionalPage"] if p["Name"] == "user_not_found"),
77+
None)
78+
return render_template(
79+
"example_done.html",
80+
title="Agent user created",
81+
message=additional_page_data["ResultsPageText"],
82+
redirect_url=f"/{eg}auth"
83+
)
84+
6585
return process_error(err)
6686

87+
session["principal_user_id"] = user_info.sub
88+
6789
example = get_example_by_number(session["manifest"], example_number, api)
6890
additional_page_data = next((p for p in example["AdditionalPage"] if p["Name"] == "authenticate_as_agent"), None)
6991
return render_template(
70-
"eSignature/eg043_shared_access/eg043_shared_access_reauthenticate.html",
92+
"example_done.html",
7193
title="Authenticate as the agent",
72-
message=additional_page_data["ResultsPageText"]
94+
message=additional_page_data["ResultsPageText"],
95+
redirect_url=f"/{eg}reauthenticate"
7396
)
7497

7598

@@ -89,7 +112,7 @@ def list_envelopes():
89112
"account_id": session["ds_account_id"],
90113
"base_path": session["ds_base_path"],
91114
"access_token": session["ds_access_token"],
92-
"user_id": DS_JWT["ds_impersonated_user_id"]
115+
"user_id": session["principal_user_id"]
93116
}
94117
try:
95118
# 4. Retrieve the list of envelopes
@@ -124,7 +147,7 @@ def get_view():
124147
example = get_example_by_number(session["manifest"], example_number, api)
125148

126149
return render_template(
127-
"eSignature/eg043_shared_access/eg043_shared_access.html",
150+
"eSignature/eg043_shared_access.html",
128151
title=example["ExampleName"],
129152
example=example,
130153
source_file="eg043_shared_access.py",

app/templates/eSignature/eg043_shared_access/eg043_shared_access.html renamed to app/templates/eSignature/eg043_shared_access.html

File renamed without changes.

app/templates/eSignature/eg043_shared_access/eg043_shared_access_agent_created.html

Lines changed: 0 additions & 14 deletions
This file was deleted.

app/templates/eSignature/eg043_shared_access/eg043_shared_access_reauthenticate.html

Lines changed: 0 additions & 8 deletions
This file was deleted.

app/templates/example_done.html

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ <h2>{{ title }}</h2>
1717
</ul>
1818
{% endif %}
1919

20-
<p><a href="/">Continue</a></p>
21-
20+
{% if redirect_url %}
21+
<p><a href="{{ redirect_url }}">Continue</a></p>
22+
{% else %}
23+
<p><a href="/">Continue</a></p>
24+
{% endif %}
25+
2226
{% endblock %}

0 commit comments

Comments
 (0)