43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
|
|
# For license information, please see license.txt
|
|
|
|
|
|
import json
|
|
from base64 import b64decode
|
|
|
|
import frappe
|
|
import requests
|
|
|
|
from press.utils import log_error
|
|
|
|
|
|
def get_context(context):
|
|
code = frappe.form_dict.code
|
|
state = frappe.form_dict.state
|
|
redirect_url = frappe.utils.get_url("/dashboard")
|
|
if code and state:
|
|
decoded_state = json.loads(b64decode(state).decode())
|
|
team = decoded_state["team"]
|
|
redirect_url = frappe.utils.get_url(decoded_state["url"])
|
|
obtain_access_token(code, team)
|
|
frappe.db.commit()
|
|
frappe.flags.redirect_location = redirect_url
|
|
raise frappe.Redirect
|
|
|
|
|
|
def obtain_access_token(code, team):
|
|
response = None
|
|
try:
|
|
client_id = frappe.db.get_single_value("Press Settings", "github_app_client_id")
|
|
client_secret = frappe.db.get_single_value(
|
|
"Press Settings", "github_app_client_secret"
|
|
)
|
|
data = {"client_id": client_id, "client_secret": client_secret, "code": code}
|
|
headers = {"Accept": "application/json"}
|
|
response = requests.post(
|
|
"http://git.jingrow.com/login/oauth/access_token", data=data, headers=headers
|
|
).json()
|
|
frappe.db.set_value("Team", team, "github_access_token", response["access_token"])
|
|
except Exception:
|
|
log_error("Access Token Error", team=team, code=code, response=response)
|