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"