mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
* feat: initiate integrations * feat: initiate github integration create models for the same * feat: github integration views * fix: update workspace integration view to create bot users * refactor: rename repository model * refactor: update github repo sync endpoint to create repo and sync in one go * refactor: update issue activities to post the updates to segway hook * refactor: update endpoints to get project id and add actor as a member of project in repo sync * fix: make is bot as a read only field * fix: remove github repo imports * fix: url mapping * feat: repo views * refactor: update webhook request endpoint * refactor: rename repositories table to github_repositories * fix: workpace integration actor * feat: label for github integration * refactor: issue activity on create issue * refactor: repo create endpoint and add db constraints for repo sync and issues * feat: create api token on workpsace integration and avatar_url for integrations * refactor: add uuid primary key for Audit model * refactor: remove id from auditfield to maintain integrity and make avatar blank if none supplied * feat: track comments on an issue * feat: comment syncing from plane to github * fix: prevent activities created by bot to be sent to webhook * feat: github app installation id retrieve * feat: github app installation id saved into db * feat: installation_id for the github integragation and unique provider and project base integration for repo * refactor: remove actor logic from activity task * feat: saving github metadata using installation id in workspace integration table * feat: github repositories endpoint * feat: github and project repos synchronisation * feat: delete issue and delete comment activity * refactor: remove print logs * FIX: reading env names for github app while installation * refactor: update bot user firstname with title * fix: add is_bot value in field --------- Co-authored-by: venplane <venkatesh@plane.so>
63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
import os
|
|
import jwt
|
|
import requests
|
|
from datetime import datetime, timedelta
|
|
from cryptography.hazmat.primitives.serialization import load_pem_private_key
|
|
from cryptography.hazmat.backends import default_backend
|
|
|
|
|
|
def get_jwt_token():
|
|
app_id = os.environ.get("GITHUB_APP_ID", "")
|
|
secret = bytes(os.environ.get("GITHUB_APP_PRIVATE_KEY", ""), encoding="utf8")
|
|
current_timestamp = int(datetime.now().timestamp())
|
|
due_date = datetime.now() + timedelta(minutes=10)
|
|
expiry = int(due_date.timestamp())
|
|
payload = {
|
|
"iss": app_id,
|
|
"sub": app_id,
|
|
"exp": expiry,
|
|
"iat": current_timestamp,
|
|
"aud": "https://github.com/login/oauth/access_token",
|
|
}
|
|
|
|
priv_rsakey = load_pem_private_key(secret, None, default_backend())
|
|
token = jwt.encode(payload, priv_rsakey, algorithm="RS256")
|
|
return token
|
|
|
|
|
|
def get_github_metadata(installation_id):
|
|
token = get_jwt_token()
|
|
|
|
url = f"https://api.github.com/app/installations/{installation_id}"
|
|
headers = {
|
|
"Authorization": "Bearer " + token,
|
|
"Accept": "application/vnd.github+json",
|
|
}
|
|
response = requests.get(url, headers=headers).json()
|
|
return response
|
|
|
|
|
|
def get_github_repos(access_tokens_url, repositories_url):
|
|
token = get_jwt_token()
|
|
|
|
headers = {
|
|
"Authorization": "Bearer " + token,
|
|
"Accept": "application/vnd.github+json",
|
|
}
|
|
|
|
oauth_response = requests.post(
|
|
access_tokens_url,
|
|
headers=headers,
|
|
).json()
|
|
|
|
oauth_token = oauth_response.get("token")
|
|
headers = {
|
|
"Authorization": "Bearer " + oauth_token,
|
|
"Accept": "application/vnd.github+json",
|
|
}
|
|
response = requests.get(
|
|
repositories_url,
|
|
headers=headers,
|
|
).json()
|
|
return response
|