Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions cms_bluebutton/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,27 +51,18 @@ def set_dict(self, auth_token_dict):
self.token_type = auth_token_dict.get("token_type")


def refresh_auth_token(bb, auth_token):
def refresh_auth_token(bb, auth_token) -> AuthorizationToken:
data = {
"client_id": bb.client_id,
"grant_type": "refresh_token",
"refresh_token": auth_token.refresh_token,
}

headers = SDK_HEADERS

token_response = requests.post(
url=bb.auth_token_url,
data=data,
headers=headers,
auth=(bb.client_id, bb.client_secret),
)

token_response = _do_post(data, bb, (bb.client_id, bb.client_secret))
token_response.raise_for_status()
return AuthorizationToken(token_response.json())


def generate_authorize_url(bb, auth_data):
def generate_authorize_url(bb, auth_data) -> str:
params = {
"client_id": bb.client_id,
"redirect_uri": bb.callback_url,
Expand All @@ -94,31 +85,31 @@ def base64_url_encode(buffer):
return buffer_result


def get_random_string(length):
def get_random_string(length) -> str:
letters = string.ascii_letters + string.digits + string.punctuation
result = "".join(random.choice(letters) for i in range(length))
return result


def generate_pkce_data():
def generate_pkce_data() -> dict:
verifier = generate_random_state(32)
code_challenge = base64.urlsafe_b64encode(
hashlib.sha256(verifier.encode("ASCII")).digest()
)
return {"code_challenge": code_challenge.decode("utf-8"), "verifier": verifier}


def generate_random_state(num):
def generate_random_state(num) -> str:
return base64_url_encode(get_random_string(num))


def generate_auth_data():
def generate_auth_data() -> dict:
auth_data = {"state": generate_random_state(32)}
auth_data.update(generate_pkce_data())
return auth_data


def get_access_token_from_code(bb, auth_data, callback_code):
def get_access_token_from_code(bb, auth_data, callback_code) -> dict:
data = {
"client_id": bb.client_id,
"client_secret": bb.client_secret,
Expand All @@ -129,14 +120,7 @@ def get_access_token_from_code(bb, auth_data, callback_code):
"code_challenge": auth_data["code_challenge"],
}

mp_encoder = MultipartEncoder(data)
headers = SDK_HEADERS
headers["content-type"] = mp_encoder.content_type
token_response = requests.post(
url=bb.auth_token_url,
data=mp_encoder,
headers=headers
)
token_response = _do_post(data, bb, None)
token_response.raise_for_status()
token_dict = token_response.json()
token_dict["expires_at"] = datetime.datetime.now(
Expand All @@ -157,3 +141,19 @@ def get_authorization_token(bb, auth_data, callback_code, callback_state):
raise ValueError("Provided callback state does not match.")

return AuthorizationToken(get_access_token_from_code(bb, auth_data, callback_code))


def _do_post(data, bb, auth):
mp_encoder = MultipartEncoder(data)
headers = SDK_HEADERS
headers["content-type"] = mp_encoder.content_type
return requests.post(
url=bb.auth_token_url,
data=mp_encoder,
headers=headers
) if not auth else requests.post(
url=bb.auth_token_url,
data=mp_encoder,
headers=headers,
auth=auth
)
1 change: 1 addition & 0 deletions requirements/req.dev.in
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pyyaml==5.4.1
requests==2.27.1
requests-mock==1.9.3
requests-toolbelt==0.9.1
Expand Down
31 changes: 31 additions & 0 deletions requirements/req.dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,37 @@ pytest==7.0.1 \
--hash=sha256:9ce3ff477af913ecf6321fe337b93a2c0dcf2a0a1439c43f5452112c1e4280db \
--hash=sha256:e30905a0c131d3d94b89624a1cc5afec3e0ba2fbdb151867d8e0ebd49850f171
# via -r requirements/req.dev.in
pyyaml==5.4.1 \
--hash=sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf \
--hash=sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696 \
--hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \
--hash=sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77 \
--hash=sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922 \
--hash=sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5 \
--hash=sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8 \
--hash=sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10 \
--hash=sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc \
--hash=sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018 \
--hash=sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e \
--hash=sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253 \
--hash=sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347 \
--hash=sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183 \
--hash=sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541 \
--hash=sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb \
--hash=sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185 \
--hash=sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc \
--hash=sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db \
--hash=sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa \
--hash=sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46 \
--hash=sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122 \
--hash=sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b \
--hash=sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63 \
--hash=sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df \
--hash=sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc \
--hash=sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247 \
--hash=sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6 \
--hash=sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0
# via -r requirements/req.dev.in
requests==2.27.1 \
--hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61 \
--hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d
Expand Down