66from flask import render_template , session , Blueprint , redirect , current_app , url_for , request
77
88from ..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
1010from ...docusign .utils import ds_logout_internal , authenticate_agent
1111from ...ds_config import DS_CONFIG , DS_JWT
1212from ...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" ])
5354def 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" ,
0 commit comments