1
1
import React from 'react' ;
2
2
3
- import { BrowserRouter as Router , Switch , Route , useHistory } from 'react-router-dom' ;
3
+ import { BrowserRouter as Router , Switch , Route , useHistory , Redirect } from 'react-router-dom' ;
4
4
5
5
import Header , { AdminHeader , LoginHeader } from "./components/Header" ;
6
6
7
+ import Login from './pages/Login/Login' ;
7
8
import HomePage from './pages/Home' ;
8
9
import Admin from './pages/Admin' ;
9
10
import Search360 from './pages/DataView360/Search/Search' ;
10
11
import View360 from './pages/DataView360/View/View360' ;
11
12
import About from './pages/About' ;
12
- import Login from './components/Login/Login' ;
13
13
import RefreshDlg from './components/RefreshDlg' ;
14
14
import Check from './pages/Check/Check' ;
15
15
import Refresh from './components/Refresh' ;
16
16
17
- import useToken from './components/Login/useToken' ;
18
- var jwt = require ( 'jsonwebtoken' ) ;
17
+ import useToken from './pages/Login/useToken' ;
18
+
19
+ let jwt = require ( 'jsonwebtoken' ) ;
19
20
20
21
const REFRESH_POPUP_TIME = 300 // seconds
21
22
@@ -26,139 +27,149 @@ const expTimer = () => sleep(500).then(() => ({}))
26
27
const AuthContext = React . createContext ( )
27
28
28
29
function AuthProvider ( { children} ) {
29
- const [ state , setState ] = React . useState ( {
30
- status : 'pending' ,
31
- error : null ,
32
- user : null , } )
33
-
34
- React . useEffect ( ( ) => {
35
- expTimer ( ) . then (
36
- user => setState ( { status : 'success' , error : null , user} ) //
30
+ const [ state , setState ] = React . useState ( {
31
+ status : 'pending' ,
32
+ error : null ,
33
+ user : null ,
34
+ } )
35
+
36
+ React . useEffect ( ( ) => {
37
+ expTimer ( ) . then (
38
+ user => setState ( { status : 'success' , error : null , user} ) //
39
+ )
40
+ } , )
41
+
42
+ return (
43
+ < AuthContext . Provider value = { state } >
44
+ { state . status === 'pending' ? (
45
+ 'App ACP: Loading...'
46
+ ) : state . status === 'error' ? (
47
+ < div >
48
+ Oh no
49
+ < div >
50
+ < pre > { state . error . message } </ pre >
51
+ </ div >
52
+ </ div >
53
+ ) : (
54
+ children
55
+ ) }
56
+ </ AuthContext . Provider >
37
57
)
38
- } , )
39
-
40
- return (
41
- < AuthContext . Provider value = { state } >
42
- { state . status === 'pending' ? (
43
- 'App ACP: Loading...'
44
- ) : state . status === 'error' ? (
45
- < div >
46
- Oh no
47
- < div >
48
- < pre > { state . error . message } </ pre >
49
- </ div >
50
- </ div >
51
- ) : (
52
- children
53
- ) }
54
- </ AuthContext . Provider >
55
- )
56
58
}
57
59
58
60
function useAuthState ( ) {
59
- const state = React . useContext ( AuthContext )
60
- const isPending = state . status === 'pending'
61
- const isError = state . status === 'error'
62
- const isSuccess = state . status === 'success'
63
- const isAuthenticated = state . user && isSuccess
64
- return {
65
- ...state ,
66
- isPending,
67
- isError,
68
- isSuccess,
69
- isAuthenticated,
70
- }
61
+ const state = React . useContext ( AuthContext )
62
+ const isPending = state . status === 'pending'
63
+ const isError = state . status === 'error'
64
+ const isSuccess = state . status === 'success'
65
+ const isAuthenticated = state . user && isSuccess
66
+ return {
67
+ ...state ,
68
+ isPending,
69
+ isError,
70
+ isSuccess,
71
+ isAuthenticated,
72
+ }
71
73
}
72
74
73
75
74
76
function AuthenticatedApp ( ) {
75
-
76
- const { access_token, setToken } = useToken ( ) ;
77
77
78
- var decoded = jwt . decode ( access_token , { complete : true } ) ;
78
+ const { access_token, setToken} = useToken ( ) ;
79
+
80
+ let decoded = jwt . decode ( access_token , { complete : true } ) ;
79
81
80
82
const userRole = decoded ?. payload . role ;
81
- var expTime = decoded ?. payload . exp - Date . now ( ) / 1000 ;
83
+ let expTime = decoded ?. payload . exp - Date . now ( ) / 1000 ;
82
84
const jwtExpired = ! expTime || expTime <= 0
83
85
84
86
const popRefreshAlert = expTime > 0 && expTime < REFRESH_POPUP_TIME ; // Time in secs to pop up refresh dialog
85
87
86
- const hdr = userRole === 'admin' ? < AdminHeader /> : < Header /> // If we're going to display a header, which one?
88
+ const hdr = userRole === 'admin' ? < AdminHeader /> : < Header /> // If we're going to display a header, which one?
87
89
88
90
const history = useHistory ( ) ;
89
91
90
- return (
91
- < >
92
+ return (
92
93
< Router >
93
-
94
- { ! jwtExpired && hdr ? hdr : < LoginHeader /> /* Above-chosen header, or if logged out, no header */ }
95
-
96
- { popRefreshAlert && < RefreshDlg shouldOpen = { true } setToken = { setToken } /> } { /* Pop up the refresh dialog */ }
97
-
98
- { jwtExpired && < RefreshDlg shouldOpen = { false } setToken = { setToken } /> } { /* Too late, expired: close the dialog */ }
99
-
100
- < Route path = "/about" >
101
- < About />
102
- </ Route >
103
-
104
- { /* If not logged in, show login screen */
105
- ( ! access_token | jwtExpired ) ? < Login setToken = { setToken } /> : < Switch >
106
-
107
- < Route exact path = "/" >
108
- < HomePage access_token = { access_token } />
109
- </ Route >
110
94
95
+ { ! jwtExpired && hdr ? hdr : < LoginHeader /> /* Above-chosen header, or if logged out, no header */ }
96
+ { popRefreshAlert &&
97
+ < RefreshDlg shouldOpen = { true } setToken = { setToken } /> } { /* Pop up the refresh dialog */ }
111
98
112
- { /* If an admin, render Upload page */
113
- userRole === 'admin' &&
114
- < Route path = "/admin" >
115
- < Admin access_token = { access_token } />
116
- </ Route >
117
- }
99
+ { jwtExpired &&
100
+ < RefreshDlg shouldOpen = { false } setToken = { setToken } /> } { /* Too late, expired: close the dialog */ }
118
101
119
102
120
-
121
- < Route path = "/360view/search" >
122
- < Search360 access_token = { access_token } />
123
- </ Route >
124
-
125
- < Route path = "/360view/view" >
126
- < View360 access_token = { access_token } />
127
- </ Route >
128
-
129
- < Route path = "/check" >
130
- < Check access_token = { access_token } />
131
- </ Route >
132
-
133
- < Route path = "/ref" >
134
- < Refresh />
135
- </ Route >
136
-
137
- </ Switch >
103
+ { /* If not logged in, show login screen */
104
+ ( ! access_token | jwtExpired ) ?
105
+ < Switch >
106
+ < Route path = "/about" >
107
+ < About />
108
+ </ Route >
109
+ < Route >
110
+ < Login setToken = { setToken } />
111
+ </ Route >
112
+ </ Switch >
113
+
114
+ : < Switch >
115
+ < Route exact path = "/login" >
116
+ < Redirect to = "/" />
117
+ </ Route >
118
+ < Route exact path = "/" >
119
+ < HomePage access_token = { access_token } />
120
+ </ Route >
121
+ < Route path = "/about" >
122
+ < About />
123
+ </ Route >
124
+
125
+ { /* If an admin, render Upload page */
126
+ userRole === 'admin' &&
127
+ < Route path = "/admin" >
128
+ < Admin access_token = { access_token } />
129
+ </ Route >
130
+ }
131
+
132
+
133
+ < Route path = "/360view/search" >
134
+ < Search360 access_token = { access_token } />
135
+ </ Route >
136
+
137
+ < Route path = "/360view/view" >
138
+ < View360 access_token = { access_token } />
139
+ </ Route >
140
+
141
+ < Route path = "/check" >
142
+ < Check access_token = { access_token } />
143
+ </ Route >
144
+
145
+ < Route path = "/ref" >
146
+ < Refresh />
147
+ </ Route >
148
+
149
+ </ Switch >
138
150
}
139
151
140
152
</ Router >
141
- </ >
142
- )
153
+ )
143
154
}
144
155
145
156
146
157
function Home ( ) {
147
- const { user} = useAuthState ( )
148
- /*eslint no-unused-vars: ["warn", { "varsIgnorePattern": "access_token" }]*/
149
- const { access_token, setToken } = useToken ( ) ;
150
- return user ? < AuthenticatedApp /> : < Login setToken = { setToken } />
158
+ const { user} = useAuthState ( )
159
+ /*eslint no-unused-vars: ["warn", { "varsIgnorePattern": "access_token" }]*/
160
+ const { access_token, setToken} = useToken ( ) ;
161
+ return user ? < AuthenticatedApp /> : < Login setToken = { setToken } />
151
162
}
152
163
153
164
function App ( ) {
154
165
155
- return (
156
- < AuthProvider >
157
- < div >
158
- < Home />
159
- </ div >
160
- </ AuthProvider >
161
- )
166
+ return (
167
+ < AuthProvider >
168
+ < div >
169
+ < Home />
170
+ </ div >
171
+ </ AuthProvider >
172
+ )
162
173
}
163
174
164
- export default App
175
+ export default App
0 commit comments