-
Notifications
You must be signed in to change notification settings - Fork 42
/
index.js
74 lines (64 loc) · 1.66 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* global sessionStorage */
import React from 'react'
import ReactDOM from 'react-dom'
import { client } from '../src/ipc'
import { getData, updateStorage } from '../src/storage'
import IdpCallback from './components/IdpCallback'
import IdpSelect from './components/IdpSelect'
import NoParent from './components/NoParent'
import './index.css'
const idps = [
{
displayName: 'Databox',
url: 'https://databox.me/',
iconUrl: 'https://solidtest.space/favicon.ico'
},
{
displayName: 'Solid Test Space',
url: 'https://solidtest.space/',
iconUrl: 'https://solidtest.space/favicon.ico'
}
]
findAppOrigin().then(appOrigin => {
const appName = process.env.APP_NAME
let element
if (!appOrigin) {
element = <NoParent appName={appName} />
} else if (window.location.hash) {
element = (
<IdpCallback
appOrigin={appOrigin}
afterLoggedIn={() => setTimeout(window.close, 750)}
/>
)
} else {
element = <IdpSelect idps={idps} appOrigin={appOrigin} appName={appName} />
}
ReactDOM.render(element, document.getElementById('app-container'))
})
async function findAppOrigin() {
if (!window.opener) {
return null
}
let appOrigin = await getStoredAppOrigin()
if (appOrigin) {
return appOrigin
}
const request = client(window.opener, '*')
appOrigin = await request({
method: 'getAppOrigin',
args: []
})
await storeAppOrigin(appOrigin)
return appOrigin
}
async function getStoredAppOrigin() {
const { appOrigin } = await getData(sessionStorage)
return appOrigin
}
function storeAppOrigin(origin) {
return updateStorage(sessionStorage, data => ({
...data,
appOrigin: origin
}))
}