fix: replace client and username with email
fix: error handling in lamassu-register
This commit is contained in:
parent
5ff676553e
commit
4a630f0f53
4 changed files with 30 additions and 23 deletions
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
const { asyncLocalStorage, defaultStore } = require('../lib/async-storage')
|
||||
const userManagement = require('../lib/new-admin/graphql/modules/userManagement')
|
||||
const authErrors = require('../lib/new-admin/graphql/errors/authentication')
|
||||
const options = require('../lib/options')
|
||||
|
||||
const name = process.argv[2]
|
||||
|
|
@ -14,29 +15,25 @@ if (!domain) {
|
|||
}
|
||||
|
||||
if (!name || !role) {
|
||||
console.log('Usage: lamassu-register <username> <role>')
|
||||
console.log('Usage: lamassu-register <email> <role>')
|
||||
console.log('<role> must be \'user\' or \'superuser\'')
|
||||
process.exit(2)
|
||||
}
|
||||
|
||||
const emailRegex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
|
||||
|
||||
if (!emailRegex.test(name)) {
|
||||
console.log('Usage: <name> should be in an email format')
|
||||
console.log('Usage: <email> must be in an email format')
|
||||
process.exit(2)
|
||||
}
|
||||
|
||||
if (role !== 'user' && role !== 'superuser') {
|
||||
console.log('Usage: <role> has two possible values: user | superuser')
|
||||
console.log('Usage: <role> must be \'user\' or \'superuser\'')
|
||||
process.exit(2)
|
||||
}
|
||||
|
||||
asyncLocalStorage.run(defaultStore(), () => {
|
||||
userManagement.createRegisterToken(name, role).then(token => {
|
||||
if (!token) {
|
||||
console.log(`A user named ${name} already exists!`)
|
||||
process.exit(2)
|
||||
}
|
||||
|
||||
if (domain === 'localhost') {
|
||||
console.log(`https://${domain}:3001/register?t=${token.token}`)
|
||||
} else {
|
||||
|
|
@ -45,6 +42,12 @@ asyncLocalStorage.run(defaultStore(), () => {
|
|||
|
||||
process.exit(0)
|
||||
}).catch(err => {
|
||||
|
||||
if (err instanceof authErrors.UserAlreadyExistsError){
|
||||
console.log(`A user with email ${name} already exists!`)
|
||||
process.exit(2)
|
||||
}
|
||||
|
||||
console.log('Error: %s', err)
|
||||
process.exit(3)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -46,23 +46,24 @@ const GET_USER_DATA = gql`
|
|||
`
|
||||
|
||||
const validationSchema = Yup.object().shape({
|
||||
client: Yup.string()
|
||||
.required('Client field is required!')
|
||||
.email('Username field should be in an email format!'),
|
||||
email: Yup.string()
|
||||
.label('Email')
|
||||
.required()
|
||||
.email(),
|
||||
password: Yup.string().required('Password field is required'),
|
||||
rememberMe: Yup.boolean()
|
||||
})
|
||||
|
||||
const initialValues = {
|
||||
client: '',
|
||||
email: '',
|
||||
password: '',
|
||||
rememberMe: false
|
||||
}
|
||||
|
||||
const getErrorMsg = (formikErrors, formikTouched, mutationError) => {
|
||||
if (!formikErrors || !formikTouched) return null
|
||||
if (mutationError) return 'Invalid login/password combination'
|
||||
if (formikErrors.client && formikTouched.client) return formikErrors.client
|
||||
if (mutationError) return 'Invalid email/password combination'
|
||||
if (formikErrors.email && formikTouched.email) return formikErrors.email
|
||||
if (formikErrors.password && formikTouched.password)
|
||||
return formikErrors.password
|
||||
return null
|
||||
|
|
@ -142,13 +143,13 @@ const LoginState = ({ state, dispatch, strategy }) => {
|
|||
validationSchema={validationSchema}
|
||||
initialValues={initialValues}
|
||||
onSubmit={values =>
|
||||
submitLogin(values.client, values.password, values.rememberMe)
|
||||
submitLogin(values.email, values.password, values.rememberMe)
|
||||
}>
|
||||
{({ errors, touched }) => (
|
||||
<Form id="login-form">
|
||||
<Field
|
||||
name="client"
|
||||
label="Client"
|
||||
name="email"
|
||||
label="Email"
|
||||
size="lg"
|
||||
component={TextInput}
|
||||
fullWidth
|
||||
|
|
|
|||
|
|
@ -210,6 +210,10 @@ const Register = () => {
|
|||
{!loading && state.result === 'failure' && (
|
||||
<>
|
||||
<Label3>Link has expired</Label3>
|
||||
<Label3>
|
||||
To obtain a new link, run the command{' '}
|
||||
<strong>lamassu-register</strong> in your server’s terminal.
|
||||
</Label3>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -140,14 +140,13 @@ const Setup2FAState = ({ state, dispatch }) => {
|
|||
<>
|
||||
<div className={classes.infoWrapper}>
|
||||
<Label3 className={classes.info2}>
|
||||
We detected that this account does not have its two-factor
|
||||
authentication enabled. In order to protect the resources in the
|
||||
system, a two-factor authentication is enforced.
|
||||
This account does not yet have two-factor authentication enabled. To
|
||||
secure the admin, two-factor authentication is required.
|
||||
</Label3>
|
||||
<Label3 className={classes.info2}>
|
||||
To finish this process, please scan the following QR code or insert
|
||||
the secret further below on an authentication app of your choice,
|
||||
such as Google Authenticator or Authy.
|
||||
To complete the registration process, scan the following QR code or
|
||||
insert the secret below on a 2FA app, such as Google Authenticator
|
||||
or AndOTP.
|
||||
</Label3>
|
||||
</div>
|
||||
<div className={classes.qrCodeWrapper}>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue