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.

76 lines
1.6 KiB

import mysql from 'mysql2/promise'
import { input, password } from '@inquirer/prompts'
import generator from 'generate-password'
const user = {
name: undefined,
password: undefined
}
user.name = await input({
message: 'Root:',
async validate(value) {
if (!value) {
return 'Required!'
}
return true
}
})
user.password = await password({
message: 'Password:',
mask: '*',
async validate(value) {
if (!value) {
return 'Required!'
}
return true
}
})
// create connection, generate name for db and user, and generate password
const connection = await mysql.createConnection({
host: 'localhost',
user: user.name,
password: user.password
})
const database = {
name: 'db',
user: 'u'
}
database.name += generator.generate({
length: 15,
numbers: true
})
database.user += generator.generate({
length: 15,
numbers: true
})
database.password = generator.generate({
length: 30,
numbers: true
})
// create database
await connection.query('CREATE DATABASE ' + database.name + ' DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci')
await connection.query("CREATE USER " + database.user + "@'localhost' IDENTIFIED BY '" + database.password + "'")
await connection.query("CREATE USER " + database.user + "@'%' IDENTIFIED BY '" + database.password + "'")
await connection.query("GRANT ALL PRIVILEGES ON " + database.name + ".* TO " + database.user + "@localhost")
await connection.query("FLUSH PRIVILEGES")
connection.destroy()
// show name, user and passwort
console.log(database.name)
console.log(database.user)
console.log(database.password)