Skip to content

Commit 2b949f0

Browse files
committed
initial attempts
1 parent f6adc70 commit 2b949f0

7 files changed

Lines changed: 57 additions & 11 deletions

File tree

app/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import os
22

3-
from flask import Flask
3+
from flask import Flask, session
44
from flask_wtf.csrf import CSRFProtect
55

66
from .ds_config import DS_CONFIG

app/docusign/ds_client.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44

55
import requests
6-
from flask import current_app as app, url_for, redirect, render_template, request
6+
from flask import current_app as app, url_for, redirect, render_template, request, session
77
from flask_oauthlib.client import OAuth
88
from docusign_esign import ApiClient
99
from docusign_esign.client.api_exception import ApiException
@@ -45,11 +45,11 @@ def _init(cls, auth_type):
4545
def _auth_code_grant(cls):
4646
"""Authorize with the Authorization Code Grant - OAuth 2.0 flow"""
4747
oauth = OAuth(app)
48-
if EXAMPLES_API_TYPE["Rooms"]:
48+
if session["chosen_api"] == "rooms":
4949
use_scopes = ROOMS_SCOPES
50-
elif EXAMPLES_API_TYPE["Click"]:
50+
elif session["chosen_api"] == "click":
5151
use_scopes = CLICK_SCOPES
52-
elif EXAMPLES_API_TYPE["Admin"]:
52+
elif session["chosen_api"] == "admin":
5353
use_scopes = ADMIN_SCOPES
5454
else:
5555
use_scopes = SCOPES
@@ -77,11 +77,11 @@ def _jwt_auth(cls):
7777
api_client = ApiClient()
7878
api_client.set_base_path(DS_JWT["authorization_server"])
7979

80-
if EXAMPLES_API_TYPE["Rooms"]:
80+
if session["chosen_api"] == "rooms":
8181
use_scopes = ROOMS_SCOPES
82-
elif EXAMPLES_API_TYPE["Click"]:
82+
elif session["chosen_api"] == "click":
8383
use_scopes = CLICK_SCOPES
84-
elif EXAMPLES_API_TYPE["Admin"]:
84+
elif session["chosen_api"] == "admin":
8585
use_scopes=ADMIN_SCOPES
8686
else:
8787
use_scopes = SCOPES
@@ -122,6 +122,7 @@ def _jwt_auth(cls):
122122
else:
123123
process_error(err)
124124

125+
125126
@classmethod
126127
def destroy(cls):
127128
cls.ds_app = None

app/docusign/views.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,20 @@ def ds_logout():
2828
app.config["quickstart"] = False
2929
return redirect(url_for("core.index"))
3030

31+
@ds.route("/choose_api")
32+
def choose_api():
33+
return render_template("choose_api.html", title="Choose API")
34+
35+
@ds.route("/api_selected", methods=["GET", "POST"])
36+
def api_selected():
37+
session["chosen_api"] = request.form.get("chosen_api")
38+
ds_logout_internal()
39+
flash("You have logged out from DocuSign.")
40+
app.config["isLoggedIn"] = False
41+
app.config["quickstart"] = False
42+
43+
return render_template("must_authenticate.html", title="Must authenticate")
44+
3145

3246
@ds.route("/callback")
3347
def ds_callback():
@@ -77,11 +91,11 @@ def ds_callback():
7791

7892
@ds.route("/must_authenticate")
7993
def ds_must_authenticate():
80-
if DS_CONFIG["quickstart"] == "true" and EXAMPLES_API_TYPE['ESignature']:
94+
if DS_CONFIG["quickstart"] == "true" and session["chosen_api"] == "e_signature":
8195
session["auth_type"] = "code_grant"
8296
return redirect(url_for("ds.ds_login"))
8397

84-
elif EXAMPLES_API_TYPE["Monitor"]:
98+
elif session["chosen_api"] == "monitor":
8599
session["auth_type"] = "jwt"
86100
return redirect(url_for("ds.ds_login"))
87101

app/templates/base.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@
3737
data-busy="href">Login <span class="sr-only">(current)</span></a>
3838
</li>
3939
{% endif %}
40+
<li class="nav-item active">
41+
<a class="nav-link" href="{{ url_for('ds.choose_api') }}">Choose API <span class="sr-only">(current)</span></a>
42+
</li>
4043
</ul>
4144

4245
{% if session['ds_user_name'] %}

app/templates/choose_api.html

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<!-- extend base layout -->
2+
{% extends "base.html" %}
3+
4+
{% block content %}
5+
<div style="margin:1% 5%;">
6+
<h1 class="display-4">Please Choose an API</h1>
7+
8+
<form method="post" data-busy="form" action={{ url_for("ds.api_selected") }}>
9+
<div class="form-group col-md-5">
10+
<label for="chosen_api">Please choose your API</label>
11+
<select class="form-control" id="chosen_api" name="chosen_api">
12+
<option value="e_signature">eSignature</option>
13+
<option value="rooms">Rooms</option>
14+
<option value="click">Click</option>
15+
<option value="monitor">Monitor</option>
16+
<option value="admin">Admin</option>
17+
</select>
18+
<p class="lead" style="padding-top: .5rem;">
19+
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
20+
<button type="submit" class="btn btn-docu">Choose your desired API</button>
21+
</p>
22+
</div>
23+
</form>
24+
<hr class="my-4">
25+
<p>You need to authenticate with DocuSign to continue your request.</p>
26+
</div>
27+
{% endblock %}

app/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
url_for,
66
redirect,
77
Blueprint,
8+
session,
89
current_app as app
910
)
1011

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ cffi==1.14.3
44
chardet==3.0.4
55
Click
66
cryptography==3.3.2
7-
docusign-esign==3.10.0rc1
7+
docusign-esign==3.12.0
88
docusign-rooms==1.1.0
99
docusign-monitor==1.0.0
1010
docusign-click==1.0.0

0 commit comments

Comments
 (0)