84 lines
2.2 KiB
TypeScript
84 lines
2.2 KiB
TypeScript
import { useEffect } from 'react'
|
|
import { useSelector } from 'react-redux'
|
|
import { Navigate, Route, Routes } from 'react-router-dom'
|
|
import { AuthController, NostrController } from './controllers'
|
|
import { MainLayout } from './layouts/Main'
|
|
import {
|
|
appPrivateRoutes,
|
|
appPublicRoutes,
|
|
privateRoutes,
|
|
publicRoutes
|
|
} from './routes'
|
|
import { State } from './store/rootReducer'
|
|
import { getNsecBunkerDelegatedKey, saveNsecBunkerDelegatedKey } from './utils'
|
|
|
|
const App = () => {
|
|
const authState = useSelector((state: State) => state.auth)
|
|
|
|
useEffect(() => {
|
|
generateBunkerDelegatedKey()
|
|
|
|
const authController = new AuthController()
|
|
authController.checkSession()
|
|
}, [])
|
|
|
|
const generateBunkerDelegatedKey = () => {
|
|
const existingKey = getNsecBunkerDelegatedKey()
|
|
|
|
if (!existingKey) {
|
|
const nostrController = NostrController.getInstance()
|
|
const newDelegatedKey = nostrController.generateDelegatedKey()
|
|
|
|
saveNsecBunkerDelegatedKey(newDelegatedKey)
|
|
}
|
|
}
|
|
|
|
const handleRootRedirect = () => {
|
|
if (authState.loggedIn) return appPrivateRoutes.homePage
|
|
const callbackPathEncoded = btoa(
|
|
window.location.href.split(`${window.location.origin}/#`)[1]
|
|
)
|
|
return `${appPublicRoutes.login}?callbackPath=${callbackPathEncoded}`
|
|
}
|
|
|
|
return (
|
|
<Routes>
|
|
<Route element={<MainLayout />}>
|
|
{authState?.loggedIn &&
|
|
privateRoutes.map((route, index) => (
|
|
<Route
|
|
key={route.path + index}
|
|
path={route.path}
|
|
element={route.element}
|
|
/>
|
|
))}
|
|
{publicRoutes.map((route, index) => {
|
|
if (authState?.loggedIn) {
|
|
if (!route.hiddenWhenLoggedIn) {
|
|
return (
|
|
<Route
|
|
key={route.path + index}
|
|
path={route.path}
|
|
element={route.element}
|
|
/>
|
|
)
|
|
}
|
|
} else {
|
|
return (
|
|
<Route
|
|
key={route.path + index}
|
|
path={route.path}
|
|
element={route.element}
|
|
/>
|
|
)
|
|
}
|
|
})}
|
|
|
|
<Route path="*" element={<Navigate to={handleRootRedirect()} />} />
|
|
</Route>
|
|
</Routes>
|
|
)
|
|
}
|
|
|
|
export default App
|