Skip to content

Commit cf2351d

Browse files
Admin eg008 (#78)
* added new examples * Update templates * fixes * fixing example 2 so that 8 and 9 can run * add check if user was deleted * fixes * removing admin 9 * Revert "removing admin 9" This reverts commit 3c386a22e8aca02b3c8a69a3c33cf292179cf6c6. * branch with only admin 8 * text changes * missing step 2 comments * adjusting step comments Co-authored-by: RomanBachaloSigmaSoftware <roman.bachalo@sigma.software>
1 parent 2fc166a commit cf2351d

12 files changed

Lines changed: 327 additions & 8 deletions

app/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
app.register_blueprint(admin_views.eg005)
6666
app.register_blueprint(admin_views.eg006)
6767
app.register_blueprint(admin_views.eg007)
68+
app.register_blueprint(admin_views.eg008)
6869

6970
elif EXAMPLES_API_TYPE["Click"]:
7071
app.register_blueprint(click_views.eg001)

app/admin/examples/eg002_create_active_clm_esign_user.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def worker(self, args):
102102
# Step 5 start
103103
clm_product_permission_profile = ProductPermissionProfileRequest(product_id=clm_product_id, permission_profile_id=clm_permission_profile_id)
104104
esign_product_permission_profile = ProductPermissionProfileRequest(product_id=esign_product_id, permission_profile_id=esign_permission_profile_id)
105-
ds_group_request = DSGroupRequest(args["group_id"])
105+
ds_group_request = DSGroupRequest(ds_group_id=args["group_id"])
106106
new_user = NewMultiProductUserAddRequest(product_permission_profiles=[esign_product_permission_profile, clm_product_permission_profile], ds_groups=[ds_group_request], user_name=args["user_name"], first_name=args["first_name"], last_name=args["last_name"], email=args["email"], auto_activate_memberships=True)
107107
# Step 5 end
108108

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
from docusign_admin import (
2+
ApiClient,
3+
ProductPermissionProfilesApi,
4+
UserProductPermissionProfilesRequest,
5+
ProductPermissionProfileRequest)
6+
from flask import session, request
7+
8+
from ...ds_config import DS_CONFIG
9+
from app.admin.utils import get_organization_id
10+
11+
class Eg008UpdateUserProductPermissionProfileController:
12+
@staticmethod
13+
def get_args():
14+
"""Get required session and request arguments"""
15+
organization_id = get_organization_id()
16+
17+
return {
18+
"account_id": session["ds_account_id"], # Represents your {ACCOUNT_ID}
19+
"access_token": session["ds_access_token"], # Represents your {ACCESS_TOKEN}
20+
"organization_id": organization_id, # Represents your {ORGANIZATION_ID}
21+
"product_id": request.form.get("product"),
22+
"clm_email": session["clm_email"],
23+
}
24+
25+
@staticmethod
26+
def get_permission_profiles():
27+
"""Get permission profiles"""
28+
29+
api_client = ApiClient(host=DS_CONFIG["admin_api_client_host"])
30+
api_client.set_default_header(
31+
header_name="Authorization",
32+
header_value=f"Bearer {session['ds_access_token']}"
33+
)
34+
35+
product_permission_profiles_api = ProductPermissionProfilesApi(api_client=api_client)
36+
profiles = product_permission_profiles_api.get_product_permission_profiles(
37+
organization_id=get_organization_id(),
38+
account_id=session["ds_account_id"]
39+
)
40+
profiles_list = profiles.to_dict()["product_permission_profiles"]
41+
return profiles_list
42+
43+
@staticmethod
44+
def worker(self, args):
45+
"""
46+
1. Create an API client with headers
47+
2. Get your monitor data via SDK
48+
"""
49+
50+
access_token = args["access_token"]
51+
account_id = args["account_id"]
52+
org_id = args["organization_id"]
53+
clm_email = args["clm_email"]
54+
permission_profile_id = args["permission_profile_id"]
55+
product_id = args["product_id"]
56+
57+
# Create an API client with headers
58+
# Step 2 start
59+
api_client = ApiClient(host=DS_CONFIG["admin_api_client_host"])
60+
api_client.set_default_header(
61+
header_name="Authorization",
62+
header_value=f"Bearer {access_token}"
63+
)
64+
# Step 2 end
65+
66+
# Step 3 start
67+
product_permission_profile = ProductPermissionProfileRequest(
68+
permission_profile_id=permission_profile_id,
69+
product_id=product_id
70+
)
71+
user_product_permission_profile_request = UserProductPermissionProfilesRequest(
72+
email=clm_email,
73+
product_permission_profiles=[product_permission_profile]
74+
)
75+
# Step 3 end
76+
77+
# Step 4 start
78+
product_permission_profiles_api = ProductPermissionProfilesApi(api_client=api_client)
79+
response = product_permission_profiles_api.add_user_product_permission_profiles_by_email(
80+
organization_id=org_id,
81+
account_id=account_id,
82+
user_product_permission_profiles_request=user_product_permission_profile_request
83+
)
84+
# Step 4 end
85+
86+
return response.to_dict()

app/admin/templates/eg002_create_active_clm_esign_user.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ <h4>2. Create a new active user for CLM and eSignature</h4>
3434
<input type="email" class="form-control" id="email" name="email"
3535
aria-describedby="emailHelp" required>
3636
<small id="emailHelp" class="form-text text-muted">We will never share your email with anyone else.</small>
37-
<small id="accessHelp" class="form-text text-muted">This email address must use the same domain that has been claimed by your organization.</small>
3837
</div>
3938
{% if esign_permission_profiles_list %}
4039
<div class="form-group">

app/admin/templates/eg006_get_user_profile_by_email.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ <h4>6. Retrieve the user's DocuSign profile using an email address</h4>
99

1010
<p>API method used:
1111
<a target="_blank" rel='noopener noreferrer'
12-
href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/esignusermanagement/getuserprofiles/">MultiProductUserManagement:getUserDSProfilesByEmail</a>.
12+
href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getuserdsprofilesbyemail/">MultiProductUserManagement:getUserDSProfilesByEmail</a>.
1313
</p>
1414
<p>
1515
View source file <a target="_blank" href="{{ source_url | safe }}">{{ source_file }}</a> on GitHub.

app/admin/templates/eg007_get_user_profile_by_user_id.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ <h4>7. Retrieve the user's DocuSign profile using a User ID</h4>
1111

1212
<p>API method used:
1313
<a target="_blank" rel='noopener noreferrer'
14-
href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/esignusermanagement/getuserprofiles/">MultiProductUserManagement:getUserDSProfile</a>.
14+
href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getuserdsprofile/">MultiProductUserManagement:getUserDSProfile</a>.
1515
</p>
1616
<p>
1717
View source file <a target="_blank" href="{{ source_url | safe }}">{{ source_file }}</a> on GitHub.
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<!-- extend base layout --> {% extends "base.html" %} {% block content %}
2+
3+
<h4>8. Update user product permission profiles using an email address</h4>
4+
<p>Demonstrates how to update user product permission profiles. There may only be one permission profile assigned to a user per product.</p>
5+
6+
{% if show_doc %}
7+
<p><a target='_blank' href='{{ documentation | safe }}'>Documentation</a> about this example.</p>
8+
{% endif %}
9+
10+
<p>
11+
API methods used:
12+
<a target='_blank' href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getproductpermissionprofiles/">MultiProductUserManagement:getProductPermissionProfiles</a>,
13+
<a target="_blank" href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/adduserproductpermissionprofilesbyemail/">MultiProductUserManagement:addUserProductPermissionProfilesByEmail</a>.
14+
</p>
15+
<p>
16+
View source file <a target="_blank" href="{{ source_url | safe }}">{{ source_file }}</a> on GitHub.
17+
</p>
18+
19+
{% if email_ok %}
20+
<p>Update user product permission profile for the following email: <b>{{ email }}</b></p>
21+
22+
<form class="eg" action="" method="post" data-busy="form">
23+
<div class="form-group">
24+
<label for="product">Choose a product for which you want to update the permission profile</label>
25+
<select class="form-control" id="product" name="product">
26+
{% for product in product_list %}
27+
{% if product.product_name == "CLM" %}
28+
<option value="{{product.product_id}}" selected="selected">{{product.product_name}}</option>
29+
{% else %}
30+
<option value="{{product.product_id}}">{{product.product_name}}</option>
31+
{% endif %}
32+
{% endfor %}
33+
</select>
34+
</div>
35+
36+
{% if esign_permission_profiles_list %}
37+
<div class="form-group" id="esign-profiles" style="display: none">
38+
<label for="esign_permission_profile">Choose a permission profile</label>
39+
<select class="form-control" id="esign_permission_profile" name="esign_permission_profile">
40+
{% for profile in esign_permission_profiles_list %}
41+
<option value="{{profile.permission_profile_id}}">{{profile.permission_profile_name}}</option>
42+
{% endfor %}
43+
</select>
44+
</div>
45+
{% else %}
46+
<p>Problem: Please first create an eSignature permission profile.
47+
</br>Thank you.</p>
48+
{% endif %}
49+
50+
{% if clm_permission_profiles_list %}
51+
<div class="form-group" id="clm-profiles">
52+
<label for="clm_permission_profile">Choose a permission profile</label>
53+
<select class="form-control" id="clm_permission_profile" name="clm_permission_profile">
54+
{% for profile in clm_permission_profiles_list %}
55+
<option value="{{profile.permission_profile_id}}">{{profile.permission_profile_name}}</option>
56+
{% endfor %}
57+
</select>
58+
</div>
59+
{% else %}
60+
<p>Problem: Please first create a CLM permission profile.
61+
</br>Thank you.</p>
62+
{% endif %}
63+
64+
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
65+
<button type="submit" class="btn btn-docu">Continue</button>
66+
</form>
67+
68+
{% block javascript %}
69+
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
70+
<script type="text/javascript">
71+
$(document).ready(function () {
72+
$("#product").on("change", function () {
73+
if($("#product option:selected" ).text() === "CLM"){
74+
$("#esign-profiles").css("display", "none")
75+
$("#clm-profiles").css("display", "block")
76+
} else {
77+
$("#esign-profiles").css("display", "block")
78+
$("#clm-profiles").css("display", "none")
79+
}
80+
});
81+
});
82+
</script>
83+
{% endblock %}
84+
{% else %}
85+
<p>Problem: You do not have the user to change permissions for. Go to <a href="eg002">example 2</a> and create one.
86+
</br>Thank you.</p>
87+
88+
<form class="eg" action="eg002" method="get">
89+
<button type="submit" class="btn btn-docu">Continue</button>
90+
</form>
91+
{% endif %}
92+
{% endblock %}

app/admin/templates/home_admin.html

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,24 @@ <h4 id="example006">6. <a href="eg006">Retrieve the user's DocuSign profile usin
7373

7474
<p>API method used:
7575
<a target="_blank" rel='noopener noreferrer'
76-
href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/esignusermanagement/getuserprofiles/">MultiProductUserManagement:getUserDSProfilesByEmail</a>
76+
href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getuserdsprofilesbyemail/">MultiProductUserManagement:getUserDSProfilesByEmail</a>
7777
</p>
7878

7979
<h4 id="example007">7. <a href="eg007">Retrieve the user's DocuSign profile using a User ID</a></h4>
8080
<p>Demonstrates how to obtain the user’s DocuSign profile information across all DocuSign accounts by specifying the user’s User ID.</p>
8181

8282
<p>API method used:
8383
<a target="_blank" rel='noopener noreferrer'
84-
href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/esignusermanagement/getuserprofiles/">MultiProductUserManagement:getUserDSProfile</a>
84+
href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getuserdsprofile/">MultiProductUserManagement:getUserDSProfile</a>
85+
</p>
86+
87+
<h4 id="example008">8. <a href="eg008">Update user product permission profiles using an email address</a></h4>
88+
<p>Demonstrates how to update user product permission profiles. There may only be one permission profile assigned to a user per product.</p>
89+
90+
<p>
91+
API methods used:
92+
<a target='_blank' href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getproductpermissionprofiles/">MultiProductUserManagement:getProductPermissionProfiles</a>,
93+
<a target="_blank" href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/adduserproductpermissionprofilesbyemail/">MultiProductUserManagement:addUserProductPermissionProfilesByEmail</a>
8594
</p>
8695
</div>
8796
</div>

app/admin/utils.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from docusign_admin import ApiClient, AccountsApi
1+
from docusign_admin import ApiClient, AccountsApi, UsersApi
22
from flask import session
33

44
from app.ds_config import DS_CONFIG
@@ -31,3 +31,17 @@ def get_organization_id():
3131
org_id = first_org["id"]
3232

3333
return org_id
34+
35+
def check_user_exists_by_email(user_email):
36+
access_token = session["ds_access_token"]
37+
api_client = ApiClient(host=DS_CONFIG["admin_api_client_host"])
38+
api_client.set_default_header(
39+
header_name="Authorization",
40+
header_value=f"Bearer {access_token}"
41+
)
42+
43+
users_api = UsersApi(api_client)
44+
response = users_api.get_users(organization_id=get_organization_id(), email=user_email)
45+
46+
return len(response.users) > 0 and response.users[0].user_status != "closed"
47+

app/admin/views/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
from .eg005_audit_users import eg005
66
from .eg006_get_user_profile_by_email import eg006
77
from .eg007_get_user_profile_by_user_id import eg007
8+
from .eg008_update_user_product_permission_profile import eg008

0 commit comments

Comments
 (0)