This should have been taken care of when onboarding your account, but due to a earlier
bug in the registration, a small subsection of accounts ended up in this state.
Please complete the form to give your consent, that may resolve the matter.
If it does not, please contact support so we may help you.
Consent & Privacy
)
}
export const RoleBlock = ({ children, user = false, Link = false }) => {
if (!Link) Link = DefaultLink
let requiredRole = 'admin'
if (user) requiredRole = user
const { account, setAccount, token, admin, stopImpersonating, signOut } = useAccount()
const backend = useBackend()
const [ready, setReady] = useState(false)
const [impersonating, setImpersonating] = useState(false)
const [error, setError] = useState(false)
const [refreshCount, setRefreshCount] = useState(0)
/*
* Avoid hydration errors
*/
useEffect(() => {
if (admin?.account?.username && account?.username && !impersonating.admin)
setImpersonating({
admin: admin.account.username,
user: account.username,
})
}, [admin])
useEffect(() => {
const verifyUser = async () => {
if (!error) {
const [status, data] = await backend.ping()
if (status === 200 && data.result === 'success') {
// Refresh account in local storage
setAccount({
...account,
...data.account,
bestBefore: Date.now() + 3600000,
})
} else if (status === 451) setError('consentLacking')
else {
console.log({ status, data })
if (data?.error?.error) setError(data.error.error)
else signOut()
}
setReady(true)
}
}
// Don't hammer the backend. Check once per hour.
if (token && !error && (!account.bestBefore || account.bestBefore < Date.now())) verifyUser()
setReady(true)
}, [admin, refreshCount, signOut])
const refresh = () => {
setRefreshCount(refreshCount + 1)
setError(false)
}
if (!ready)
const banner = impersonating ? (
Hi {impersonating.admin}, you are currently impersonating {impersonating.user}