import { useState } from 'react'; import { Form, FormGroup, FormHelperText, HelperText, HelperTextItem, TextInput } from '@patternfly/react-core'; import RhUiErrorFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-error-fill-icon'; import RhUiWarningFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-warning-fill-icon'; import RhUiCheckCircleFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-check-circle-fill-icon'; export const PasswordStrengthDemo: React.FunctionComponent = () => { type HelperTextItemVariant = 'default' | 'indeterminate' | 'warning' | 'success' | 'error'; interface PassStrength { variant: HelperTextItemVariant; icon: React.JSX.Element; text: string; } const [password, setPassword] = useState(''); const [ruleLength, setRuleLength] = useState('indeterminate'); const [ruleContent, setRuleContent] = useState('indeterminate'); const [ruleCharacters, setRuleCharacters] = useState('indeterminate'); const [passStrength, setPassStrength] = useState({ variant: 'error', icon: , text: 'Weak' }); const handlePasswordInput = (_event: any, password: string) => { setPassword(password); validate(password); }; const validate = (password: string) => { if (password === '') { setRuleLength('indeterminate'); setRuleContent('indeterminate'); setRuleCharacters('indeterminate'); return; } if (password.length < 14) { setRuleLength('error'); } else { setRuleLength('success'); } if (/redhat/gi.test(password)) { setRuleContent('error'); } else { setRuleContent('success'); } let rulesCount = 0; let strCount = 0; if (/[a-z]/g.test(password)) { rulesCount++; } if (/[A-Z]/g.test(password)) { strCount += password.match(/[A-Z]/g).length; rulesCount++; } if (/\d/g.test(password)) { strCount += password.match(/\d/g).length; rulesCount++; } if (/\W/g.test(password)) { strCount += password.match(/\W/g).length; rulesCount++; } if (rulesCount < 3) { setRuleCharacters('error'); } else { setRuleCharacters('success'); } if (strCount < 3) { setPassStrength({ variant: 'error', icon: , text: 'Weak' }); } else if (strCount < 5) { setPassStrength({ variant: 'warning', icon: , text: 'Medium' }); } else { setPassStrength({ variant: 'success', icon: , text: 'Strong' }); } }; const passStrLabel = ( {passStrength.text} ); return (
Must be at least 14 characters Cannot contain the word "redhat" Must include at least 3 of the following: lowercase letter, uppercase letters, numbers, symbols
); };