def approve(*args, **kwargs): r = frappe.request try: ( scopes, frappe.flags.oauth_credentials, ) = get_oauth_server().validate_authorization_request( r.url, r.method, r.get_data(), r.headers ) headers, body, status = get_oauth_server().create_authorization_response( uri=frappe.flags.oauth_credentials["redirect_uri"], body=r.get_data(), headers=r.headers, scopes=scopes, credentials=frappe.flags.oauth_credentials, ) uri = headers.get("Location", None) frappe.local.response["type"] = "redirect" frappe.local.response["location"] = uri return except (FatalClientError, OAuth2Error) as e: return generate_json_error_response(e)
def authorize(**kwargs): success_url = "/api/method/frappe.integrations.oauth2.approve?" + encode_params( sanitize_kwargs(kwargs) ) failure_url = frappe.form_dict["redirect_uri"] + "?error=access_denied" if frappe.session.user == "Guest": # Force login, redirect to preauth again. frappe.local.response["type"] = "redirect" frappe.local.response["location"] = "/login?" + encode_params( {"redirect-to": frappe.request.url} ) else: try: r = frappe.request ( scopes, frappe.flags.oauth_credentials, ) = get_oauth_server().validate_authorization_request( r.url, r.method, r.get_data(), r.headers ) skip_auth = frappe.db.get_value( "OAuth Client", frappe.flags.oauth_credentials["client_id"], "skip_authorization", ) unrevoked_tokens = frappe.get_all( "OAuth Bearer Token", filters={"status": "Active"} ) if skip_auth or ( get_oauth_settings().skip_authorization == "Auto" and unrevoked_tokens ): frappe.local.response["type"] = "redirect" frappe.local.response["location"] = success_url else: # Show Allow/Deny screen. response_html_params = frappe._dict( { "client_id": frappe.db.get_value( "OAuth Client", kwargs["client_id"], "app_name" ), "success_url": success_url, "failure_url": failure_url, "details": scopes, } ) resp_html = frappe.render_template( "templates/includes/oauth_confirmation.html", response_html_params ) frappe.respond_as_web_page("Confirm Access", resp_html) except (FatalClientError, OAuth2Error) as e: return generate_json_error_response(e)
def openid_profile(*args, **kwargs): try: r = frappe.request headers, body, status = get_oauth_server().create_userinfo_response( r.url, headers=r.headers, body=r.form, ) body = frappe._dict(json.loads(body)) frappe.local.response = body return except (FatalClientError, OAuth2Error) as e: return generate_json_error_response(e)
def get_token(*args, **kwargs): try: r = frappe.request headers, body, status = get_oauth_server().create_token_response( r.url, r.method, r.form, r.headers, frappe.flags.oauth_credentials) body = frappe._dict(json.loads(body)) if body.error: frappe.local.response = body frappe.local.response["http_status_code"] = 400 return frappe.local.response = body return except (FatalClientError, OAuth2Error) as e: return generate_json_error_response(e)