| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import { LOCAL_STORAGE_KEYS } from 'common'
- import { makeRandomString } from './helpers'
- const GITHUB_INTEGRATION_APP_NAME =
- process.env.NEXT_PUBLIC_GITHUB_INTEGRATION_APP_NAME ||
- (process.env.NEXT_PUBLIC_IS_NIMBUS !== undefined
- ? 'briven-snap'
- : process.env.NEXT_PUBLIC_ENVIRONMENT === 'prod'
- ? `briven`
- : process.env.NEXT_PUBLIC_ENVIRONMENT === 'staging'
- ? `briven-staging`
- : `briven-local-testing`)
- const GITHUB_INTEGRATION_CLIENT_ID =
- process.env.NEXT_PUBLIC_GITHUB_INTEGRATION_CLIENT_ID ||
- (process.env.NEXT_PUBLIC_IS_NIMBUS !== undefined
- ? 'Iv23li2pAiqDGgaSrP8q'
- : process.env.NEXT_PUBLIC_ENVIRONMENT === 'prod'
- ? `Iv1.b91a6d8eaa272168`
- : process.env.NEXT_PUBLIC_ENVIRONMENT === 'staging'
- ? `Iv1.2681ab9a0360d8ad`
- : `Iv1.5022a3b44d150fbf`)
- const GITHUB_INTEGRATION_AUTHORIZATION_URL = `https://github.com/login/oauth/authorize?client_id=${GITHUB_INTEGRATION_CLIENT_ID}`
- export const GITHUB_INTEGRATION_INSTALLATION_URL = `https://github.com/apps/${GITHUB_INTEGRATION_APP_NAME}/installations/new`
- export const GITHUB_INTEGRATION_REVOKE_AUTHORIZATION_URL = `https://github.com/settings/connections/applications/${GITHUB_INTEGRATION_CLIENT_ID}`
- export function openInstallGitHubIntegrationWindow(
- type: 'install' | 'authorize',
- closeCallback?: () => void
- ) {
- const w = 600
- const h = 800
- const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX
- const dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY
- const width = window.innerWidth
- ? window.innerWidth
- : document.documentElement.clientWidth
- ? document.documentElement.clientWidth
- : screen.width
- const height = window.innerHeight
- ? window.innerHeight
- : document.documentElement.clientHeight
- ? document.documentElement.clientHeight
- : screen.height
- let windowUrl: string | undefined
- if (type === 'install') {
- windowUrl = GITHUB_INTEGRATION_INSTALLATION_URL
- } else {
- const state = makeRandomString(32)
- localStorage.setItem(LOCAL_STORAGE_KEYS.GITHUB_AUTHORIZATION_STATE, state)
- windowUrl = `${GITHUB_INTEGRATION_AUTHORIZATION_URL}&state=${state}&prompt=select_account`
- }
- const systemZoom = width / window.screen.availWidth
- const left = (width - w) / 2 / systemZoom + dualScreenLeft
- const top = (height - h) / 2 / systemZoom + dualScreenTop
- const newWindow = window.open(
- windowUrl,
- 'GitHub',
- `scrollbars=yes,resizable=no,status=no,location=no,toolbar=no,menubar=no,
- width=${w / systemZoom},
- height=${h / systemZoom},
- top=${top},
- left=${left}
- `
- )
- if (newWindow) {
- if (closeCallback) {
- // Poll to check if window is closed
- const checkClosed = setInterval(() => {
- if (newWindow.closed) {
- clearInterval(checkClosed)
- closeCallback()
- }
- }, 500) // Check every 500ms
- // Add a timeout to prevent infinite polling
- setTimeout(() => {
- clearInterval(checkClosed)
- }, 300000) // 5 minutes timeout
- }
- newWindow.focus()
- }
- }
- export const getGitHubProfileImgUrl = (username: string) => {
- return `https://github.com/${username}.png?size=96`
- }
|