diff --git a/scripts/data/users.js b/scripts/data/users.js new file mode 100644 index 0000000000000000000000000000000000000000..f678dc4d10096167762ac8c30bd43624922de1ff --- /dev/null +++ b/scripts/data/users.js @@ -0,0 +1,55 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const mongoose = require('mongoose'); + +module.exports = { + data: [ + { + pendingStructuresLink: [], + structuresLink: [ + mongoose.Types.ObjectId('60059cf7dfb2ac4b00733db0'), + mongoose.Types.ObjectId('6001a48e16b08100062e4180'), + ], + phone: '06 06 06 06 06', + newEmail: null, + changeEmailToken: null, + role: 1, + resetPasswordToken: null, + surname: 'ADMIN', + name: 'Admin', + validationToken: null, + emailVerified: true, + email: 'admin@admin.com', + structureOutdatedMailSent: [], + }, + { + structureOutdatedMailSent: [], + pendingStructuresLink: [], + structuresLink: [mongoose.Types.ObjectId('6001a48e16b08100062e4180')], + newEmail: null, + changeEmailToken: null, + role: 0, + resetPasswordToken: null, + validationToken: null, + emailVerified: true, + email: 'paula.dubois@mii.com', + name: 'Paula', + surname: 'DUBOIS', + phone: '06 07 08 09 10', + }, + { + structureOutdatedMailSent: [], + pendingStructuresLink: [], + structuresLink: [mongoose.Types.ObjectId('6001a48e16b08100062e4180')], + newEmail: null, + changeEmailToken: null, + role: 0, + resetPasswordToken: null, + validationToken: null, + emailVerified: true, + email: 'jp@test.com', + name: 'Jean-Paul', + surname: 'DESCHAMPS', + phone: '06 11 11 11 11', + }, + ], +}; diff --git a/scripts/init-db.js b/scripts/init-db.js new file mode 100644 index 0000000000000000000000000000000000000000..1389a9fad1f1a2f581404c1a3b527a844973bc70 --- /dev/null +++ b/scripts/init-db.js @@ -0,0 +1,68 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const mongoose = require('mongoose'); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const userData = require('./data/users'); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const bcrypt = require('bcrypt'); +// eslint-disable-next-line @typescript-eslint/no-var-requires +require('dotenv').config({ path: '../.env' }); + +/* connect to the database */ +const param = + 'mongodb://' + + process.env.MONGO_NON_ROOT_USERNAME + + ':' + + process.env.MONGO_NON_ROOT_PASSWORD + + '@' + + process.env.MONGO_DB_HOST_AND_PORT + + '/ram'; +mongoose.connect(param, { useNewUrlParser: true, useUnifiedTopology: true }).catch((error) => console.log(error)); +// Make Mongoose use `findOneAndUpdate()`. Note that this option is `true` +// by default, you need to set it to false. +mongoose.set('useFindAndModify', false); + +function hashPassword() { + return bcrypt.hashSync(process.env.USER_PWD, process.env.SALT); +} + +// define Schema +var usersSchema = mongoose.Schema({ + name: String, + surname: String, + email: String, + emailVerified: Boolean, + validationToken: String, + resetPasswordToken: String, + role: Number, + changeEmailToken: String, + newEmail: String, + structuresLink: [], + structureOutdatedMailSent: [], + pendingStructuresLink: [], + password: String, + phone: String, +}); + +// compile schema to model +var User = mongoose.model('Users', usersSchema); + +/* drop users collections */ +mongoose.connection.dropCollection('users', function (err) { + /* show messages */ + if (err) { + if (err.code === 26) console.log('-- Users collection does not exists --'); + else throw err; + } else console.log('-- Users collection dropped --'); + + // Init passsword + console.log('-- Users password encryption based on .env --'); + userData.data.forEach((user) => { + user.password = hashPassword(); + }); + // save model to database + User.create(userData.data, function (err, user) { + if (err) return console.error(err); + console.log('-- Users collection initialized --'); + process.exit(1); + }); +}); diff --git a/template.env b/template.env index fa2c9d0ae8b15dad61e8e27bf04059602c8c597c..54a211a951c1453d4215e6d28f3093d7026c279a 100644 --- a/template.env +++ b/template.env @@ -16,3 +16,4 @@ MAIL_TOKEN=<API token> APTIC_TOKEN=<APTIC API TOKEN> GHOST_PORT=<ghost port> GHOST_DB_PASSWORD=<ghost db password> +USER_PWD=<test user password>