The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
grafana/public/app/features/profile/ChangePasswordForm.tsx

123 lines
4.4 KiB

import { css } from '@emotion/css';
import React from 'react';
import { Button, Field, Form, HorizontalGroup, LinkButton } from '@grafana/ui';
import config from 'app/core/config';
import { t, Trans } from 'app/core/internationalization';
import { UserDTO } from 'app/types';
import { PasswordField } from '../../core/components/PasswordField/PasswordField';
import { ChangePasswordFields } from './types';
export interface Props {
user: UserDTO;
isSaving: boolean;
onChangePassword: (payload: ChangePasswordFields) => void;
}
export const ChangePasswordForm = ({ user, onChangePassword, isSaving }: Props) => {
const { disableLoginForm } = config;
const authSource = user.authLabels?.length && user.authLabels[0];
if (authSource === 'LDAP' || authSource === 'Auth Proxy') {
return (
<p>
<Trans i18nKey="profile.change-password.ldap-auth-proxy-message">
You cannot change password when signed in with LDAP or auth proxy.
</Trans>
</p>
);
}
if (authSource && disableLoginForm) {
return (
<p>
<Trans i18nKey="profile.change-password.cannot-change-password-message">Password cannot be changed here.</Trans>
</p>
);
}
return (
<div
className={css`
max-width: 400px;
`}
>
<Form onSubmit={onChangePassword}>
{({ register, errors, getValues }) => {
return (
<>
<Field
label={t('profile.change-password.old-password-label', 'Old password')}
invalid={!!errors.oldPassword}
error={errors?.oldPassword?.message}
>
<PasswordField
id="current-password"
autoComplete="current-password"
{...register('oldPassword', {
required: t('profile.change-password.old-password-required', 'Old password is required'),
})}
/>
</Field>
<Field
label={t('profile.change-password.new-password-label', 'New password')}
invalid={!!errors.newPassword}
error={errors?.newPassword?.message}
>
<PasswordField
id="new-password"
autoComplete="new-password"
Grafana-UI: Update React Hook Form to v7 (#33328) * Update hook form * Update Form component * Update ChangePassword.tsx * Update custom types * Update SaveDashboardForm * Update form story * Update FieldArray.story.tsx * Bump hook form version * Update typescript to v4.2.4 * Update ForgottenPassword.tsx * Update LoginForm.tsx * Update SignupPage.tsx * Update VerifyEmail.tsx * Update AdminEditOrgPage.tsx * Update UserCreatePage.tsx * Update BasicSettings.tsx * Update NotificationChannelForm.tsx * Update NotificationChannelOptions.tsx * Update NotificationSettings.tsx * Update OptionElement.tsx * Update AlertRuleForm.tsx * Update AlertTypeStep.tsx * Update AnnotationsField.tsx * Update ConditionField.tsx * Update ConditionsStep.tsx * Update GroupAndNamespaceFields.tsx * Update LabelsField.tsx * Update QueryStep.tsx * Update RowOptionsForm.tsx * Update SaveDashboardAsForm.tsx * Update NewDashboardsFolder.tsx * Update ImportDashboardForm.tsx * Update DashboardImportPage.tsx * Update NewOrgPage.tsx * Update OrgProfile.tsx * Update UserInviteForm.tsx * Update PlaylistForm.tsx * Update ChangePasswordForm.tsx * Update UserProfileEditForm.tsx * Update TeamSettings.tsx * Update SignupInvited.tsx * Expose setValue from the Form * Update typescript to v4.2.4 * Remove ref from field props * Fix tests * Revert TS update * Use exact version * Update latest batch of changes * Reduce the number of strict TS errors * Fix defaults * more type error fixes * Update CreateTeam * fix folder picker in rule form * fixes for hook form 7 * Update docs Co-authored-by: Domas <domasx2@gmail.com>
4 years ago
{...register('newPassword', {
required: t('profile.change-password.new-password-required', 'New password is required'),
validate: {
confirm: (v) =>
v === getValues().confirmNew ||
t('profile.change-password.passwords-must-match', 'Passwords must match'),
old: (v) =>
v !== getValues().oldPassword ||
t(
'profile.change-password.new-password-same-as-old',
"New password can't be the same as the old one."
),
},
})}
/>
</Field>
<Field
label={t('profile.change-password.confirm-password-label', 'Confirm password')}
invalid={!!errors.confirmNew}
error={errors?.confirmNew?.message}
>
<PasswordField
id="confirm-new-password"
autoComplete="new-password"
Grafana-UI: Update React Hook Form to v7 (#33328) * Update hook form * Update Form component * Update ChangePassword.tsx * Update custom types * Update SaveDashboardForm * Update form story * Update FieldArray.story.tsx * Bump hook form version * Update typescript to v4.2.4 * Update ForgottenPassword.tsx * Update LoginForm.tsx * Update SignupPage.tsx * Update VerifyEmail.tsx * Update AdminEditOrgPage.tsx * Update UserCreatePage.tsx * Update BasicSettings.tsx * Update NotificationChannelForm.tsx * Update NotificationChannelOptions.tsx * Update NotificationSettings.tsx * Update OptionElement.tsx * Update AlertRuleForm.tsx * Update AlertTypeStep.tsx * Update AnnotationsField.tsx * Update ConditionField.tsx * Update ConditionsStep.tsx * Update GroupAndNamespaceFields.tsx * Update LabelsField.tsx * Update QueryStep.tsx * Update RowOptionsForm.tsx * Update SaveDashboardAsForm.tsx * Update NewDashboardsFolder.tsx * Update ImportDashboardForm.tsx * Update DashboardImportPage.tsx * Update NewOrgPage.tsx * Update OrgProfile.tsx * Update UserInviteForm.tsx * Update PlaylistForm.tsx * Update ChangePasswordForm.tsx * Update UserProfileEditForm.tsx * Update TeamSettings.tsx * Update SignupInvited.tsx * Expose setValue from the Form * Update typescript to v4.2.4 * Remove ref from field props * Fix tests * Revert TS update * Use exact version * Update latest batch of changes * Reduce the number of strict TS errors * Fix defaults * more type error fixes * Update CreateTeam * fix folder picker in rule form * fixes for hook form 7 * Update docs Co-authored-by: Domas <domasx2@gmail.com>
4 years ago
{...register('confirmNew', {
required: t(
'profile.change-password.confirm-password-required',
'New password confirmation is required'
),
validate: (v) =>
v === getValues().newPassword ||
t('profile.change-password.passwords-must-match', 'Passwords must match'),
})}
/>
</Field>
<HorizontalGroup>
<Button variant="primary" disabled={isSaving} type="submit">
<Trans i18nKey="profile.change-password.change-password-button">Change Password</Trans>
</Button>
<LinkButton variant="secondary" href={`${config.appSubUrl}/profile`} fill="outline">
<Trans i18nKey="profile.change-password.cancel-button">Cancel</Trans>
</LinkButton>
</HorizontalGroup>
</>
);
}}
</Form>
</div>
);
};