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.
 
 
 
 
 

87 lines
1.8 KiB

import 'https://deno.land/x/dotenv@v2.0.0/load.ts'
import Ask from 'https://deno.land/x/ask@1.0.6/mod.ts'
import { Database } from 'https://deno.land/x/aloedb@0.9.0/mod.ts'
import { UserSchema } from './src/stores/user.ts'
import * as bcrypt from 'https://deno.land/x/bcrypt@v0.2.4/mod.ts'
// create ask for promt
const ask = new Ask()
const user = <UserSchema>{ is_admin: false };
// getting email for user
const { email } = await ask.input({
name: 'email',
message: 'Email:',
validate: (value) => {
return (value) ? true : false
}
})
user.email = email
// getting password for user
const { password } = await ask.input({
name: 'password',
message: 'Password:',
validate: (value) => {
return (value) ? true : false
}
})
const { passwordRepeat } = await ask.input({
name: 'passwordRepeat',
message: 'Repeat Password:',
validate: (value) => {
let result = false
if (value === password) {
result = true
} else {
console.log('Password not match')
}
return result
}
})
user.password = password
// is admin
const { isAdmin } = await ask.input({
name: 'admin',
message: 'Admin (n):',
validate: (value) => {
let result = false
if (value === 'n' || value === 'y') {
result = true
} else {
console.log('Ony (y)es and (n)o allowed')
}
return result
}
})
user.is_admin = isAdmin
// getting schema for users
const db = new Database<UserSchema>('./storage/database/users.json')
// search for user by email
const userExists = await db.findOne({ email: email })
if (userExists) {
console.log('User already exists')
Deno.exit(1);
}
// hash password
user.password = await bcrypt.hash(user.password);
await db.insertOne(user)