Handle token renewal and expiration
This commit is contained in:
parent
c6f7830d9d
commit
133d0de084
@ -160,7 +160,20 @@ impl FromRequest for AuthExtractor {
|
|||||||
));
|
));
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO : update token last activity & expiration
|
// Update last use (if needed)
|
||||||
|
if token.shall_update_time_used() {
|
||||||
|
if let Err(e) = tokens_service::update_time_used(&token).await {
|
||||||
|
log::error!("Failed to refresh last usage of token! {}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle tokens expiration
|
||||||
|
if token.is_expired() {
|
||||||
|
log::error!("Attempted to use expired token! {:?}", token);
|
||||||
|
return Err(actix_web::error::ErrorBadRequest(
|
||||||
|
"Token has expired!",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
return Ok(Self {
|
return Ok(Self {
|
||||||
method: AuthenticatedMethod::Token(token),
|
method: AuthenticatedMethod::Token(token),
|
||||||
|
@ -82,7 +82,7 @@ export function CreateTokenDialog(p: {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Dialog open={p.open} onClose={cancel}>
|
<Dialog open={p.open} onClose={cancel}>
|
||||||
<DialogTitle>Nouveau jeton</DialogTitle>
|
<DialogTitle>New token</DialogTitle>
|
||||||
<DialogContent>
|
<DialogContent>
|
||||||
<TextInput
|
<TextInput
|
||||||
editable
|
editable
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import DeleteIcon from "@mui/icons-material/DeleteOutlined";
|
import DeleteIcon from "@mui/icons-material/DeleteOutlined";
|
||||||
import { Alert, AlertTitle, Button } from "@mui/material";
|
import { Alert, AlertTitle, Button, IconButton, Tooltip } from "@mui/material";
|
||||||
import {
|
import {
|
||||||
DataGrid,
|
DataGrid,
|
||||||
GridActionsCellItem,
|
GridActionsCellItem,
|
||||||
@ -18,6 +18,8 @@ import { MoneyMgrWebRouteContainer } from "../widgets/MoneyMgrWebRouteContainer"
|
|||||||
import { TimeWidget } from "../widgets/TimeWidget";
|
import { TimeWidget } from "../widgets/TimeWidget";
|
||||||
import { QRCodeCanvas } from "qrcode.react";
|
import { QRCodeCanvas } from "qrcode.react";
|
||||||
import { APIClient } from "../api/ApiClient";
|
import { APIClient } from "../api/ApiClient";
|
||||||
|
import AddIcon from "@mui/icons-material/Add";
|
||||||
|
import RefreshIcon from "@mui/icons-material/Refresh";
|
||||||
|
|
||||||
export function TokensRoute(): React.ReactElement {
|
export function TokensRoute(): React.ReactElement {
|
||||||
const count = React.useRef(0);
|
const count = React.useRef(0);
|
||||||
@ -138,11 +140,11 @@ function TokensRouteInner(p: {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: "last_used",
|
field: "time_used",
|
||||||
headerName: "Last usage",
|
headerName: "Last usage",
|
||||||
flex: 3,
|
flex: 3,
|
||||||
renderCell(params) {
|
renderCell(params) {
|
||||||
return <TimeWidget time={params.row.last_used} />;
|
return <TimeWidget time={params.row.time_used} />;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -211,7 +213,20 @@ function TokensRouteInner(p: {
|
|||||||
return (
|
return (
|
||||||
<MoneyMgrWebRouteContainer
|
<MoneyMgrWebRouteContainer
|
||||||
label="API Tokens"
|
label="API Tokens"
|
||||||
actions={<Button onClick={p.onRequestCreateToken}>New</Button>}
|
actions={
|
||||||
|
<span>
|
||||||
|
<Tooltip title="Create new token">
|
||||||
|
<IconButton onClick={p.onRequestCreateToken}>
|
||||||
|
<AddIcon />
|
||||||
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip title="Refresh table">
|
||||||
|
<IconButton onClick={p.onReload}>
|
||||||
|
<RefreshIcon />
|
||||||
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
|
</span>
|
||||||
|
}
|
||||||
>
|
>
|
||||||
{p.createdToken && <CreatedToken token={p.createdToken} />}
|
{p.createdToken && <CreatedToken token={p.createdToken} />}
|
||||||
<DataGrid
|
<DataGrid
|
||||||
|
Loading…
x
Reference in New Issue
Block a user