diff --git a/components/Home.vue b/components/Home.vue index 9dbb51ce..511ccc39 100644 --- a/components/Home.vue +++ b/components/Home.vue @@ -5,7 +5,7 @@ el-button.top.d-block.d-sm-none(icon='el-icon-top' circle type='primary' plain) a.totop(name='totop') //- el-backtop(target='#home') - no-ssr + client-only Calendar .row.m-0 diff --git a/components/Search.vue b/components/Search.vue index d28f4199..a9d613ca 100644 --- a/components/Search.vue +++ b/components/Search.vue @@ -20,7 +20,7 @@ inactive-color='lightgreen' v-model='showPast' ) - no-ssr + client-only el-select.search(v-model='filter' multiple filterable collapse-tags default-first-option diff --git a/components/admin/Places.vue b/components/admin/Places.vue index b465394d..33aacabe 100644 --- a/components/admin/Places.vue +++ b/components/admin/Places.vue @@ -18,7 +18,7 @@ type='success' @click='place = data.row') {{$t('common.edit')}} - no-ssr + client-only el-pagination(:page-size='perPage' :currentPage.sync='placePage' :total='places.length') diff --git a/plugins/element-ui.js b/plugins/element-ui.js index 3f0ec960..8dc97ea1 100644 --- a/plugins/element-ui.js +++ b/plugins/element-ui.js @@ -7,7 +7,8 @@ import locale from 'element-ui/lib/locale' const locales = { it: require('element-ui/lib/locale/lang/it'), - en: require('element-ui/lib/locale/lang/en') + en: require('element-ui/lib/locale/lang/en'), + es: require('element-ui/lib/locale/lang/es') } export default ({ app, store }) => { diff --git a/plugins/filters.js b/plugins/filters.js index 0a0ca7fd..9c9187cf 100644 --- a/plugins/filters.js +++ b/plugins/filters.js @@ -1,6 +1,7 @@ import Vue from 'vue' import moment from 'dayjs' import 'dayjs/locale/it' +import 'dayjs/locale/es' export default ({ app, store }) => { diff --git a/plugins/vue-awesome.js b/plugins/vue-awesome.js index 272a74f5..cf51e673 100644 --- a/plugins/vue-awesome.js +++ b/plugins/vue-awesome.js @@ -31,6 +31,7 @@ import 'vue-awesome/icons/envelope' import 'vue-awesome/icons/calendar-day' import 'vue-awesome/icons/calendar-week' import 'vue-awesome/icons/calendar-alt' +import 'vue-awesome/icons/circle-notch' import Icon from 'vue-awesome/components/Icon' diff --git a/server/api/controller/user.js b/server/api/controller/user.js index 40f06fe9..72a875db 100644 --- a/server/api/controller/user.js +++ b/server/api/controller/user.js @@ -8,7 +8,6 @@ const config = require('config') const mail = require('../mail') const { user: User, event: Event, tag: Tag, place: Place } = require('../models') const settingsController = require('./settings') -const notifier = require('../../notifier') const federation = require('../../federation/helpers') const userController = { @@ -40,10 +39,6 @@ const userController = { } }, - async logout(req, res) { - - }, - async setToken(req, res) { req.user.mastodon_auth = req.body await req.user.save() @@ -153,7 +148,6 @@ const userController = { body.description = body.description .replace(/(<([^>]+)>)/ig, '') // remove all tags from description - // .replace(/(https?:\/\/[^\s]+)/g, '$1') // add links await event.update(body) let place @@ -192,7 +186,12 @@ const userController = { if (!recover_code) return res.sendStatus(400) const user = await User.findOne({ where: { recover_code: { [Op.eq]: recover_code } } }) if (!user) return res.sendStatus(400) - res.json(user) + try { + await user.update({ recover_code: ''}) + res.sendStatus(200) + } catch (e) { + res.sendStatus(400) + } }, async updatePasswordWithRecoverCode(req, res) { @@ -201,6 +200,7 @@ const userController = { if (!recover_code || !password) return res.sendStatus(400) const user = await User.findOne({ where: { recover_code: { [Op.eq]: recover_code } } }) if (!user) return res.sendStatus(400) + user.recover_code = '' user.password = password try { await user.save() @@ -224,8 +224,8 @@ const userController = { async update(req, res) { const user = await User.findByPk(req.body.id) if (user) { - if (!user.is_active && req.body.is_active) { - await mail.send(user.email, 'confirm', { user, config }) + if (!user.is_active && req.body.is_active && user.recover_code) { + mail.send(user.email, 'confirm', { user, config }) } await user.update(req.body) res.json(user) @@ -246,9 +246,11 @@ const userController = { req.body.is_active = false } + req.body.recover_code = crypto.randomBytes(16).toString('hex') const user = await User.create(req.body) try { - mail.send([user.email, config.admin], 'register', { user, config }) + mail.send(user.email, 'register', { user, config }) + mail.send(config.admin, 'admin_register', { user, config }) } catch (e) { return res.status(400).json(e) } diff --git a/server/api/index.js b/server/api/index.js index 7f132c5e..67c54145 100644 --- a/server/api/index.js +++ b/server/api/index.js @@ -34,7 +34,6 @@ const jwt = expressJwt({ // AUTH api.post('/auth/login', userController.login) -api.post('/auth/logout', userController.logout) api.get('/auth/user', jwt, fillUser, userController.current) api.post('/user/recover', userController.forgotPassword) diff --git a/server/api/mail.js b/server/api/mail.js index e6072898..aa29674c 100644 --- a/server/api/mail.js +++ b/server/api/mail.js @@ -3,10 +3,12 @@ const path = require('path') const moment = require('moment') const config = require('config') const settings = require('./controller/settings') +const debug = require('debug')('email') moment.locale('it') const mail = { send(addresses, template, locals) { + debug(`Send ${template} email to ${addresses}`) const email = new Email({ views: { root: path.join(__dirname, '..', 'emails') }, htmlToText: false, @@ -18,15 +20,17 @@ const mail = { } }, message: { - from: `${config.title} <${config.smtp.auth.user}>` + from: `${config.title} <${config.admin}>` }, send: true, i18n: { directory: path.join(__dirname, '..', '..', 'locales', 'email'), + objectNotation: true, syncFiles: false, updateFiles: false, defaultLocale: settings.locale, - locales: ['en', 'it'] + locale: settings.locale, + locales: ['it', 'es'], }, transport: config.smtp }) @@ -45,7 +49,7 @@ const mail = { } return email.send(msg) .catch(e => { - console.error(e) + debug('Error sending email =>', e) }) } } diff --git a/server/api/models/event.js b/server/api/models/event.js index b0033135..fbfe85f1 100644 --- a/server/api/models/event.js +++ b/server/api/models/event.js @@ -36,11 +36,13 @@ module.exports = (sequelize, DataTypes) => { event.hasMany(models.comment) } + // event.prototype.toAP = function (username, follower) { const tags = this.tags && '-' + this.tags.map(t => '#' + t.tag).join(' ') const content = `${this.title} @${this.place.name} ${moment.unix(this.start_datetime).format('dddd, D MMMM (HH:mm)')}
${this.description.length > 200 ? this.description.substr(0, 200) + '...' : this.description} ${tags}
` + return { id: `${config.baseurl}/federation/m/c_${this.id}`, type: 'Create', diff --git a/server/api/models/user.js b/server/api/models/user.js index 078081b0..d60aa2dd 100644 --- a/server/api/models/user.js +++ b/server/api/models/user.js @@ -9,14 +9,14 @@ module.exports = (sequelize, DataTypes) => { const user = sequelize.define('user', { username: { type: DataTypes.STRING, - unique: true, + unique: { msg: 'error.nick_taken' }, index: true, allowNull: false }, display_name: DataTypes.STRING, email: { type: DataTypes.STRING, - unique: true, + unique: { msg: 'error.email_taken' }, index: true, allowNull: false }, @@ -59,7 +59,6 @@ module.exports = (sequelize, DataTypes) => { user.beforeCreate(async (user, options) => { // generate rsa keys - console.error('generate rsa key') const rsa = await generateKeyPair('rsa', { modulusLength: 4096, publicKeyEncoding: { diff --git a/server/emails/admin_register/html.pug b/server/emails/admin_register/html.pug new file mode 100644 index 00000000..ed6530f9 --- /dev/null +++ b/server/emails/admin_register/html.pug @@ -0,0 +1,4 @@ +extends ../layout.pug + +block content + p !{t('admin_register.content', { user, config })} diff --git a/server/emails/admin_register/subject.pug b/server/emails/admin_register/subject.pug new file mode 100644 index 00000000..3bd1d5de --- /dev/null +++ b/server/emails/admin_register/subject.pug @@ -0,0 +1 @@ +| [#{config.title}] #{t('admin_register.subject')} diff --git a/server/emails/admin_register/text.pug b/server/emails/admin_register/text.pug new file mode 100644 index 00000000..f86b83e2 --- /dev/null +++ b/server/emails/admin_register/text.pug @@ -0,0 +1,6 @@ +p= t('admin_register.content', { user, config }) + +hr +small #{config.title} / #{config.description} +br +small #{config.baseurl} diff --git a/server/emails/confirm/html.pug b/server/emails/confirm/html.pug index 091b2829..bd40b296 100644 --- a/server/emails/confirm/html.pug +++ b/server/emails/confirm/html.pug @@ -1,12 +1,3 @@ - -html(lang="en") - head - meta(charset="UTF-8") - meta(name="viewport", content="width=device-width, initial-scale=1.0") - meta(http-equiv="X-UA-Compatible", content="ie=edge") - title #{config.title} - body - p= t('email.confirm', { config }) - - hr - #{config.title} - #{config.description} +extends ../layout.pug +block content + p !{t('confirm.content', { config, user })} \ No newline at end of file diff --git a/server/emails/confirm/subject.pug b/server/emails/confirm/subject.pug index 52cb1fb6..72a6cbae 100644 --- a/server/emails/confirm/subject.pug +++ b/server/emails/confirm/subject.pug @@ -1 +1 @@ -| [#{config.title}] #{t('email.confirm.subject')} \ No newline at end of file +| [#{config.title}] #{t('confirm.subject')} \ No newline at end of file diff --git a/server/emails/confirm/text.pug b/server/emails/confirm/text.pug new file mode 100644 index 00000000..5d6afacb --- /dev/null +++ b/server/emails/confirm/text.pug @@ -0,0 +1 @@ +p !{t('confirm.content', { config })} \ No newline at end of file diff --git a/server/emails/event/html.pug b/server/emails/event/html.pug index b69a1962..71f28eb2 100644 --- a/server/emails/event/html.pug +++ b/server/emails/event/html.pug @@ -1,22 +1,21 @@ -h3 #{event.title} -p Dove: #{event.place.name} - #{event.place.address} -p Quando: #{datetime(event.start_datetime)} -br -if event.image_path -
- -
-p #{event.description} +extends ../layout.pug +block content + h3 #{event.title} + p Dove: #{event.place.name} - #{event.place.address} + p Quando: #{datetime(event.start_datetime)} + br + if event.image_path +
+ +
+ p #{event.description} -each tag in event.tags - span ##{tag.tag} -br -#{config.baseurl}/event/#{event.id} -hr -if to_confirm - p Puoi confermare questo evento qui -else - p Puoi eliminare queste notifiche qui - -hr -#{config.title} - #{config.description} + each tag in event.tags + span ##{tag.tag} + br + #{config.baseurl}/event/#{event.id} + hr + if to_confirm + p Puoi confermare questo evento qui + else + p Puoi eliminare queste notifiche qui diff --git a/server/emails/event/text.pug b/server/emails/event/text.pug new file mode 100644 index 00000000..71f28eb2 --- /dev/null +++ b/server/emails/event/text.pug @@ -0,0 +1,21 @@ +extends ../layout.pug +block content + h3 #{event.title} + p Dove: #{event.place.name} - #{event.place.address} + p Quando: #{datetime(event.start_datetime)} + br + if event.image_path +
+ +
+ p #{event.description} + + each tag in event.tags + span ##{tag.tag} + br + #{config.baseurl}/event/#{event.id} + hr + if to_confirm + p Puoi confermare questo evento qui + else + p Puoi eliminare queste notifiche qui diff --git a/server/emails/layout.pug b/server/emails/layout.pug new file mode 100644 index 00000000..5ff2bf28 --- /dev/null +++ b/server/emails/layout.pug @@ -0,0 +1,13 @@ + +html(lang="en") + head + meta(charset="UTF-8") + meta(name="viewport", content="width=device-width, initial-scale=1.0") + meta(http-equiv="X-UA-Compatible", content="ie=edge") + title #{config.title} + body + block content + hr + small #{config.title} / #{config.description} + br + #{config.baseurl} \ No newline at end of file diff --git a/server/emails/recover/html.pug b/server/emails/recover/html.pug index d7b24e56..306d2690 100644 --- a/server/emails/recover/html.pug +++ b/server/emails/recover/html.pug @@ -1,12 +1,4 @@ - -html(lang="en") - head - meta(charset="UTF-8") - meta(name="viewport", content="width=device-width, initial-scale=1.0") - meta(http-equiv="X-UA-Compatible", content="ie=edge") - title #{config.title} - body - p= t('email.recover', {config}) +extends ../layout.pug - hr - #{t('email.press_here')} +block content + p !{t('recover.content', {config, user})} \ No newline at end of file diff --git a/server/emails/recover/subject.pug b/server/emails/recover/subject.pug index 156103ca..2308d051 100644 --- a/server/emails/recover/subject.pug +++ b/server/emails/recover/subject.pug @@ -1 +1 @@ -= `[#{config.title}] ${t('email.recover')}` +| [#{config.title}] #{t('recover.subject')} diff --git a/server/emails/recover/text.pug b/server/emails/recover/text.pug new file mode 100644 index 00000000..4c47b008 --- /dev/null +++ b/server/emails/recover/text.pug @@ -0,0 +1 @@ +p= !t('recover.content', {config, user}) \ No newline at end of file diff --git a/server/emails/register/html.pug b/server/emails/register/html.pug index aef84feb..ec74ade9 100644 --- a/server/emails/register/html.pug +++ b/server/emails/register/html.pug @@ -1,6 +1,4 @@ -p= t('email.register') +extends ../layout.pug -hr -small #{config.title} / #{config.description} -br - #{config.baseurl} \ No newline at end of file +block content + p !{t('register.content', { user, config })} \ No newline at end of file diff --git a/server/emails/register/subject.pug b/server/emails/register/subject.pug index 6a7be433..c7613a90 100644 --- a/server/emails/register/subject.pug +++ b/server/emails/register/subject.pug @@ -1 +1 @@ -| [#{config.title}] #{t('email.register.subject')} +| [#{config.title}] #{t('register.subject')} diff --git a/server/emails/register/text.pug b/server/emails/register/text.pug index 7785b0cf..a4cb45f9 100644 --- a/server/emails/register/text.pug +++ b/server/emails/register/text.pug @@ -1,4 +1,4 @@ -p= t('email.register') +p= t('register.content', { config, user }) hr small #{config.title} / #{config.description} diff --git a/server/emails/user_confirm/html.pug b/server/emails/user_confirm/html.pug index 37f6aa32..7fcd2ce1 100644 --- a/server/emails/user_confirm/html.pug +++ b/server/emails/user_confirm/html.pug @@ -1,10 +1,3 @@ - -html(lang="en") - head - meta(charset="UTF-8") - meta(name="viewport", content="width=device-width, initial-scale=1.0") - meta(http-equiv="X-UA-Compatible", content="ie=edge") - title #{config.title} - body - - p !{t('email.user_confirm', { config, user })} +extends ../layout.pug +block content + p !{t('confirm.content', { config, user })} diff --git a/server/emails/user_confirm/subject.pug b/server/emails/user_confirm/subject.pug index 6d0067a6..72a6cbae 100644 --- a/server/emails/user_confirm/subject.pug +++ b/server/emails/user_confirm/subject.pug @@ -1 +1 @@ -= `[Gancio] Richiesta password recovery` +| [#{config.title}] #{t('confirm.subject')} \ No newline at end of file diff --git a/server/emails/user_confirm/text.pug b/server/emails/user_confirm/text.pug new file mode 100644 index 00000000..89326a44 --- /dev/null +++ b/server/emails/user_confirm/text.pug @@ -0,0 +1 @@ +p !{t('confirm.content', { config, user })} diff --git a/static/README.md b/static/README.md index cf004353..7bc62cf3 100644 --- a/static/README.md +++ b/static/README.md @@ -1,7 +1,5 @@ # STATIC -**This directory is not required, you can delete it if you don't want to use it.** - This directory contains your static files. Each file inside this directory is mapped to `/`. Thus you'd want to delete this README.md before deploying to production. diff --git a/yarn.lock b/yarn.lock index 9941e9aa..7fea9151 100644 --- a/yarn.lock +++ b/yarn.lock @@ -997,18 +997,19 @@ webpack-node-externals "^1.7.2" webpackbar "^4.0.0" -"@nuxtjs/auth@^4.6.5": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@nuxtjs/auth/-/auth-4.8.1.tgz#e554bbd032fdcd08d9fddcb159f30ff2c7de5b1a" - integrity sha512-EsBiiWXnojOxQ1ouK07tsXMP8pLFiAc+L4NLd1NGr3Z45iGRrjwLLy/weOH65vJGqNYX3lIQBGYscUyzGaaAyg== +"@nuxtjs/auth@^4.8.2": + version "4.8.2" + resolved "https://registry.yarnpkg.com/@nuxtjs/auth/-/auth-4.8.2.tgz#0276fe3a4291b61ec0b7fd4328d43a118d47f603" + integrity sha512-LG+71qTGxValqDyhG1Zou5YyJSMQtMq4MaXd0gXsFFYlsPDEyysYtidoAG+LhUsO9grmAwWTvcqkXO2d94LNUg== dependencies: "@nuxtjs/axios" "^5.5.4" + body-parser "^1.19.0" consola "^2.9.0" cookie "^0.4.0" dotprop "^1.2.0" is-https "^1.0.0" js-cookie "^2.2.0" - lodash "^4.17.11" + lodash "^4.17.15" nanoid "^2.0.3" "@nuxtjs/axios@^5.5.4": @@ -1942,7 +1943,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -body-parser@1.19.0, body-parser@^1.18.3: +body-parser@1.19.0, body-parser@^1.18.3, body-parser@^1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== @@ -3740,10 +3741,10 @@ eslint-ast-utils@^1.0.0: lodash.get "^4.4.2" lodash.zip "^4.2.0" -eslint-config-prettier@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.1.0.tgz#e6f678ba367fbd1273998d5510f76f004e9dce7b" - integrity sha512-k9fny9sPjIBQ2ftFTesJV21Rg4R/7a7t7LCtZVrYQiHEp8Nnuk3EGaDmsKSAnsPj0BYcgB2zxzHa2NTkIxcOLg== +eslint-config-prettier@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.2.0.tgz#80e0b8714e3f6868c4ac2a25fbf39c02e73527a7" + integrity sha512-VLsgK/D+S/FEsda7Um1+N8FThec6LqE3vhcMyp8mlmto97y3fGf3DX7byJexGuOb1QY0Z/zz222U5t+xSfcZDQ== dependencies: get-stdin "^6.0.0" @@ -3791,13 +3792,13 @@ eslint-plugin-es@^1.4.0: eslint-utils "^1.3.0" regexpp "^2.0.1" -eslint-plugin-es@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz#12acae0f4953e76ba444bfd1b2271081ac620998" - integrity sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA== +eslint-plugin-es@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz#0f5f5da5f18aa21989feebe8a73eadefb3432976" + integrity sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ== dependencies: eslint-utils "^1.4.2" - regexpp "^2.0.1" + regexpp "^3.0.0" eslint-plugin-import@>=2.17.3, eslint-plugin-import@^2.18.0: version "2.18.2" @@ -3816,19 +3817,26 @@ eslint-plugin-import@>=2.17.3, eslint-plugin-import@^2.18.0: read-pkg-up "^2.0.0" resolve "^1.11.0" -eslint-plugin-jest@>=22.16.0, eslint-plugin-jest@^22.10.0: +eslint-plugin-jest@>=22.17.0: + version "22.17.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.17.0.tgz#dc170ec8369cd1bff9c5dd8589344e3f73c88cf6" + integrity sha512-WT4DP4RoGBhIQjv+5D0FM20fAdAUstfYAf/mkufLNTojsfgzc5/IYW22cIg/Q4QBavAZsROQlqppiWDpFZDS8Q== + dependencies: + "@typescript-eslint/experimental-utils" "^1.13.0" + +eslint-plugin-jest@^22.10.0: version "22.16.0" resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.16.0.tgz#30c4e0e9dc331beb2e7369b70dd1363690c1ce05" integrity sha512-eBtSCDhO1k7g3sULX/fuRK+upFQ7s548rrBtxDyM1fSoY7dTWp/wICjrJcDZKVsW7tsFfH22SG+ZaxG5BZodIg== dependencies: "@typescript-eslint/experimental-utils" "^1.13.0" -eslint-plugin-node@>=9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.2.0.tgz#b1911f111002d366c5954a6d96d3cd5bf2a3036a" - integrity sha512-2abNmzAH/JpxI4gEOwd6K8wZIodK3BmHbTxz4s79OIYwwIt2gkpEXlAouJXu4H1c9ySTnRso0tsuthSOZbUMlA== +eslint-plugin-node@>=10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz#fd1adbc7a300cf7eb6ac55cf4b0b6fc6e577f5a6" + integrity sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ== dependencies: - eslint-plugin-es "^1.4.1" + eslint-plugin-es "^2.0.0" eslint-utils "^1.4.2" ignore "^5.1.1" minimatch "^3.0.4" @@ -6806,10 +6814,10 @@ nodemailer@^6.2.1: resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.3.0.tgz#a89b0c62d3937bdcdeecbf55687bd7911b627e12" integrity sha512-TEHBNBPHv7Ie/0o3HXnb7xrPSSQmH1dXwQKRaMKDBGt/ZN54lvDVujP6hKkO/vjkIYL9rK8kHSG11+G42Nhxuw== -nodemon@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.1.tgz#576f0aad0f863aabf8c48517f6192ff987cd5071" - integrity sha512-/DXLzd/GhiaDXXbGId5BzxP1GlsqtMGM9zTmkWrgXtSqjKmGSbLicM/oAy4FR0YWm14jCHRwnR31AHS2dYFHrg== +nodemon@^1.19.2: + version "1.19.2" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.2.tgz#b0975147dc99b3761ceb595b3f9277084931dcc0" + integrity sha512-hRLYaw5Ihyw9zK7NF+9EUzVyS6Cvgc14yh8CAYr38tPxJa6UrOxwAQ351GwrgoanHCF0FalQFn6w5eoX/LGdJw== dependencies: chokidar "^2.1.5" debug "^3.1.0" @@ -8681,6 +8689,11 @@ regexpp@^2.0.1: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexpp@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" + integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + regexpu-core@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" @@ -9085,10 +9098,10 @@ sequelize-pool@^2.3.0: resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-2.3.0.tgz#64f1fe8744228172c474f530604b6133be64993d" integrity sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA== -sequelize@^5.18.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-5.18.0.tgz#3ed8eda9ec741f64f134752e0765216d760d2efe" - integrity sha512-Kw2LHYpXGa1v5T3Q1r+cPvYeeCJV53RbpoDO/NAVZAUiGj/UFPxaJH9qV/pYw2AAhkNkyzfml6Ud6dieJllB2A== +sequelize@^5.18.1: + version "5.18.1" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-5.18.1.tgz#31d5246dcdf01d0ac317454c28fb598359d5b60a" + integrity sha512-jngo7pqilyOycMv6ZEwHLVn2wuHi/xkSQZfwK4jhjG8ta1HWYJK3XyQDFdhVEOH1GEq9pnqaf+7Kwqm+eqXD9Q== dependencies: bluebird "^3.5.0" cls-bluebird "^2.1.0" @@ -10368,10 +10381,10 @@ vue-client-only@^2.0.0: resolved "https://registry.yarnpkg.com/vue-client-only/-/vue-client-only-2.0.0.tgz#ddad8d675ee02c761a14229f0e440e219de1da1c" integrity sha512-arhk1wtWAfLsJyxGMoEYhoBowM87/i6HLSG2LH/03Yog6i2d9JEN1peMP0Ceis+/n9DxdenGYZZTxbPPJyHciA== -vue-clipboard2@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/vue-clipboard2/-/vue-clipboard2-0.3.0.tgz#b04d3f9a2d46f12ca85178445930b38463640b22" - integrity sha512-6/Y9NJErWb4LNBLMgsJSdKb7KpF6/jqXagvKlYut6VQzQsNj6515FpwH0r5hhmeJMqaPzf1kxAw8L8Qvw/QBJQ== +vue-clipboard2@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/vue-clipboard2/-/vue-clipboard2-0.3.1.tgz#6e551fb7bd384889b28b0da3b12289ed6bca4894" + integrity sha512-H5S/agEDj0kXjUb5GP2c0hCzIXWRBygaWLN3NEFsaI9I3uWin778SFEMt8QRXiPG+7anyjqWiw2lqcxWUSfkYg== dependencies: clipboard "^2.0.0" @@ -10527,10 +10540,10 @@ webpack-bundle-analyzer@^3.4.1: opener "^1.5.1" ws "^6.0.0" -webpack-cli@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.7.tgz#77c8580dd8e92f69d635e0238eaf9d9c15759a91" - integrity sha512-OhTUCttAsr+IZSMVwGROGRHvT+QAs8H6/mHIl4SvhAwYywjiylYjpwybGx7WQ9Hkb45FhjtsymkwiRRbGJ1SZQ== +webpack-cli@^3.3.8: + version "3.3.8" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.8.tgz#caeaebcc26f685db1736e5decd3f01aac30123ec" + integrity sha512-RANYSXwikSWINjHMd/mtesblNSpjpDLoYTBtP99n1RhXqVI/wxN40Auqy42I7y4xrbmRBoA5Zy5E0JSBD5XRhw== dependencies: chalk "2.4.2" cross-spawn "6.0.5"