コード例 #1
0
ファイル: oauth2.py プロジェクト: Alchez/frappe
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)
コード例 #2
0
ファイル: oauth2.py プロジェクト: Alchez/frappe
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)
コード例 #3
0
ファイル: oauth2.py プロジェクト: Alchez/frappe
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)
コード例 #4
0
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)