mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Auth: Add expiry date for service accounts access tokens (#58885)
* Add new configuration option for SA tokens * Add new expiry date option to frontend components * Add backend validation Co-authored-by: Gabriel MABILLE <gamab@users.noreply.github.com>
This commit is contained in:
@@ -3,6 +3,7 @@ import React, { useEffect, useState } from 'react';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
import { GrafanaTheme2 } from '@grafana/data';
|
||||
import { config } from '@grafana/runtime';
|
||||
import {
|
||||
Button,
|
||||
ClipboardButton,
|
||||
@@ -33,12 +34,18 @@ interface Props {
|
||||
}
|
||||
|
||||
export const CreateTokenModal = ({ isOpen, token, serviceAccountLogin, onCreateToken, onClose }: Props) => {
|
||||
let tomorrow = new Date();
|
||||
const tomorrow = new Date();
|
||||
tomorrow.setDate(tomorrow.getDate() + 1);
|
||||
|
||||
const maxExpirationDate = new Date();
|
||||
if (config.tokenExpirationDayLimit !== undefined) {
|
||||
maxExpirationDate.setDate(maxExpirationDate.getDate() + config.tokenExpirationDayLimit + 1);
|
||||
}
|
||||
const defaultExpirationDate = config.tokenExpirationDayLimit !== undefined && config.tokenExpirationDayLimit > 0;
|
||||
|
||||
const [defaultTokenName, setDefaultTokenName] = useState('');
|
||||
const [newTokenName, setNewTokenName] = useState('');
|
||||
const [isWithExpirationDate, setIsWithExpirationDate] = useState(false);
|
||||
const [isWithExpirationDate, setIsWithExpirationDate] = useState(defaultExpirationDate);
|
||||
const [newTokenExpirationDate, setNewTokenExpirationDate] = useState<Date | string>(tomorrow);
|
||||
const [isExpirationDateValid, setIsExpirationDateValid] = useState(newTokenExpirationDate !== '');
|
||||
const styles = useStyles2(getStyles);
|
||||
@@ -66,7 +73,7 @@ export const CreateTokenModal = ({ isOpen, token, serviceAccountLogin, onCreateT
|
||||
const onCloseInternal = () => {
|
||||
setNewTokenName('');
|
||||
setDefaultTokenName('');
|
||||
setIsWithExpirationDate(false);
|
||||
setIsWithExpirationDate(defaultExpirationDate);
|
||||
setNewTokenExpirationDate(tomorrow);
|
||||
setIsExpirationDateValid(newTokenExpirationDate !== '');
|
||||
onClose();
|
||||
@@ -100,14 +107,16 @@ export const CreateTokenModal = ({ isOpen, token, serviceAccountLogin, onCreateT
|
||||
}}
|
||||
/>
|
||||
</Field>
|
||||
<Field label="Expiration">
|
||||
<RadioButtonGroup
|
||||
options={EXPIRATION_OPTIONS}
|
||||
value={isWithExpirationDate}
|
||||
onChange={setIsWithExpirationDate}
|
||||
size="md"
|
||||
/>
|
||||
</Field>
|
||||
{!isWithExpirationDate && (
|
||||
<Field label="Expiration">
|
||||
<RadioButtonGroup
|
||||
options={EXPIRATION_OPTIONS}
|
||||
value={isWithExpirationDate}
|
||||
onChange={setIsWithExpirationDate}
|
||||
size="md"
|
||||
/>
|
||||
</Field>
|
||||
)}
|
||||
{isWithExpirationDate && (
|
||||
<Field label="Expiration date">
|
||||
<DatePickerWithInput
|
||||
@@ -115,6 +124,7 @@ export const CreateTokenModal = ({ isOpen, token, serviceAccountLogin, onCreateT
|
||||
value={newTokenExpirationDate}
|
||||
placeholder=""
|
||||
minDate={tomorrow}
|
||||
maxDate={maxExpirationDate}
|
||||
/>
|
||||
</Field>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user