def add_code_challenge(self): """ PKCE RFC 7636 support :return: """ try: cv_len = self.config['code_challenge']['length'] except KeyError: cv_len = 64 # Use default code_verifier = unreserved(cv_len) _cv = code_verifier.encode() try: _method = self.config['code_challenge']['method'] except KeyError: _method = 'S256' try: _h = CC_METHOD[_method](_cv).hexdigest() code_challenge = b64e(_h.encode()).decode() except KeyError: raise Unsupported('PKCE Transformation method:{}'.format(_method)) # TODO store code_verifier return { "code_challenge": code_challenge, "code_challenge_method": _method }, code_verifier
def add_code_challenge(self): """ PKCE RFC 7636 support. :return: """ try: cv_len = self.config["code_challenge"]["length"] except KeyError: cv_len = 64 # Use default code_verifier = unreserved(cv_len) _cv = code_verifier.encode("ascii") try: _method = self.config["code_challenge"]["method"] except KeyError: _method = "S256" try: _h = CC_METHOD[_method](_cv).digest() code_challenge = b64e(_h).decode("ascii") except KeyError: raise Unsupported("PKCE Transformation method:{}".format(_method)) # TODO store code_verifier return ( {"code_challenge": code_challenge, "code_challenge_method": _method}, code_verifier, )