From 72e714a42c95c14f8274aa15a054e14825630e40 Mon Sep 17 00:00:00 2001 From: gaba Date: Wed, 22 Mar 2017 11:59:33 -0700 Subject: [PATCH 01/44] Translations into json --- client/coral-sign-in/translations.js | 102 ------------------------- client/coral-sign-in/translations.json | 102 +++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 102 deletions(-) delete mode 100644 client/coral-sign-in/translations.js create mode 100644 client/coral-sign-in/translations.json diff --git a/client/coral-sign-in/translations.js b/client/coral-sign-in/translations.js deleted file mode 100644 index f6934bbad..000000000 --- a/client/coral-sign-in/translations.js +++ /dev/null @@ -1,102 +0,0 @@ -export default { - en: { - 'signIn': { - emailVerifyCTA: 'Please verify your email address.', - requestNewVerifyEmail: 'Request another email:', - verifyEmail: 'Thank you for creating an account! We sent an email to the address you provided to verify your account.', - verifyEmail2: 'You must verify your account before engaging with the community.', - notYou: 'Not you?', - loggedInAs: 'Logged in as', - facebookSignIn: 'Sign in with Facebook', - facebookSignUp: 'Sign up with Facebook', - logout: 'Logout', - signIn: 'Sign in to join the conversation', - or: 'Or', - email: 'E-mail Address', - password: 'Password', - forgotYourPass: 'Forgot your password?', - needAnAccount: 'Need an account?', - register: 'Register', - signUp: 'Sign Up', - confirmPassword: 'Confirm Password', - username: 'Username', - alreadyHaveAnAccount: 'Already have an account?', - recoverPassword: 'Recover password', - emailInUse: 'Email address already in use', - emailORusernameInUse: 'Email address or Username already in use', - requiredField: 'This field is required', - passwordsDontMatch: 'Passwords don\'t match.', - specialCharacters: 'Usernames can contain letters, numbers and _ only', - checkTheForm: 'Invalid Form. Please, check the fields' - }, - 'createdisplay': { - writeyourusername: 'Edit your username', - yourusername: 'Your username appears on every comment you post.', - ifyoudontchangeyourname: 'If you don\'t change your username at this step, your Facebook display name will appear alongside of all your comments.', - username: 'Username', - continue: 'Continue with the same Facebook username', - save: 'Save', - fakecommentdate: '1 minute ago', - fakecommentbody: 'This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section.', - requiredField: 'Required field', - errorCreate: 'Error when changing username', - checkTheForm: 'Invalid Form. Please, check the fields', - specialCharacters: 'Usernames can contain letters, numbers and _ only' - }, - 'permalink': { - permalink: 'Link' - }, - 'report': 'Report', - 'like': 'Like', - }, - es: { - 'signIn': { - emailVerifyCTA: 'Por favor verifique su correo electronico.', - requestNewVerifyEmail: 'Enviar otro correo:', - verifyEmail: '¡Gracias por crear una cuenta! Le enviamos un correo a la dirección que dio para verificar su cuenta.', - verifyEmail2: 'Debe verificarla antes de poder involucrarse en la comunidad.', - notYou: 'No eres tu?', - loggedInAs: 'Entraste como', - facebookSignIn: 'Entrar con Facebook', - facebookSignUp: 'Regístrate con Facebook', - logout: 'Salir', - signIn: 'Entrar para Unirte a la Conversación', - or: 'o', - email: 'E-mail', - password: 'Contraseña', - forgotYourPass: 'Has olvidado tu contraseña?', - needAnAccount: 'Necesitas una cuenta?', - register: 'Regístrate', - signUp: 'Registro', - confirmPassword: 'Confirmar Contraseña', - username: 'Nombre', - alreadyHaveAnAccount: 'Ya tienes una cuenta?', - recoverPassword: 'Recuperar contraseña', - emailInUse: 'Este email se encuentra en uso', - emailORusernameInUse: 'Este email ó nombre se encuentran en uso', - requiredField: 'Este campo es requerido', - passwordsDontMatch: 'Las contraseñas no coinciden', - specialCharacters: 'Los nombres pueden contener letras, números y _', - checkTheForm: 'Formulario Inválido. Por favor, completa los campos' - }, - 'createdisplay': { - writeyourusername: 'Edita tu nombre', - yourusername: 'Tu nombre aparece en cada comentario que publiques.', - ifyoudontchangeyourname: 'Si no modificas tu nombre de usuario en este paso, tu nombre de Facebook aparecera al lado de cada comentario que publiques.', - username: 'Nombre', - continue: 'Continuar con nombre de Facebook', - save: 'Guardar', - fakecommentdate: 'hace un minuto', - fakecommentbody: 'Este es un comentario de ejemplo. Las lectoras pueden compartir sus ideas y opiniones con los periodistas en la sección de comentarios.', - requiredField: 'Campo necesario', - errorCreate: 'Hubo un error al cambiar el nombre de usuario', - checkTheForm: 'Formulario Invalido. Por favor, verifica los campos', - specialCharacters: 'Sólo pueden contener letras, números y _' - }, - 'permalink': { - permalink: 'Enlace' - }, - 'report': 'Informe', - 'like': 'Me gusta', - } -}; diff --git a/client/coral-sign-in/translations.json b/client/coral-sign-in/translations.json new file mode 100644 index 000000000..e7e5661b3 --- /dev/null +++ b/client/coral-sign-in/translations.json @@ -0,0 +1,102 @@ +{ + "en": { + "signIn": { + "emailVerifyCTA": "Please verify your email address.", + "requestNewVerifyEmail": "Request another email:", + "verifyEmail": "Thank you for creating an account! We sent an email to the address you provided to verify your account.", + "verifyEmail2": "You must verify your account before engaging with the community.", + "notYou": "Not you?", + "loggedInAs": "Logged in as", + "facebookSignIn": "Sign in with Facebook", + "facebookSignUp": "Sign up with Facebook", + "logout": "Logout", + "signIn": "Sign in to join the conversation", + "or": "Or", + "email": "E-mail Address", + "password": "Password", + "forgotYourPass": "Forgot your password?", + "needAnAccount": "Need an account?", + "register": "Register", + "signUp": "Sign Up", + "confirmPassword": "Confirm Password", + "username": "Username", + "alreadyHaveAnAccount": "Already have an account?", + "recoverPassword": "Recover password", + "emailInUse": "Email address already in use", + "emailORusernameInUse": "Email address or Username already in use", + "requiredField": "This field is required", + "passwordsDontMatch": "Passwords don\"t match.", + "specialCharacters": "Usernames can contain letters, numbers and _ only", + "checkTheForm": "Invalid Form. Please, check the fields" + }, + "createdisplay": { + "writeyourusername": "Edit your username", + "yourusername": "Your username appears on every comment you post.", + "ifyoudontchangeyourname": "If you don\"t change your username at this step, your Facebook display name will appear alongside of all your comments.", + "username": "Username", + "continue": "Continue with the same Facebook username", + "save": "Save", + "fakecommentdate": "1 minute ago", + "fakecommentbody": "This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section.", + "requiredField": "Required field", + "errorCreate": "Error when changing username", + "checkTheForm": "Invalid Form. Please, check the fields", + "specialCharacters": "Usernames can contain letters, numbers and _ only" + }, + "permalink": { + "permalink": "Link" + }, + "report": "Report", + "like": "Like", + }, + "es": { + "signIn": { + "emailVerifyCTA": "Por favor verifique su correo electronico.", + "requestNewVerifyEmail": "Enviar otro correo:", + "verifyEmail": "¡Gracias por crear una cuenta! Le enviamos un correo a la dirección que dio para verificar su cuenta.", + "verifyEmail2": "Debe verificarla antes de poder involucrarse en la comunidad.", + "notYou": "No eres tu?", + "loggedInAs": "Entraste como", + "facebookSignIn": "Entrar con Facebook", + "facebookSignUp": "Regístrate con Facebook", + "logout": "Salir", + "signIn": "Entrar para Unirte a la Conversación", + "or": "o", + "email": "E-mail", + "password": "Contraseña", + "forgotYourPass": "Has olvidado tu contraseña?", + "needAnAccount": "Necesitas una cuenta?", + "register": "Regístrate", + "signUp": "Registro", + "confirmPassword": "Confirmar Contraseña", + "username": "Nombre", + "alreadyHaveAnAccount": "Ya tienes una cuenta?", + "recoverPassword": "Recuperar contraseña", + "emailInUse": "Este email se encuentra en uso", + "emailORusernameInUse": "Este email ó nombre se encuentran en uso", + "requiredField": "Este campo es requerido", + "passwordsDontMatch": "Las contraseñas no coinciden", + "specialCharacters": "Los nombres pueden contener letras, números y _", + "checkTheForm": "Formulario Inválido. Por favor, completa los campos" + }, + "createdisplay": { + "writeyourusername": "Edita tu nombre", + "yourusername": "Tu nombre aparece en cada comentario que publiques.", + "ifyoudontchangeyourname": "Si no modificas tu nombre de usuario en este paso, tu nombre de Facebook aparecera al lado de cada comentario que publiques.", + "username": "Nombre", + "continue": "Continuar con nombre de Facebook", + "save": "Guardar", + "fakecommentdate": "hace un minuto", + "fakecommentbody": "Este es un comentario de ejemplo. Las lectoras pueden compartir sus ideas y opiniones con los periodistas en la sección de comentarios.", + "requiredField": "Campo necesario", + "errorCreate": "Hubo un error al cambiar el nombre de usuario", + "checkTheForm": "Formulario Invalido. Por favor, verifica los campos", + "specialCharacters": "Sólo pueden contener letras, números y _" + }, + "permalink": { + "permalink": "Enlace" + }, + "report": "Informe", + "like": "Me gusta", + } +} From 27a8c994a8ad5a395857935c1720bd9dc49ab353 Mon Sep 17 00:00:00 2001 From: gaba Date: Wed, 22 Mar 2017 13:19:08 -0700 Subject: [PATCH 02/44] Fixing more translations --- .gitignore | 1 + client/coral-admin/src/translations.json | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index d91635c94..f20b53ee8 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ dump.rdb coverage/ .tags .tags1 +translations.txt # remove plugin folders plugins diff --git a/client/coral-admin/src/translations.json b/client/coral-admin/src/translations.json index f59499e50..39e21f99e 100644 --- a/client/coral-admin/src/translations.json +++ b/client/coral-admin/src/translations.json @@ -161,16 +161,16 @@ "es": { "errors": { "NOT_AUTHORIZED": "Acción no autorizada.", - "LOGIN_MAXIMUM_EXCEEDED": "Ha realizado demasiados intentos fallidos de contraseña. Por favor espera." + "LOGIN_MAXIMUM_EXCEEDED": "Ha realizado demasiados intentos fallidos de contraseña. Por favor espere." }, "community": { "username_and_email": "Usuario y E-mail", "account_creation_date": "Fecha de creación de la cuenta", "newsroom_role": "Rol en la redacción", - "admin": "Administrador", - "moderator": "Moderador", + "admin": "Administradora", + "moderator": "Moderadora", "role": "Seleccionar rol...", - "no-results": "No se encontraron usuarios con ese nombre de usuario o correo electronico.", + "no-results": "No se encontraron usuarixs con ese nombre de usuario o e-mail.", "status": "Estado", "select-status": "Seleccionar estado...", "active": "Activa", @@ -185,9 +185,9 @@ "This looks like an ad/marketing": "Spam/Propaganda", "This username is offensive": "Ofensivo", "Other": "Otros", - "ban_user": "Quieres suspender el Usuario?", + "ban_user": "Quieres suspender al Usuario?", "are_you_sure": "Estas segura que quieres suspender a {0}?", - "note": "Nota: Suspender a este usuario no le va a permitir borrar ni editar ni comentar.", + "note": "Nota: Suspender a este usuario no le va a permitir (al usuario) borrar ni editar ni comentar.", "cancel": "Cancelar", "yes_ban_user": "Si, Suspendan el usuario" }, From fb2f8ef07485a1532e99772ac9d4ec6cd31a61f2 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Wed, 22 Mar 2017 16:48:28 -0600 Subject: [PATCH 03/44] redirect to the parent url when resetting your password --- client/coral-framework/actions/auth.js | 4 +++- routes/admin/index.js | 2 +- routes/api/account/index.js | 12 ++++++------ services/users.js | 7 +++++-- views/admin/password-reset.ejs | 2 +- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/client/coral-framework/actions/auth.js b/client/coral-framework/actions/auth.js index 9dedaa2f2..2a0c2a497 100644 --- a/client/coral-framework/actions/auth.js +++ b/client/coral-framework/actions/auth.js @@ -3,6 +3,7 @@ import translations from './../translations'; const lang = new I18n(translations); import * as actions from '../constants/auth'; import coralApi, {base} from '../helpers/response'; +import {pym} from 'coral-framework'; // Dialog Actions export const showSignInDialog = (offset = 0) => ({type: actions.SHOW_SIGNIN_DIALOG, offset}); @@ -135,7 +136,8 @@ const forgotPassowordFailure = () => ({type: actions.FETCH_FORGOT_PASSWORD_FAILU export const fetchForgotPassword = email => (dispatch) => { dispatch(forgotPassowordRequest(email)); - coralApi('/account/password/reset', {method: 'POST', body: {email}}) + const redirectUri = pym.parentUrl || location.href; + coralApi('/account/password/reset', {method: 'POST', body: {email, loc: redirectUri}}) .then(() => dispatch(forgotPassowordSuccess())) .catch(error => dispatch(forgotPassowordFailure(error))); }; diff --git a/routes/admin/index.js b/routes/admin/index.js index d250ea32a..1a9769591 100644 --- a/routes/admin/index.js +++ b/routes/admin/index.js @@ -12,7 +12,7 @@ router.get('/password-reset', (req, res) => { // TODO: store the redirect uri in the token or something fancy. // admins and regular users should probably be redirected to different places. - res.render('admin/password-reset', {redirectUri: process.env.TALK_ROOT_URL}); + res.render('admin/password-reset'); }); router.get('*', (req, res) => { diff --git a/routes/api/account/index.js b/routes/api/account/index.js index 44b4b3953..3761aef95 100644 --- a/routes/api/account/index.js +++ b/routes/api/account/index.js @@ -41,14 +41,14 @@ router.post('/email/verify', (req, res, next) => { * if it does, create a JWT and send an email */ router.post('/password/reset', (req, res, next) => { - const {email} = req.body; + const {email, loc} = req.body; if (!email) { return next('you must submit an email when requesting a password.'); } UsersService - .createPasswordResetToken(email) + .createPasswordResetToken(email, loc) .then((token) => { // Check to see if the token isn't defined. @@ -101,11 +101,11 @@ router.put('/password/reset', (req, res, next) => { UsersService .verifyPasswordResetToken(token) - .then((user) => { - return UsersService.changePassword(user.id, password); + .then(([user, loc]) => { + return Promise.all([UsersService.changePassword(user.id, password), loc]); }) - .then(() => { - res.status(204).end(); + .then(([_, loc]) => { + res.json({redirect: loc}); }) .catch(() => { next(authorization.ErrNotAuthorized); diff --git a/services/users.js b/services/users.js index 4e1196252..7f83da9f9 100644 --- a/services/users.js +++ b/services/users.js @@ -524,7 +524,7 @@ module.exports = class UsersService { * Creates a JWT from a user email. Only works for local accounts. * @param {String} email of the local user */ - static createPasswordResetToken(email) { + static createPasswordResetToken(email, loc) { if (!email || typeof email !== 'string') { return Promise.reject('email is required when creating a JWT for resetting passord'); } @@ -544,6 +544,7 @@ module.exports = class UsersService { const payload = { jti: uuid.v4(), email, + loc, userId: user.id, version: user.__v }; @@ -588,7 +589,9 @@ module.exports = class UsersService { }) // TODO: add search by __v as well - .then((decoded) => UsersService.findById(decoded.userId)); + .then((decoded) => { + return Promise.all([UsersService.findById(decoded.userId), decoded.loc]); + }); } /** diff --git a/views/admin/password-reset.ejs b/views/admin/password-reset.ejs index 06b9d2a86..4b25d1279 100644 --- a/views/admin/password-reset.ejs +++ b/views/admin/password-reset.ejs @@ -126,7 +126,7 @@ }, data: JSON.stringify({password: password, token: location.hash.replace('#', '')}) }).then(function (success) { - location.href = '<%= redirectUri %>'; + location.href = success.redirect; }).catch(function (error) { showError(error.responseText); }); From 4b0d0fed534ef90c19846bdd573ca8e7171cb374 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Wed, 22 Mar 2017 17:10:11 -0600 Subject: [PATCH 04/44] unused variable --- routes/api/account/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/api/account/index.js b/routes/api/account/index.js index 3761aef95..e1c73d638 100644 --- a/routes/api/account/index.js +++ b/routes/api/account/index.js @@ -104,7 +104,7 @@ router.put('/password/reset', (req, res, next) => { .then(([user, loc]) => { return Promise.all([UsersService.changePassword(user.id, password), loc]); }) - .then(([_, loc]) => { + .then(([ , loc]) => { res.json({redirect: loc}); }) .catch(() => { From 4cbd6ebad2ac877a5830d7aa0bb86fb40f970703 Mon Sep 17 00:00:00 2001 From: gaba Date: Wed, 22 Mar 2017 16:21:40 -0700 Subject: [PATCH 05/44] Mooore translations. --- client/coral-admin/src/translations.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/coral-admin/src/translations.json b/client/coral-admin/src/translations.json index 39e21f99e..d3b2222c5 100644 --- a/client/coral-admin/src/translations.json +++ b/client/coral-admin/src/translations.json @@ -193,15 +193,15 @@ }, "suspenduser": { "title": "Suspendiendo un usuario", - "title_0": "Esta queriendo suspender un usuario?", - "description_0": "Le gustaria suspender a esta usuaria temporarianmente por su nombre de usuario? Si lo hace sus comentarios serán escondidos temporariamente hasta que puedan reescribir su nombre de usuario.", - "title_1": "Enviarle una nota al usuario sobre su cuenta suspendida", + "title_0": "¿Esta queriendo suspender un usuario?", + "description_0": "¿Le gustaría suspender a esta usuaria temporalmente devido a su nombre de usuario? Si lo hace sus comentarios serán escondidos temporalmente hasta que el usuario pueda cambiar su nombre.", + "title_1": "Enviarle un correo al usuario informandole que su cuenta suspendida", "description_1": "Si suspende a este usuario, su cuenta va a ser deshabilitada y todos sus comentarios escondidos del sitio.", "no_cancel": "No, cancelar", "yes_suspend": "Si, suspender", "send": "Enviar", "username": "nombre de usuario", - "email_subject": "Su cuenta ha sido suspendida temporariamente", + "email_subject": "Su cuenta ha sido suspendida temporalmente", "email": "Otra persona de la comunidad recientemente marcó su nombre de usuario para ser revisado. Por su contenido, el nombre de usuario ha sido rechazado. Esto quiere decir que no puede comentar, gustar o marcar contenido hasta que modifique su nombre de usuario. Por favor, envienos un correo a moderator@newsorg.com si tiene alguna pregunta o preocupación", "write_message": "Escribir un mensaje" }, From 35c8e1b5f98950d6c5a7307cf45cf5cb9451680a Mon Sep 17 00:00:00 2001 From: gaba Date: Wed, 22 Mar 2017 17:27:43 -0700 Subject: [PATCH 06/44] Check spanish translations --- client/coral-admin/src/translations.json | 72 +++++++++---------- client/coral-configure/translations.json | 4 +- client/coral-framework/translations.json | 23 +++--- client/coral-plugin-best/translations.json | 4 +- .../coral-plugin-commentbox/translations.json | 8 +-- client/coral-plugin-flags/translations.json | 18 ++--- .../coral-plugin-moderation/translations.json | 2 +- client/coral-settings/translations.json | 8 +-- client/coral-sign-in/translations.json | 22 +++--- 9 files changed, 79 insertions(+), 82 deletions(-) diff --git a/client/coral-admin/src/translations.json b/client/coral-admin/src/translations.json index d3b2222c5..13691a1fc 100644 --- a/client/coral-admin/src/translations.json +++ b/client/coral-admin/src/translations.json @@ -161,7 +161,7 @@ "es": { "errors": { "NOT_AUTHORIZED": "Acción no autorizada.", - "LOGIN_MAXIMUM_EXCEEDED": "Ha realizado demasiados intentos fallidos de contraseña. Por favor espere." + "LOGIN_MAXIMUM_EXCEEDED": "Ha realizado demasiados intentos fallidos de colocar la contraseña. Por favor espere." }, "community": { "username_and_email": "Usuario y E-mail", @@ -195,14 +195,14 @@ "title": "Suspendiendo un usuario", "title_0": "¿Esta queriendo suspender un usuario?", "description_0": "¿Le gustaría suspender a esta usuaria temporalmente devido a su nombre de usuario? Si lo hace sus comentarios serán escondidos temporalmente hasta que el usuario pueda cambiar su nombre.", - "title_1": "Enviarle un correo al usuario informandole que su cuenta suspendida", + "title_1": "Enviarle un correo al usuario informandole que su cuenta fue suspendida", "description_1": "Si suspende a este usuario, su cuenta va a ser deshabilitada y todos sus comentarios escondidos del sitio.", "no_cancel": "No, cancelar", "yes_suspend": "Si, suspender", "send": "Enviar", "username": "nombre de usuario", "email_subject": "Su cuenta ha sido suspendida temporalmente", - "email": "Otra persona de la comunidad recientemente marcó su nombre de usuario para ser revisado. Por su contenido, el nombre de usuario ha sido rechazado. Esto quiere decir que no puede comentar, gustar o marcar contenido hasta que modifique su nombre de usuario. Por favor, envienos un correo a moderator@newsorg.com si tiene alguna pregunta o preocupación", + "email": "Una persona de la comunidad recientemente marcó su nombre de usuario para ser revisado. Por su contenido, el nombre de usuario ha sido rechazado. Esto quiere decir que no puede comentar, gustar o marcar contenido hasta que modifique su nombre de usuario. Por favor, envienos un correo si tiene alguna pregunta o comentario.", "write_message": "Escribir un mensaje" }, "modqueue": { @@ -222,34 +222,34 @@ "banned_user": "Usuario Suspendido" }, "user": { - "user_bio": "", - "bio_flags": "", - "username_flags": "" + "user_bio": "marcas para este usuario", + "bio_flags": "marcas para esta biografia", + "username_flags": "marcas para este nombre de usuario" }, "configure": { - "closed-stream-settings": "Mensaje cuando los comentarios están cerrados en el artículo", + "closed-stream-settings": "Mensaje a enviar cuando los comentarios están cerrados en el artículo", "stream-settings": "Configuración de Comentarios", "moderation-settings": "Configuración de Moderación", - "tech-settings": "Configuración Technical", + "tech-settings": "Configuración Técnica", "custom-css-url": "URL CSS a medida", - "custom-css-url-desc": "URL de una hoja de estilo que va a sobrescribir los estilos por defecto de Embed Stream. Puede ser interna o externa.", + "custom-css-url-desc": "URL de una hoja de estilo que va a sobrescribir los estilos por defecto del hilo de comentarios. Puede ser interna o externa.", "dashboard": "Panel", "enable-pre-moderation": "Habilitar pre-moderación", "enable-pre-moderation-text": "Los moderadores deben aprobar cada comentario antes de que sea publicado.", - "require-email-verification": "Necesita confirmación de correo", - "require-email-verification-text": "Nuevos usuarios deben verificar sus correos antes de comentar", + "require-email-verification": "Necesita confirmación de e-mail", + "require-email-verification-text": "Nuevos usuarios deben verificar sus e-mails antes de comentar", "include-comment-stream": "Incluir la Descripción a un Hilo de Comentario para los y las Lectoras.", "include-comment-stream-desc": "Escribir un mensaje que será agregado a la parte de arriba del tu hilo de comentarios. Por ejemplo, un tema, guias de comunidad, etc.", "include-text": "Incluir tu texto aqui.", "comment-settings": "Configuración de Comentarios", "embed-comment-stream": "Colocar Hilo de Comentarios", - "enable-premod-links": "Pre-Moderar Commentarios que contienen Links", - "enable-premod-links-text": "Los y las Moderadoras deben probar cualquier comentario que contengan links antes de su publicación.", - "wordlist": "Palabras Suspendidas y Suspechosas", - "banned-word-text": "Comentarios que contengan estas palabras o frases, no separadas por comas y en mayusculas o minusuculas, serán automaticamente separadas de los comentarios publicados.", - "suspect-word-text": "Comments which contain these words or phrases (not case-sensitive) will be highlighted in the comment stream. Type a word and press Enter or Tab to add. Optionally paste a comma-separated list.", - "banned-words-title": "Banned words list", - "suspect-words-title": "Suspect words list", + "enable-premod-links": "Pre-Moderar Commentarios que contienen Enlaces", + "enable-premod-links-text": "Los y las Moderadoras deben aprobar cualquier comentario que contengan links antes de su publicación.", + "wordlist": "Palabras Suspendidas y Sospechosas", + "banned-word-text": "Comentarios que contengan estas palabras o frases, no separadas por comas y en mayusculas o minusuculas, serán automaticamente marcadas para separar los comentarios publicados.", + "suspect-word-text": "Comentarios que contengan estas palabras o frases, considerando mayusculas y minusculas, serán automaticamente destacadas en los comentarios publicados. Escribir una palabra y apretar Enter o Tabulador para agergarla. Opcionalmente pegar una lista separada por coma.", + "banned-words-title": "Lista de palabras prohibidas", + "suspect-words-title": "Lista de palabras sospechosas", "save-changes": "Guardar Cambios", "copy-and-paste": "Copiar y pegar el código de más abajo en tu CMS para colocar la caja de comentarios en tus articulos", "moderate": "Moderar", @@ -268,21 +268,21 @@ "comment-count-text-post": " caracteres", "comment-count-error": "Por favor escribe un número válido.", "domain-list-title": "Lista de Dominios Permitidos", - "domain-list-text": "Agrega dominios permitidos a Talk, e.g. tu localhost, staging y ambientes de production (ex. localhost:3000, staging.domain.com, domain.com)." + "domain-list-text": "Agrega dominios permitidos a Talk, por ejemplo tu localhost, staging y ambientes de producción (ej. localhost:3000, staging.domain.com, domain.com)." }, "embedlink": { "copy": "Copiar" }, "bandialog": { - "ban_user": "Quieres suspender el Usuario?", - "are_you_sure": "Estas segura que quieres suspender a {0}?", - "note": "Nota: Suspender este usuario también va a colocar este comentario en la cola de Rechazados.", + "ban_user": "¿Quieres suspender el Usuario?", + "are_you_sure": "¿Estás segura que quieres suspender a {0}?", + "note": "Nota: Suspender a este usuario también va a colocar este comentario en la cola de Rechazados.", "cancel": "Cancelar", "yes_ban_user": "Si, Suspendan el usuario" }, "dashbord": { "next-update": "{0} minutos hasta la siguiente actualización.", - "auto-update": "Los datos se actualizan automaticamente cada 5 minutos o cuando Recargas.", + "auto-update": "Los datos se actualizan automaticamente cada 5 minutos o cuando recargas.", "no_flags": "¡Nadie ha marcado nada en los últimos 5 minutos! ¡Bravo!", "no_likes": "A nadie le ha gustado algún comentario en los últimos 5 minutos. Todo tranquilo.", "flags": "Marcados", @@ -290,21 +290,19 @@ "comment_count": "comentarios" }, "streams": { - "empty_result": "No se encuentro articulo con esta busqueda. Tal vez extender la busqueda?", - "search": "", - "filter-streams": "", - "stream-status": "", - "all": "", - "open": "", - "closed": "", - "newest": "", - "oldest": "", - "sort-by": "", - "open": "", - "closed": "", + "empty_result": "No se encuentro articulo con esta busqueda. ¿Tal vez puedas extender la busqueda?", + "search": "buscar", + "filter-streams": "Filtrar Hilos de Comentarios", + "stream-status": "Estado del Hilo de Comentarios", + "all": "todxs", + "open": "abrir", + "closed": "cerrado", + "newest": "más nuevoß", + "oldest": "más viejo", + "sort-by": "ordenar por", "article": "artículo", - "pubdate": "", - "status": "" + "pubdate": "Fecha de Pblicación", + "status": "Estado" } } } diff --git a/client/coral-configure/translations.json b/client/coral-configure/translations.json index a40c12bc1..a72166ed4 100644 --- a/client/coral-configure/translations.json +++ b/client/coral-configure/translations.json @@ -20,8 +20,8 @@ "description": "Como Administrador/a puedes modificar las opciones de los comentarios en este artículo", "enablePremod": "Activar Pre Moderación", "enablePremodDescription": "Los y las Moderadoras deben aprobar cualquier comentario antes de su publicación", - "enablePremodLinks": "Pre-Moderar Commentarios que contienen Links", - "enablePremodLinksDescription": "Los y las Moderadoras deben probar cualquier comentario que contengan links antes de su publicación.", + "enablePremodLinks": "Pre-Moderar Comentarios que contienen Enlaces", + "enablePremodLinksDescription": "Los y las moderadoras deben aprobar cualquier comentario que contengan enlaces antes de su publicación.", "enableQuestionBox": "Hacer una pregunta a los y las lectoras.", "enableQuestionBoxDescription": "Esta pregunta aparecera en la parte de arriba del hilo de comentarios.", "includeQuestionHere": "Escribir la pregunta aquí." diff --git a/client/coral-framework/translations.json b/client/coral-framework/translations.json index b327a7097..914cce0fe 100644 --- a/client/coral-framework/translations.json +++ b/client/coral-framework/translations.json @@ -40,13 +40,12 @@ } }, "es": { - "profile": "Perfil", + "profile": "Pérfil", "successUpdateSettings": "La configuración de este articulo fue actualizada", - "successBioUpdate": "Tu bio fue actualizada", + "successBioUpdate": "Tu biografia fue actualizada", "contentNotAvailable": "El contenido no se encuentra disponible", - "bannedAccountMsg": "Tu cuenta se encuentra suspendida. Esto significa que no puedes dar Like, Marcar o escribir commentarios.", - "editNameMsg": "", - "viewMoreComments": "Var commentarios más", + "bannedAccountMsg": "Tu cuenta se encuentra suspendida. Esto significa que no puedes gustar, marcar o escribir commentarios.", + "viewMoreComments": "Ver commentarios más", "viewReply": "ver respuesta", "viewAllRepliesInitial": "ver todas las {0} respuestas", "viewAllReplies": "ver {0} respuestas", @@ -54,22 +53,22 @@ "comment": "commentario", "comments": "commentarios", "error": { - "emailNotVerified": "Dirección de correo electrónico {0} no verificada.", - "email": "No es un email válido", + "emailNotVerified": "E-mail {0} no verificado.", + "email": "No es un e-mail válido", "password": "La contraseña debe tener por lo menos 8 caracteres", "username": "Los nombres pueden contener letras, números y _", "organizationName": "El nombre de la organización debe contener letras y/o números.", "confirmPassword": "Las contraseñas no coinciden", - "emailPasswordError": "Email y/o contraseña incorrecta.", - "EMAIL_REQUIRED": "Se requiere una dirección de correo electrónico", + "emailPasswordError": "E-mail y/o contraseña incorrecta.", + "EMAIL_REQUIRED": "Se requiere un e-mail", "PASSWORD_REQUIRED": "Debe ingresar una contraseña", "PASSWORD_LENGTH": "La contraseña es muy corta", - "EMAIL_IN_USE": "La dirección de correo electrónico se encuentra en uso", - "EMAIL_USERNAME_IN_USE": "Correo o Nombre en uso.", + "EMAIL_IN_USE": "El e-mail se encuentra en uso", + "EMAIL_USERNAME_IN_USE": "E-mail o Nombre en uso.", "USERNAME_IN_USE": "Nombre en uso.", "USERNAME_REQUIRED": "Debe ingresar un nombre", "NO_SPECIAL_CHARACTERS": "Los nombres pueden contener letras, números y _", - "PROFANITY_ERROR": "Los nombres no pueden contener blasfemias. Por favor contacte al administrador si cree que esto es un error", + "PROFANITY_ERROR": "Los nombres no pueden contener blasfemias. Por favor contacte al o la administradora si cree que esto es un error", "NOT_AUTHORIZED": "Acción no autorizada.", "EDIT_USERNAME_NOT_AUTHORIZED": "No tiene permiso para editar el nombre de usuario." } diff --git a/client/coral-plugin-best/translations.json b/client/coral-plugin-best/translations.json index c7dd42be8..6eb4b0572 100644 --- a/client/coral-plugin-best/translations.json +++ b/client/coral-plugin-best/translations.json @@ -5,8 +5,8 @@ "commentIsBest": "This comment is one of the best" }, "es": { - "like": "Establecer como mejor", - "liked": "Desarmado como mejor", + "setBest": "Etiquetar como el mejor", + "unsetBest": "Desetiquetar como el mejor", "commentIsBest": "Este comentario es uno de los mejores" } } diff --git a/client/coral-plugin-commentbox/translations.json b/client/coral-plugin-commentbox/translations.json index 0f77fc334..8ad8b1813 100644 --- a/client/coral-plugin-commentbox/translations.json +++ b/client/coral-plugin-commentbox/translations.json @@ -13,12 +13,12 @@ "es": { "post": "Publicar", "cancel": "Cancelar", - "reply": "Respuesta", - "comment": "Escribe un Comentario", + "reply": "Responder", + "comment": "Publicar un Comentario", "name": "Nombre", "comment-post-notif": "Tu comentario ha sido publicado.", - "comment-post-notif-premod": "Gracias por comentar. Nuestro equipo de moderación va a revisarlo muy pronto.", - "comment-post-banned-word": "Tu comentario contiene una o más palabras que no estan permitidasen nuestro espacio, por lo que no será publicado. Si crees que es un error, por favor contacta a nuestro equipo de moderación.", + "comment-post-notif-premod": "Gracias por el comentario. Nuestro equipo de moderación va a revisarlo muy pronto.", + "comment-post-banned-word": "Tu comentario contiene una o más palabras que no estan permitidas en nuestro espacio, por lo que no será publicado. Si crees que es un error, por favor contacta a nuestro equipo de moderación.", "characters-remaining": "carácteres restantes" } } diff --git a/client/coral-plugin-flags/translations.json b/client/coral-plugin-flags/translations.json index 255e13f3c..69a678db2 100644 --- a/client/coral-plugin-flags/translations.json +++ b/client/coral-plugin-flags/translations.json @@ -25,8 +25,8 @@ "other": "Other" }, "es": { - "report": "Informe", - "reported": "Informado", + "report": "Marca", + "reported": "Marcado", "report-notif": "Gracias por marcar este comentario. Nuestro equipo de moderación ha sido notificado y muy pronto lo va a revisar.", "report-notif-remove": "Tu marca ha sido eliminada.", "step-1-header": "Reportar un problema", @@ -40,13 +40,13 @@ "comment-offensive": "Este comentario es ofensivo", "personal-info": "Este comentario muestra información personal", "username-offensive": "Este nombre de usuario es ofensivo", - "no-like-username": "No me gusta ese nombre de usuario", - "bio-offensive": "Esta bio es ofensiva", - "no-like-bio": "No me gusta esta bio", - "user-impersonating": "Este usario suplanta a alguien", - "marketing": "Esto parece una publicidad/marketing", - "thank-you": "Nos interesa tu protección y comentarios. Un moderador va a mirar tu marca.", - "flag-reason": "Razón por la que marcar (Opcional)", + "no-like-username": "No me gusta este nombre de usuario", + "bio-offensive": "Esta biografia es ofensiva", + "no-like-bio": "No me gusta esta biografia", + "user-impersonating": "Este usuario suplanta a alguien", + "marketing": "Esto parece una propaganda", + "thank-you": "Valoramos tu seguridad en el espacio y comentarios. Un o una moderadora va a mirar tu reporte.", + "flag-reason": "Razón por la que hacer este reporte (Opcional)", "other": "Otro" } } diff --git a/client/coral-plugin-moderation/translations.json b/client/coral-plugin-moderation/translations.json index 331c6e392..6bbe2f9e1 100644 --- a/client/coral-plugin-moderation/translations.json +++ b/client/coral-plugin-moderation/translations.json @@ -3,6 +3,6 @@ "MODERATE_THIS_STREAM": "Moderate this stream" }, "es": { - "MODERATE_THIS_STREAM": "Modera este stream" + "MODERATE_THIS_STREAM": "Modera este hilo de comentarios" } } diff --git a/client/coral-settings/translations.json b/client/coral-settings/translations.json index 945d71b87..7b6ce2344 100644 --- a/client/coral-settings/translations.json +++ b/client/coral-settings/translations.json @@ -10,13 +10,13 @@ "fromSettingsPage": "From the Profile Page you can see your comment history." }, "es":{ - "profile": "Perfil", + "profile": "Pérfil", "userNoComment": "No has dejado áun ningún comentario. ¡Unete a la conversación!", "allComments": "Todos los comentarios", - "profileSettings": "Configuración del perfil", + "profileSettings": "Configuración del pérfil", "myCommentHistory": "Mi historial de comentarios", "signIn": "Entrar", - "toAccess": "para acceder a al perfil", - "fromSettingsPage": "Desde la peagina de configuración puede ver su historia de comentarios." + "toAccess": "para acceder a al pérfil", + "fromSettingsPage": "Desde la peagina de configuración puedes ver tu historia de comentarios." } } diff --git a/client/coral-sign-in/translations.json b/client/coral-sign-in/translations.json index e7e5661b3..824888cca 100644 --- a/client/coral-sign-in/translations.json +++ b/client/coral-sign-in/translations.json @@ -47,15 +47,15 @@ "permalink": "Link" }, "report": "Report", - "like": "Like", + "like": "Like" }, "es": { "signIn": { - "emailVerifyCTA": "Por favor verifique su correo electronico.", + "emailVerifyCTA": "Por favor verifique su e-mail.", "requestNewVerifyEmail": "Enviar otro correo:", "verifyEmail": "¡Gracias por crear una cuenta! Le enviamos un correo a la dirección que dio para verificar su cuenta.", "verifyEmail2": "Debe verificarla antes de poder involucrarse en la comunidad.", - "notYou": "No eres tu?", + "notYou": "¿No eres tu?", "loggedInAs": "Entraste como", "facebookSignIn": "Entrar con Facebook", "facebookSignUp": "Regístrate con Facebook", @@ -64,16 +64,16 @@ "or": "o", "email": "E-mail", "password": "Contraseña", - "forgotYourPass": "Has olvidado tu contraseña?", - "needAnAccount": "Necesitas una cuenta?", + "forgotYourPass": "¿Has olvidado tu contraseña?", + "needAnAccount": "¿Necesitas una cuenta?", "register": "Regístrate", "signUp": "Registro", "confirmPassword": "Confirmar Contraseña", "username": "Nombre", - "alreadyHaveAnAccount": "Ya tienes una cuenta?", + "alreadyHaveAnAccount": "¿Ya tienes una cuenta?", "recoverPassword": "Recuperar contraseña", - "emailInUse": "Este email se encuentra en uso", - "emailORusernameInUse": "Este email ó nombre se encuentran en uso", + "emailInUse": "Este e-mail se encuentra en uso", + "emailORusernameInUse": "Este e-mail ó nombre de usuario se encuentran en uso", "requiredField": "Este campo es requerido", "passwordsDontMatch": "Las contraseñas no coinciden", "specialCharacters": "Los nombres pueden contener letras, números y _", @@ -90,13 +90,13 @@ "fakecommentbody": "Este es un comentario de ejemplo. Las lectoras pueden compartir sus ideas y opiniones con los periodistas en la sección de comentarios.", "requiredField": "Campo necesario", "errorCreate": "Hubo un error al cambiar el nombre de usuario", - "checkTheForm": "Formulario Invalido. Por favor, verifica los campos", + "checkTheForm": "Formulario Inválido. Por favor, verifica los campos", "specialCharacters": "Sólo pueden contener letras, números y _" }, "permalink": { "permalink": "Enlace" }, - "report": "Informe", - "like": "Me gusta", + "report": "Marcar", + "like": "Me gusta" } } From 984514d7ebdf0f76c1cc66fc24b8d98fadb97018 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Thu, 23 Mar 2017 12:46:20 -0600 Subject: [PATCH 07/44] check whitelist before redirecting --- services/users.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/services/users.js b/services/users.js index ac1280664..0bce64425 100644 --- a/services/users.js +++ b/services/users.js @@ -1,4 +1,5 @@ const bcrypt = require('bcrypt'); +const url = require('url'); const jwt = require('jsonwebtoken'); const Wordlist = require('./wordlist'); const errors = require('../errors'); @@ -13,6 +14,7 @@ const USER_ROLES = require('../models/user').USER_ROLES; const RECAPTCHA_WINDOW_SECONDS = 60 * 10; // 10 minutes. const RECAPTCHA_INCORRECT_TRIGGER = 5; // after 3 incorrect attempts, recaptcha will be required. +const SettingsService = require('./settings'); const ActionsService = require('./actions'); // In the event that the TALK_SESSION_SECRET is missing but we are testing, then @@ -485,8 +487,11 @@ module.exports = class UsersService { email = email.toLowerCase(); - return UserModel.findOne({profiles: {$elemMatch: {id: email}}}) - .then((user) => { + return Promise.all([ + UserModel.findOne({profiles: {$elemMatch: {id: email}}}), + SettingsService.retrieve() + ]) + .then(([user, settings]) => { if (!user) { // Since we don't want to reveal that the email does/doesn't exist @@ -495,6 +500,17 @@ module.exports = class UsersService { return; } + let redirectDomain; + try { + redirectDomain = url.parse(loc).hostname; + } catch (e) { + return Promise.reject('redirect location is invalid'); + } + + if (settings.domains.whitelist.indexOf(redirectDomain) === -1) { + return Promise.reject('redirect location is not on the list of acceptable domains'); + } + const payload = { jti: uuid.v4(), email, From 7f1b993ea6e0378270d3b379ad902a5a8d622aa9 Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Thu, 23 Mar 2017 13:04:37 -0600 Subject: [PATCH 08/44] always show moderation link to admins --- client/coral-embed-stream/src/Embed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/coral-embed-stream/src/Embed.js b/client/coral-embed-stream/src/Embed.js index 52fdf06f5..a3d2a24a9 100644 --- a/client/coral-embed-stream/src/Embed.js +++ b/client/coral-embed-stream/src/Embed.js @@ -160,7 +160,6 @@ class Embed extends Component { charCount={asset.settings.charCountEnable && asset.settings.charCount} /> : null } - :

{asset.settings.closedMessage}

@@ -170,6 +169,7 @@ class Embed extends Component { refetch={refetch} offset={signInOffset}/>} {loggedIn && user && } + {loggedIn && } { highlightedComment && Date: Thu, 23 Mar 2017 14:48:15 -0700 Subject: [PATCH 09/44] Fix params for moduserflaggedquery. --- .../containers/Community/FlaggedAccounts.js | 27 +++++++++---------- .../coral-admin/src/graphql/queries/index.js | 10 ++++++- .../queries/modUserFlaggedQuery.graphql | 4 +-- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/client/coral-admin/src/containers/Community/FlaggedAccounts.js b/client/coral-admin/src/containers/Community/FlaggedAccounts.js index 1a6d349c8..692cef70d 100644 --- a/client/coral-admin/src/containers/Community/FlaggedAccounts.js +++ b/client/coral-admin/src/containers/Community/FlaggedAccounts.js @@ -7,13 +7,15 @@ const lang = new I18n(translations); import styles from './Community.css'; import Loading from './Loading'; -import EmptyCard from '../../components/EmptyCard'; +import EmptyCard from 'coral-admin/src/components/EmptyCard'; import User from './components/User'; const FlaggedAccounts = ({...props}) => { const {commenters, isFetching} = props; const hasResults = !isFetching && commenters && !!commenters.length; +// if (commenter.status === 'PENDING' && commenter.actions.length > 0) { + return (
@@ -21,19 +23,16 @@ const FlaggedAccounts = ({...props}) => { { hasResults ? commenters.map((commenter, index) => { - if (commenter.status === 'PENDING' && commenter.actions.length > 0) { - return ; - } - return null; + return ; }) : {lang.t('community.no-flagged-accounts')} } diff --git a/client/coral-admin/src/graphql/queries/index.js b/client/coral-admin/src/graphql/queries/index.js index 291ea6bc5..f0e8e5b70 100644 --- a/client/coral-admin/src/graphql/queries/index.js +++ b/client/coral-admin/src/graphql/queries/index.js @@ -67,7 +67,15 @@ export const loadMore = (fetchMore) => ({limit, cursor, sort, tab, asset_id}) => }); }; -export const modUserFlaggedQuery = graphql(MOD_USER_FLAGGED_QUERY); +export const modUserFlaggedQuery = graphql(MOD_USER_FLAGGED_QUERY, { + options: ({params: {action_type = 'FLAG'}}) => { + return { + variables: { + action_type: action_type + } + }; + } +}); export const modQueueResort = (id, fetchMore) => (sort) => { return fetchMore({ diff --git a/client/coral-admin/src/graphql/queries/modUserFlaggedQuery.graphql b/client/coral-admin/src/graphql/queries/modUserFlaggedQuery.graphql index 98f2191eb..c99d94583 100644 --- a/client/coral-admin/src/graphql/queries/modUserFlaggedQuery.graphql +++ b/client/coral-admin/src/graphql/queries/modUserFlaggedQuery.graphql @@ -1,5 +1,5 @@ -query Users ($n: ACTION_TYPE) { - users (query:{action_type: $n}){ +query Users ($action_type: ACTION_TYPE) { + users (query:{action_type: $action_type}){ id username status From 6b6d3d8bbbc70e3e3586101620c91f627c52c7fd Mon Sep 17 00:00:00 2001 From: riley Date: Thu, 23 Mar 2017 16:09:36 -0600 Subject: [PATCH 10/44] highlight suspect, banned words and links --- .../ModerationQueue/ModerationContainer.js | 1 + .../containers/ModerationQueue/ModerationQueue.js | 2 ++ .../ModerationQueue/components/Comment.js | 13 +++++-------- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js b/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js index a6d3527c7..61352b921 100644 --- a/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js +++ b/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js @@ -163,6 +163,7 @@ class ModerationContainer extends Component { activeTab={activeTab} singleView={moderation.singleView} selectedIndex={this.state.selectedIndex} + bannedWords={settings.wordlist.banned} suspectWords={settings.wordlist.suspect} showBanUserDialog={props.showBanUserDialog} acceptComment={props.acceptComment} diff --git a/client/coral-admin/src/containers/ModerationQueue/ModerationQueue.js b/client/coral-admin/src/containers/ModerationQueue/ModerationQueue.js index b90b59f81..79b4ce7e4 100644 --- a/client/coral-admin/src/containers/ModerationQueue/ModerationQueue.js +++ b/client/coral-admin/src/containers/ModerationQueue/ModerationQueue.js @@ -24,6 +24,7 @@ const ModerationQueue = ({comments, selectedIndex, commentCount, singleView, loa commentType={activeTab} selected={i === selectedIndex} suspectWords={props.suspectWords} + bannedWords={props.bannedWords} actions={actionsMap[status]} showBanUserDialog={props.showBanUserDialog} acceptComment={props.acceptComment} @@ -47,6 +48,7 @@ const ModerationQueue = ({comments, selectedIndex, commentCount, singleView, loa }; ModerationQueue.propTypes = { + bannedWords: PropTypes.arrayOf(PropTypes.string).isRequired, suspectWords: PropTypes.arrayOf(PropTypes.string).isRequired, currentAsset: PropTypes.object, showBanUserDialog: PropTypes.func.isRequired, diff --git a/client/coral-admin/src/containers/ModerationQueue/components/Comment.js b/client/coral-admin/src/containers/ModerationQueue/components/Comment.js index 36ff7763a..3dd5526fe 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/Comment.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/Comment.js @@ -19,6 +19,7 @@ const lang = new I18n(translations); const Comment = ({actions = [], ...props}) => { const links = linkify.getMatches(props.comment.body); + const linkText = links ? links.map(link => link.raw) : []; const actionSummaries = props.comment.action_summaries; return (
  • @@ -49,9 +50,9 @@ const Comment = ({actions = [], ...props}) => {
  • - - - +

    {links ? Contains Link : null} @@ -77,6 +78,7 @@ Comment.propTypes = { acceptComment: PropTypes.func.isRequired, rejectComment: PropTypes.func.isRequired, suspectWords: PropTypes.arrayOf(PropTypes.string).isRequired, + bannedWords: PropTypes.arrayOf(PropTypes.string).isRequired, currentAsset: PropTypes.object, comment: PropTypes.shape({ body: PropTypes.string.isRequired, @@ -92,9 +94,4 @@ Comment.propTypes = { }) }; -const linkStyles = { - backgroundColor: 'rgb(255, 219, 135)', - padding: '1px 2px' -}; - export default Comment; From 84f1d3ece26354b38da156783a6464a92bacd7cd Mon Sep 17 00:00:00 2001 From: gaba Date: Thu, 23 Mar 2017 16:02:25 -0700 Subject: [PATCH 11/44] Use findONeAndUpdate and the moderation queue for account flags should only give back pending accounts. --- client/coral-admin/src/constants/comments.js | 2 + .../Community/components/SuspendUserDialog.js | 2 +- graph/resolvers/root_query.js | 2 +- services/users.js | 42 +++++++++---------- 4 files changed, 23 insertions(+), 25 deletions(-) diff --git a/client/coral-admin/src/constants/comments.js b/client/coral-admin/src/constants/comments.js index 603a3ce00..98f2e039d 100644 --- a/client/coral-admin/src/constants/comments.js +++ b/client/coral-admin/src/constants/comments.js @@ -1,5 +1,7 @@ export const SHOW_BANUSER_DIALOG = 'SHOW_BANUSER_DIALOG'; export const HIDE_BANUSER_DIALOG = 'HIDE_BANUSER_DIALOG'; +export const SHOW_SUSPENDUSER_DIALOG = 'SHOW_SUSPENDUSER_DIALOG'; +export const HIDE_SUSPENDUSER_DIALOG = 'HIDE_SUSPENDUSER_DIALOG'; export const COMMENTS_MODERATION_QUEUE_FETCH_REQUEST = 'COMMENTS_MODERATION_QUEUE_FETCH_REQUEST'; export const COMMENTS_MODERATION_QUEUE_FETCH_SUCCESS = 'COMMENTS_MODERATION_QUEUE_FETCH_SUCCESS'; export const COMMENT_CREATE_SUCCESS = 'COMMENT_CREATE_SUCCESS'; diff --git a/client/coral-admin/src/containers/Community/components/SuspendUserDialog.js b/client/coral-admin/src/containers/Community/components/SuspendUserDialog.js index 44f38f796..20e221c48 100644 --- a/client/coral-admin/src/containers/Community/components/SuspendUserDialog.js +++ b/client/coral-admin/src/containers/Community/components/SuspendUserDialog.js @@ -49,7 +49,7 @@ class SuspendUserDialog extends Component { const {suspendUser, user} = this.props; const {stage} = this.state; - const cancel = this.props.onClose; + const cancel = this.props.handleClose; const next = () => this.setState({stage: stage + 1}); const suspend = () => { suspendUser({userId: user.user.id, message: this.state.email}) diff --git a/graph/resolvers/root_query.js b/graph/resolvers/root_query.js index ce11fcae9..6f4151ff6 100644 --- a/graph/resolvers/root_query.js +++ b/graph/resolvers/root_query.js @@ -103,7 +103,7 @@ const RootQuery = { .then((ids) => { // Perform the query using the available resolver. - return Users.getByQuery({ids, limit, cursor, sort}); + return Users.getByQuery({ids, limit, cursor, sort}).find({status: 'PENDING'}); }); } diff --git a/services/users.js b/services/users.js index 4e1196252..6c309977f 100644 --- a/services/users.js +++ b/services/users.js @@ -456,7 +456,7 @@ module.exports = class UsersService { * @param {Function} done callback after the operation is complete */ static suspendUser(id, message) { - return UserModel.update({ + return UserModel.findOneAndUpdate({ id }, { $set: { @@ -464,31 +464,27 @@ module.exports = class UsersService { canEditName: true } }) - .then(() => { - return UsersService.findById(id) - .then((user) => { - if (message) { - let localProfile = user.profiles.find((profile) => profile.provider === 'local'); + .then((user) => { + if (message) { + let localProfile = user.profiles.find((profile) => profile.provider === 'local'); - if (localProfile) { - const options = - { - template: 'suspension', // needed to know which template to render! - locals: { // specifies the template locals. - body: message - }, - subject: 'Email Suspension', - to: localProfile.id // This only works if the user has registered via e-mail. - // We may want a standard way to access a user's e-mail address in the future - }; + if (localProfile) { + const options = + { + template: 'suspension', // needed to know which template to render! + locals: { // specifies the template locals. + body: message + }, + subject: 'Email Suspension', + to: localProfile.id // This only works if the user has registered via e-mail. + // We may want a standard way to access a user's e-mail address in the future + }; - return MailerService.sendSimple(options); - } else { - return Promise.reject(errors.ErrMissingEmail); - } + return MailerService.sendSimple(options); + } else { + return Promise.reject(errors.ErrMissingEmail); } - }); - + } }); } From 323749915aca08937c00ea84c49f05efbe03e332 Mon Sep 17 00:00:00 2001 From: gaba Date: Fri, 24 Mar 2017 08:59:43 -0700 Subject: [PATCH 12/44] CSS alignments --- client/coral-admin/src/containers/Community/Community.css | 2 +- .../coral-admin/src/containers/Community/components/User.js | 4 ++-- client/coral-admin/src/translations.json | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/client/coral-admin/src/containers/Community/Community.css b/client/coral-admin/src/containers/Community/Community.css index 958e41ccb..4a78f7991 100644 --- a/client/coral-admin/src/containers/Community/Community.css +++ b/client/coral-admin/src/containers/Community/Community.css @@ -301,7 +301,6 @@ } } - .actionButton { transform: scale(.8); margin: 0; @@ -323,4 +322,5 @@ .flaggedReasons { padding-top: 15px; + margin-left: 24px; } diff --git a/client/coral-admin/src/containers/Community/components/User.js b/client/coral-admin/src/containers/Community/components/User.js index 71598e352..20b599a7a 100644 --- a/client/coral-admin/src/containers/Community/components/User.js +++ b/client/coral-admin/src/containers/Community/components/User.js @@ -35,7 +35,7 @@ const User = props => {
    - flagFlags({ user.actions.length }): + flag{lang.t('community.flags')}({ user.actions.length }): { user.action_summaries.map( (action, i ) => { return @@ -67,8 +67,8 @@ const User = props => { } )} +
    -
    {modActionButtons.map((action, i) => diff --git a/client/coral-admin/src/translations.json b/client/coral-admin/src/translations.json index f59499e50..390a268a1 100644 --- a/client/coral-admin/src/translations.json +++ b/client/coral-admin/src/translations.json @@ -18,6 +18,7 @@ "banned": "Banned", "banned-user": "Banned User", "loading": "Loading results", + "flags": "Flags", "flaggedaccounts": "Flagged Usernames", "people": "People", "no-flagged-accounts": "The Account Flags queue is currently empty.", @@ -177,6 +178,7 @@ "banned": "Suspendido", "banned-user": "Usuario Suspendido", "loading": "Cargando resultados", + "flags": "Reporte", "flaggedaccounts": "Nombres de Usuario Reportados", "people": "Gente", "no-flagged-accounts": "No hay ninguna cuenta reportada.", From 05efbc4ded734c80cfd2a0a0b889716c63880a1f Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Fri, 24 Mar 2017 10:15:03 -0600 Subject: [PATCH 13/44] Updated lockfile --- yarn.lock | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index ef0b4fa82..114dbe4aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4188,10 +4188,6 @@ jsbn@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" -jsdom-global@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/jsdom-global/-/jsdom-global-2.1.1.tgz#47d46fe77f6167baf5d34431d3bb59fc41b0915a" - jsdom@^7.0.2: version "7.2.2" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-7.2.2.tgz#40b402770c2bda23469096bee91ab675e3b1fc6e" @@ -4212,7 +4208,7 @@ jsdom@^7.0.2: whatwg-url-compat "~0.6.5" xml-name-validator ">= 2.0.1 < 3.0.0" -jsdom@^9.12.0: +jsdom@^9.8.3: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" dependencies: From 5d5ad2585de716abb006f00b21c70c9f06327e75 Mon Sep 17 00:00:00 2001 From: riley Date: Fri, 24 Mar 2017 10:40:12 -0600 Subject: [PATCH 14/44] autoclose an article toggle --- .../src/containers/Configure/StreamSettings.js | 10 ++++++++++ models/setting.js | 4 ++++ services/assets.js | 14 +++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/client/coral-admin/src/containers/Configure/StreamSettings.js b/client/coral-admin/src/containers/Configure/StreamSettings.js index 4725221ce..26bd103ca 100644 --- a/client/coral-admin/src/containers/Configure/StreamSettings.js +++ b/client/coral-admin/src/containers/Configure/StreamSettings.js @@ -37,6 +37,11 @@ const updateInfoBoxContent = (updateSettings) => (event) => { updateSettings({infoBoxContent}); }; +const updateAutoClose = (updateSettings, autoCloseStream) => () => { + console.log('autoCloseStream', autoCloseStream); + updateSettings({autoCloseStream}); +}; + const updateClosedMessage = (updateSettings) => (event) => { const closedMessage = event.target.value; updateSettings({closedMessage}); @@ -131,6 +136,11 @@ const StreamSettings = ({updateSettings, settingsError, settings, errors}) => {
    +
    + +
    {lang.t('configure.close-after')}
    diff --git a/models/setting.js b/models/setting.js index ac54584a4..e63fa8f3e 100644 --- a/models/setting.js +++ b/models/setting.js @@ -47,6 +47,10 @@ const SettingSchema = new Schema({ organizationName: { type: String }, + autoCloseStream: { + type: Boolean, + default: false + }, closedTimeout: { type: Number, diff --git a/services/assets.js b/services/assets.js index f8f795263..8397600a7 100644 --- a/services/assets.js +++ b/services/assets.js @@ -57,12 +57,24 @@ module.exports = class AssetsService { static findOrCreateByUrl(url) { // Check the URL to confirm that is in the domain whitelist - return domainlist.urlCheck(url).then((whitelisted) => { + return Promise.all([ + domainlist.urlCheck(url), + SettingsService.retrieve() + ]).then(([whitelisted, settings]) => { + + const setOnInsert = {url}; + + if (settings.autoCloseStream) { + setOnInsert.closedAt = new Date(Date.now() + settings.closedTimeout * 1000); + } + if (!whitelisted) { return Promise.reject(errors.ErrInvalidAssetURL); } else { return AssetModel.findOneAndUpdate({url}, {url}, { + $setOnInsert: setOnInsert, + // Ensure that if it's new, we return the new object created. new: true, From 701994f8f796d38442893815385ea33a4b43d494 Mon Sep 17 00:00:00 2001 From: riley Date: Fri, 24 Mar 2017 10:42:31 -0600 Subject: [PATCH 15/44] pass lint --- .../src/containers/Configure/StreamSettings.js | 1 - .../ModerationQueue/components/ModerationMenu.js | 8 ++++---- client/coral-plugin-history/Comment.js | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/client/coral-admin/src/containers/Configure/StreamSettings.js b/client/coral-admin/src/containers/Configure/StreamSettings.js index 26bd103ca..ab0ef6af6 100644 --- a/client/coral-admin/src/containers/Configure/StreamSettings.js +++ b/client/coral-admin/src/containers/Configure/StreamSettings.js @@ -38,7 +38,6 @@ const updateInfoBoxContent = (updateSettings) => (event) => { }; const updateAutoClose = (updateSettings, autoCloseStream) => () => { - console.log('autoCloseStream', autoCloseStream); updateSettings({autoCloseStream}); }; diff --git a/client/coral-admin/src/containers/ModerationQueue/components/ModerationMenu.js b/client/coral-admin/src/containers/ModerationQueue/components/ModerationMenu.js index e428f6a52..0606fdb81 100644 --- a/client/coral-admin/src/containers/ModerationQueue/components/ModerationMenu.js +++ b/client/coral-admin/src/containers/ModerationQueue/components/ModerationMenu.js @@ -1,15 +1,15 @@ -import React, { PropTypes } from 'react'; +import React, {PropTypes} from 'react'; import CommentCount from './CommentCount'; import styles from './styles.css'; -import { SelectField, Option } from 'react-mdl-selectfield'; +import {SelectField, Option} from 'react-mdl-selectfield'; import I18n from 'coral-framework/modules/i18n/i18n'; import translations from 'coral-admin/src/translations.json'; -import { Link } from 'react-router'; +import {Link} from 'react-router'; const lang = new I18n(translations); const ModerationMenu = ( - { asset, premodCount, rejectedCount, flaggedCount, selectSort, sort } + {asset, premodCount, rejectedCount, flaggedCount, selectSort, sort} ) => { const premodPath = asset ? `/admin/moderate/premod/${asset.id}` diff --git a/client/coral-plugin-history/Comment.js b/client/coral-plugin-history/Comment.js index 707939536..617d0a04f 100644 --- a/client/coral-plugin-history/Comment.js +++ b/client/coral-plugin-history/Comment.js @@ -1,5 +1,5 @@ -import React, { PropTypes } from 'react'; -import { Icon } from '../coral-ui'; +import React, {PropTypes} from 'react'; +import {Icon} from '../coral-ui'; import styles from './Comment.css'; import PubDate from '../coral-plugin-pubdate/PubDate'; import Content from '../coral-plugin-commentcontent/CommentContent'; From 228fdeac4da20e2bdfcf3e4c8a8c050faf95e2ee Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Fri, 24 Mar 2017 11:12:57 -0600 Subject: [PATCH 16/44] Removed root .babelrc file, upgrades - Upgraded packages - Fixed sourcemaps - Moved .babelrc config into client folder - Created .babelrc in tests folder for client tests --- .babelrc | 14 - client/.babelrc | 10 +- package.json | 56 +-- test/client/.babelrc | 3 + webpack.config.js | 5 +- yarn.lock | 799 ++++++++++++++++++++++++++++--------------- 6 files changed, 567 insertions(+), 320 deletions(-) delete mode 100644 .babelrc create mode 100644 test/client/.babelrc diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 6186cefaf..000000000 --- a/.babelrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "sourceMaps": true, - "presets": [ - "es2015" - ], - "plugins": [ - "add-module-exports", - "transform-class-properties", - "transform-decorators-legacy", - "transform-object-assign", - "transform-object-rest-spread", - "transform-react-jsx" - ] -} diff --git a/client/.babelrc b/client/.babelrc index 27289288c..63b1c53de 100644 --- a/client/.babelrc +++ b/client/.babelrc @@ -1,6 +1,14 @@ { - "extends": "../.babelrc", + "presets": [ + "es2015" + ], "plugins": [ + "add-module-exports", + "transform-class-properties", + "transform-decorators-legacy", + "transform-object-assign", + "transform-object-rest-spread", "transform-async-to-generator", + "transform-react-jsx" ] } diff --git a/package.json b/package.json index 909452231..19db0b7e7 100644 --- a/package.json +++ b/package.json @@ -50,34 +50,34 @@ "homepage": "https://github.com/coralproject/talk#readme", "dependencies": { "bcrypt": "^1.0.2", - "body-parser": "^1.15.2", + "body-parser": "^1.17.1", "cli-table": "^0.3.1", "commander": "^2.9.0", "connect-redis": "^3.1.0", "csurf": "^1.9.0", - "dataloader": "^1.2.0", - "debug": "^2.2.0", + "dataloader": "^1.3.0", + "debug": "^2.6.3", "dotenv": "^4.0.0", - "ejs": "^2.5.2", + "ejs": "^2.5.6", "env-rewrite": "^1.0.2", - "express": "^4.14.0", - "express-session": "^1.14.2", - "gql-merge": "^0.0.4", + "express": "^4.15.2", + "express-session": "^1.15.1", "form-data": "^2.1.2", + "gql-merge": "^0.0.4", "graphql": "^0.8.2", "graphql-errors": "^2.1.0", "graphql-server-express": "^0.5.0", "graphql-tools": "^0.9.0", - "helmet": "^3.1.0", - "inquirer": "^3.0.1", - "jsonwebtoken": "^7.1.9", + "helmet": "^3.5.0", + "inquirer": "^3.0.6", + "jsonwebtoken": "^7.3.0", "kue": "^0.11.5", "linkify-it": "^2.0.3", "lodash": "^4.16.6", "metascraper": "^1.0.6", "minimist": "^1.2.0", - "mongoose": "^4.6.5", - "morgan": "^1.7.0", + "mongoose": "^4.9.1", + "morgan": "^1.8.1", "natural": "^0.4.0", "node-fetch": "^1.6.3", "nodemailer": "^2.6.4", @@ -87,31 +87,31 @@ "passport-local": "^1.0.0", "react-apollo": "^0.10.0", "react-recaptcha": "^2.2.6", - "redis": "^2.6.5", + "redis": "^2.7.1", "uuid": "^2.0.3" }, "devDependencies": { "apollo-client": "^0.8.3", "autoprefixer": "^6.5.2", - "babel-core": "^6.21.0", - "babel-eslint": "^7.1.0", - "babel-jest": "^15.0.0", - "babel-loader": "^6.2.7", + "babel-core": "^6.24.0", + "babel-eslint": "^7.2.1", + "babel-jest": "^19.0.0", + "babel-loader": "^6.4.1", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-transform-async-to-generator": "^6.16.0", - "babel-plugin-transform-class-properties": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.23.0", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-object-assign": "^6.8.0", - "babel-plugin-transform-object-rest-spread": "^6.16.0", - "babel-plugin-transform-react-jsx": "^6.8.0", - "babel-polyfill": "^6.16.0", - "babel-preset-es2015": "^6.18.0", + "babel-plugin-transform-object-rest-spread": "^6.23.0", + "babel-plugin-transform-react-jsx": "^6.23.0", + "babel-polyfill": "^6.23.0", + "babel-preset-es2015": "^6.24.0", "babel-preset-stage-0": "^6.16.0", "chai": "^3.5.0", "chai-as-promised": "^6.0.0", "chai-http": "^3.0.0", "copy-webpack-plugin": "^4.0.0", - "css-loader": "^0.25.0", + "css-loader": "^0.27.3", "dialog-polyfill": "^0.4.4", "enzyme": "^2.6.0", "eslint": "^3.12.1", @@ -124,14 +124,14 @@ "eslint-plugin-promise": "^3.3.1", "eslint-plugin-react": "^6.6.0", "eslint-plugin-standard": "^2.0.1", - "exports-loader": "^0.6.3", + "exports-loader": "^0.6.4", "fetch-mock": "^5.5.0", "graphql-docs": "^0.2.0", "graphql-tag": "^1.2.3", "hammerjs": "^2.0.8", "ignore-styles": "^5.0.1", "immutable": "^3.8.1", - "imports-loader": "^0.6.5", + "imports-loader": "^0.7.1", "istanbul": "^1.1.0-alpha.1", "jsdom": "^9.8.3", "json-loader": "^0.5.4", @@ -142,7 +142,7 @@ "mocha-junit-reporter": "^1.12.1", "nightwatch": "^0.9.11", "nodemon": "^1.11.0", - "postcss-loader": "^1.1.0", + "postcss-loader": "^1.3.3", "postcss-modules": "^0.5.2", "postcss-smart-import": "^0.5.1", "pre-git": "^3.10.0", @@ -164,10 +164,10 @@ "redux-thunk": "^2.1.0", "regenerator": "^0.8.46", "selenium-standalone": "^5.11.2", - "style-loader": "^0.13.1", + "style-loader": "^0.16.0", "supertest": "^2.0.1", "timeago.js": "^2.0.3", - "webpack": "^2.2.1" + "webpack": "^2.3.1" }, "engines": { "node": "^7.7.0" diff --git a/test/client/.babelrc b/test/client/.babelrc new file mode 100644 index 000000000..9bd819c32 --- /dev/null +++ b/test/client/.babelrc @@ -0,0 +1,3 @@ +{ + "extends": "../../client/.babelrc" +} diff --git a/webpack.config.js b/webpack.config.js index 432bb6155..3914dee2f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -17,7 +17,7 @@ const buildEmbeds = [ ]; module.exports = { - devtool: '#cheap-module-source-map', + devtool: 'cheap-module-source-map', entry: Object.assign({}, { 'embed': [ 'babel-polyfill', @@ -58,8 +58,7 @@ module.exports = { exclude: /node_modules/, test: /\.js$/, query: { - cacheDirectory: true, - sourceMap: true + cacheDirectory: true } }, { diff --git a/yarn.lock b/yarn.lock index 114dbe4aa..81ddf18b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -329,10 +329,6 @@ async@2.1.4, async@^2.1.2, async@^2.1.4: dependencies: lodash "^4.14.0" -async@~0.2.6: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - async@~0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" @@ -368,19 +364,19 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.0.0, babel-core@^6.21.0, babel-core@^6.22.0: - version "6.22.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648" +babel-core@^6.0.0, babel-core@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.0.tgz#8f36a0a77f5c155aed6f920b844d23ba56742a02" dependencies: babel-code-frame "^6.22.0" - babel-generator "^6.22.0" - babel-helpers "^6.22.0" - babel-messages "^6.22.0" - babel-register "^6.22.0" + babel-generator "^6.24.0" + babel-helpers "^6.23.0" + babel-messages "^6.23.0" + babel-register "^6.24.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.1" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.1" + babel-types "^6.23.0" babylon "^6.11.0" convert-source-map "^1.1.0" debug "^2.1.1" @@ -392,17 +388,16 @@ babel-core@^6.0.0, babel-core@^6.21.0, babel-core@^6.22.0: slash "^1.0.0" source-map "^0.5.0" -babel-eslint@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.1.1.tgz#8a6a884f085aa7060af69cfc77341c2f99370fb2" +babel-eslint@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.1.tgz#079422eb73ba811e3ca0865ce87af29327f8c52f" dependencies: - babel-code-frame "^6.16.0" - babel-traverse "^6.15.0" - babel-types "^6.15.0" - babylon "^6.13.0" - lodash.pickby "^4.6.0" + babel-code-frame "^6.22.0" + babel-traverse "^6.23.1" + babel-types "^6.23.0" + babylon "^6.16.1" -babel-generator@^6.18.0, babel-generator@^6.22.0: +babel-generator@^6.18.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" dependencies: @@ -414,6 +409,19 @@ babel-generator@^6.18.0, babel-generator@^6.22.0: lodash "^4.2.0" source-map "^0.5.0" +babel-generator@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.0.tgz#eba270a8cc4ce6e09a61be43465d7c62c1f87c56" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.23.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + babel-helper-bindify-decorators@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.22.0.tgz#d7f5bc261275941ac62acfc4e20dacfb8a3fe952" @@ -430,12 +438,12 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.22.0" -babel-helper-builder-react-jsx@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.22.0.tgz#aafb31913e47761fd4d0b6987756a144a65fca0d" +babel-helper-builder-react-jsx@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.23.0.tgz#d53fc8c996e0bc56d0de0fc4cc55a7138395ea4b" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.23.0" esutils "^2.0.0" lodash "^4.2.0" @@ -484,6 +492,16 @@ babel-helper-function-name@^6.22.0: babel-traverse "^6.22.0" babel-types "^6.22.0" +babel-helper-function-name@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.23.0.tgz#25742d67175c8903dbe4b6cb9d9e1fcb8dcf23a6" + dependencies: + babel-helper-get-function-arity "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" + babel-helper-get-function-arity@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" @@ -534,27 +552,27 @@ babel-helper-replace-supers@^6.22.0: babel-traverse "^6.22.0" babel-types "^6.22.0" -babel-helpers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c" +babel-helpers@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.23.0.tgz#4f8f2e092d0b6a8808a4bde79c27f1e2ecf0d992" dependencies: babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.23.0" -babel-jest@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-15.0.0.tgz#6a9e2e3999f241383db9ab1e2ef6704401d74242" +babel-jest@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f" dependencies: babel-core "^6.0.0" - babel-plugin-istanbul "^2.0.0" - babel-preset-jest "^15.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^19.0.0" -babel-loader@^6.2.7: - version "6.2.10" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.10.tgz#adefc2b242320cd5d15e65b31cea0e8b1b02d4b0" +babel-loader@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" dependencies: find-cache-dir "^0.1.1" - loader-utils "^0.2.11" + loader-utils "^0.2.16" mkdirp "^0.5.1" object-assign "^4.0.1" @@ -564,6 +582,12 @@ babel-messages@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + babel-plugin-add-module-exports@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz#9ae9a1f4a8dc67f0cdec4f4aeda1e43a5ff65e25" @@ -574,18 +598,17 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-istanbul@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-2.0.3.tgz#266b304b9109607d60748474394676982f660df4" +babel-plugin-istanbul@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.1.tgz#c12de0fc6fe42adfb16be56f1ad11e4a9782eca9" dependencies: - find-up "^1.1.2" - istanbul-lib-instrument "^1.1.4" - object-assign "^4.1.0" - test-exclude "^2.1.1" + find-up "^2.1.0" + istanbul-lib-instrument "^1.6.2" + test-exclude "^4.0.3" -babel-plugin-jest-hoist@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-15.0.0.tgz#7b2fdbd0cd12fc36a84d3f5ff001ec504262bb59" +babel-plugin-jest-hoist@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" @@ -663,7 +686,7 @@ babel-plugin-transform-class-constructor-call@^6.22.0: babel-runtime "^6.22.0" babel-template "^6.22.0" -babel-plugin-transform-class-properties@^6.18.0, babel-plugin-transform-class-properties@^6.22.0: +babel-plugin-transform-class-properties@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.22.0.tgz#aa78f8134495c7de06c097118ba061844e1dc1d8" dependencies: @@ -672,6 +695,15 @@ babel-plugin-transform-class-properties@^6.18.0, babel-plugin-transform-class-pr babel-runtime "^6.22.0" babel-template "^6.22.0" +babel-plugin-transform-class-properties@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.23.0.tgz#187b747ee404399013563c993db038f34754ac3b" + dependencies: + babel-helper-function-name "^6.23.0" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.23.0" + babel-plugin-transform-decorators-legacy@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz#741b58f6c5bce9e6027e0882d9c994f04f366925" @@ -773,22 +805,22 @@ babel-plugin-transform-es2015-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-modules-amd@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.22.0.tgz#bf69cd34889a41c33d90dfb740e0091ccff52f21" +babel-plugin-transform-es2015-modules-amd@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.0.tgz#a1911fb9b7ec7e05a43a63c5995007557bcf6a2e" dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.24.0" babel-runtime "^6.22.0" babel-template "^6.22.0" -babel-plugin-transform-es2015-modules-commonjs@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145" +babel-plugin-transform-es2015-modules-commonjs@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.0.tgz#e921aefb72c2cc26cb03d107626156413222134f" dependencies: babel-plugin-transform-strict-mode "^6.22.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-types "^6.23.0" babel-plugin-transform-es2015-modules-systemjs@^6.22.0: version "6.22.0" @@ -798,13 +830,13 @@ babel-plugin-transform-es2015-modules-systemjs@^6.22.0: babel-runtime "^6.22.0" babel-template "^6.22.0" -babel-plugin-transform-es2015-modules-umd@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae" +babel-plugin-transform-es2015-modules-umd@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.0.tgz#fd5fa63521cae8d273927c3958afd7c067733450" dependencies: - babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.23.0" babel-plugin-transform-es2015-object-super@^6.22.0: version "6.22.0" @@ -893,18 +925,25 @@ babel-plugin-transform-object-assign@^6.8.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-object-rest-spread@^6.16.0, babel-plugin-transform-object-rest-spread@^6.22.0: +babel-plugin-transform-object-rest-spread@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc" dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-jsx@^6.8.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.22.0.tgz#48556b7dd4c3fe97d1c943bcd54fc3f2561c1817" +babel-plugin-transform-object-rest-spread@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" dependencies: - babel-helper-builder-react-jsx "^6.22.0" + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.23.0.tgz#23e892f7f2e759678eb5e4446a8f8e94e81b3470" + dependencies: + babel-helper-builder-react-jsx "^6.23.0" babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" @@ -921,17 +960,17 @@ babel-plugin-transform-strict-mode@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.22.0" -babel-polyfill@^6.16.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.22.0.tgz#1ac99ebdcc6ba4db1e2618c387b2084a82154a3b" +babel-polyfill@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" dependencies: babel-runtime "^6.22.0" core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-preset-es2015@^6.18.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz#af5a98ecb35eb8af764ad8a5a05eb36dc4386835" +babel-preset-es2015@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.0.tgz#c162d68b1932696e036cd3110dc1ccd303d2673a" dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-transform-es2015-arrow-functions "^6.22.0" @@ -944,10 +983,10 @@ babel-preset-es2015@^6.18.0: babel-plugin-transform-es2015-for-of "^6.22.0" babel-plugin-transform-es2015-function-name "^6.22.0" babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.0" + babel-plugin-transform-es2015-modules-commonjs "^6.24.0" babel-plugin-transform-es2015-modules-systemjs "^6.22.0" - babel-plugin-transform-es2015-modules-umd "^6.22.0" + babel-plugin-transform-es2015-modules-umd "^6.24.0" babel-plugin-transform-es2015-object-super "^6.22.0" babel-plugin-transform-es2015-parameters "^6.22.0" babel-plugin-transform-es2015-shorthand-properties "^6.22.0" @@ -958,11 +997,11 @@ babel-preset-es2015@^6.18.0: babel-plugin-transform-es2015-unicode-regex "^6.22.0" babel-plugin-transform-regenerator "^6.22.0" -babel-preset-jest@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-15.0.0.tgz#f23988f1f918673ff9b470fdfd60fcc19bc618f5" +babel-preset-jest@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396" dependencies: - babel-plugin-jest-hoist "^15.0.0" + babel-plugin-jest-hoist "^19.0.0" babel-preset-stage-0@^6.16.0: version "6.22.0" @@ -999,11 +1038,11 @@ babel-preset-stage-3@^6.22.0: babel-plugin-transform-exponentiation-operator "^6.22.0" babel-plugin-transform-object-rest-spread "^6.22.0" -babel-register@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63" +babel-register@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.0.tgz#5e89f8463ba9970356d02eb07dabe3308b080cfd" dependencies: - babel-core "^6.22.0" + babel-core "^6.24.0" babel-runtime "^6.22.0" core-js "^2.4.0" home-or-tmp "^2.0.0" @@ -1028,7 +1067,17 @@ babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.3.0: babylon "^6.11.0" lodash "^4.2.0" -babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.22.1: +babel-template@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.23.0.tgz#04d4f270adbb3aa704a8143ae26faa529238e638" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.18.0, babel-traverse@^6.22.0: version "6.22.1" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" dependencies: @@ -1042,7 +1091,21 @@ babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-tr invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0: +babel-traverse@^6.23.0, babel-traverse@^6.23.1: + version "6.23.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.23.0" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" dependencies: @@ -1051,10 +1114,23 @@ babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22 lodash "^4.2.0" to-fast-properties "^1.0.1" +babel-types@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: version "6.15.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" +babylon@^6.16.1: + version "6.16.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" + balanced-match@0.1.0, balanced-match@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a" @@ -1079,9 +1155,9 @@ base64url@2.0.0, base64url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" -basic-auth@~1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.4.tgz#030935b01de7c9b94a824b29f3fccb750d3a5290" +basic-auth@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" bcrypt-pbkdf@^1.0.0: version "1.0.0" @@ -1145,7 +1221,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" -body-parser@^1.12.2, body-parser@^1.15.2: +body-parser@^1.12.2: version "1.16.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.16.0.tgz#924a5e472c6229fb9d69b85a20d5f2532dec788b" dependencies: @@ -1160,6 +1236,21 @@ body-parser@^1.12.2, body-parser@^1.15.2: raw-body "~2.2.0" type-is "~1.6.14" +body-parser@^1.17.1: + version "1.17.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.1.tgz#75b3bc98ddd6e7e0d8ffe750dfaca5c66993fa47" + dependencies: + bytes "2.4.0" + content-type "~1.0.2" + debug "2.6.1" + depd "~1.1.0" + http-errors "~1.6.1" + iconv-lite "0.4.15" + on-finished "~2.3.0" + qs "6.4.0" + raw-body "~2.2.0" + type-is "~1.6.14" + boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -1734,12 +1825,12 @@ connect-redis@^3.1.0: debug "^2.2.0" redis "^2.1.0" -connect@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.5.0.tgz#b357525a0b4c1f50599cd983e1d9efeea9677198" +connect@3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.0.tgz#f09a4f7dcd17324b663b725c815bdb1c4158a46e" dependencies: - debug "~2.2.0" - finalhandler "0.5.0" + debug "2.6.1" + finalhandler "1.0.0" parseurl "~1.3.1" utils-merge "1.0.0" @@ -1921,22 +2012,22 @@ css-color-names@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" -css-loader@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.25.0.tgz#c3febc8ce28f4c83576b6b13707f47f90c390223" +css-loader@^0.27.3: + version "0.27.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.27.3.tgz#69ab6f47b69bfb1b5acee61bac2aab14302ff0dc" dependencies: babel-code-frame "^6.11.0" - css-selector-tokenizer "^0.6.0" + css-selector-tokenizer "^0.7.0" cssnano ">=2.6.1 <4" - loader-utils "~0.2.2" - lodash.camelcase "^3.0.1" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" object-assign "^4.0.1" postcss "^5.0.6" postcss-modules-extract-imports "^1.0.0" postcss-modules-local-by-default "^1.0.1" postcss-modules-scope "^1.0.0" postcss-modules-values "^1.1.0" - source-list-map "^0.1.4" + source-list-map "^0.1.7" css-modules-loader-core@^1.0.1: version "1.0.1" @@ -1970,6 +2061,14 @@ css-selector-tokenizer@^0.6.0: fastparse "^1.1.1" regexpu-core "^1.0.0" +css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + css-what@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" @@ -2075,9 +2174,9 @@ data-uri-to-buffer@0: version "0.0.4" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-0.0.4.tgz#46e13ab9da8e309745c8d01ce547213ebdb2fe3f" -dataloader@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.2.0.tgz#3f73ea657c492c860c1633348adc55ca9bf2107e" +dataloader@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.3.0.tgz#6fec5be4b30a712e4afd30b86b4334566b97673b" date-format@^0.0.0: version "0.0.0" @@ -2105,6 +2204,18 @@ debug@2.3.3: dependencies: ms "0.7.2" +debug@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" + dependencies: + ms "0.7.2" + +debug@2.6.3, debug@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" + dependencies: + ms "0.7.2" + debug@^0.7.2, debug@~0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" @@ -2191,7 +2302,7 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@~1.1.0: +depd@1.1.0, depd@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -2328,9 +2439,9 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -ejs@^2.5.2: - version "2.5.5" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.5.tgz#6ef4e954ea7dcf54f66aad2fe7aa421932d9ed77" +ejs@^2.5.6: + version "2.5.6" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" ejs@~0.8.3: version "0.8.8" @@ -2690,6 +2801,10 @@ etag@~1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" + event-emitter@~0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" @@ -2735,28 +2850,28 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -exports-loader@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.3.tgz#57dc78917f709b96f247fa91e69b554c855013c8" +exports-loader@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886" dependencies: - loader-utils "0.2.x" - source-map "0.1.x" + loader-utils "^1.0.2" + source-map "0.5.x" -express-session@^1.14.2: - version "1.15.0" - resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.15.0.tgz#67131dd5b78a42bc57b50af0a14880265c03f919" +express-session@^1.15.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.15.1.tgz#9abba15971beea7ad98da5a4d25ed92ba4a2984e" dependencies: cookie "0.3.1" cookie-signature "1.0.6" crc "3.4.4" - debug "2.6.0" + debug "2.6.1" depd "~1.1.0" on-headers "~1.0.1" parseurl "~1.3.1" uid-safe "~2.1.3" utils-merge "1.0.0" -express@^4.12.2, express@^4.14.0: +express@^4.12.2: version "4.14.1" resolved "https://registry.yarnpkg.com/express/-/express-4.14.1.tgz#646c237f766f148c2120aff073817b9e4d7e0d33" dependencies: @@ -2787,6 +2902,39 @@ express@^4.12.2, express@^4.14.0: utils-merge "1.0.0" vary "~1.1.0" +express@^4.15.2: + version "4.15.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.2" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.1" + depd "~1.1.0" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + finalhandler "~1.0.0" + fresh "0.5.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.3" + qs "6.4.0" + range-parser "~1.2.0" + send "0.15.1" + serve-static "1.12.1" + setprototypeof "1.0.3" + statuses "~1.3.1" + type-is "~1.6.14" + utils-merge "1.0.0" + vary "~1.1.0" + extend@3, extend@^3.0.0, extend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" @@ -2890,16 +3038,6 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -finalhandler@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" - dependencies: - debug "~2.2.0" - escape-html "~1.0.3" - on-finished "~2.3.0" - statuses "~1.3.0" - unpipe "~1.0.0" - finalhandler@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.1.tgz#2c400d8d4530935bc232549c5fa385ec07de6fcd" @@ -2910,6 +3048,30 @@ finalhandler@0.5.1: statuses "~1.3.1" unpipe "~1.0.0" +finalhandler@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.0.tgz#b5691c2c0912092f18ac23e9416bde5cd7dc6755" + dependencies: + debug "2.6.1" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" + unpipe "~1.0.0" + +finalhandler@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" + dependencies: + debug "2.6.3" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" + unpipe "~1.0.0" + find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" @@ -2918,13 +3080,19 @@ find-cache-dir@^0.1.1: mkdirp "^0.5.1" pkg-dir "^1.0.0" -find-up@^1.0.0, find-up@^1.1.2: +find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + findup@0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/findup/-/findup-0.1.5.tgz#8ad929a3393bac627957a7e5de4623b06b0e2ceb" @@ -3003,6 +3171,10 @@ fresh@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + from@~0: version "0.1.3" resolved "https://registry.yarnpkg.com/from/-/from-0.1.3.tgz#ef63ac2062ac32acf7862e0d40b44b896f22f3bc" @@ -3470,9 +3642,9 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" -helmet-csp@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.3.0.tgz#bc341939dfef5266cc817abcf53f079f61fe7e3f" +helmet-csp@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.4.0.tgz#7e53a157167a0645aadd7177d12ae6c605c1842e" dependencies: camelize "1.0.0" content-security-policy-builder "1.1.0" @@ -3480,15 +3652,15 @@ helmet-csp@2.3.0: lodash.reduce "4.6.0" platform "1.3.3" -helmet@^3.1.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.4.0.tgz#05a9437486b05ca219ed8d21dc5e3b6ec0c18118" +helmet@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.5.0.tgz#e1d6de27d2e3317d3182e00d672df3d0e1e12539" dependencies: - connect "3.5.0" + connect "3.6.0" dns-prefetch-control "0.1.0" dont-sniff-mimetype "1.0.0" frameguard "3.0.0" - helmet-csp "2.3.0" + helmet-csp "2.4.0" hide-powered-by "1.0.0" hpkp "2.0.0" hsts "2.0.0" @@ -3531,9 +3703,9 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -hooks-fixed@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-1.2.0.tgz#0d2772d4d7d685ff9244724a9f0b5b2559aac96b" +hooks-fixed@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-2.0.0.tgz#a01d894d52ac7f6599bbb1f63dfc9c411df70cba" hosted-git-info@^2.1.4: version "2.1.5" @@ -3592,6 +3764,15 @@ http-errors@~1.5.0, http-errors@~1.5.1: setprototypeof "1.0.2" statuses ">= 1.3.1 < 2" +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + http-proxy-agent@1: version "1.0.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a" @@ -3667,12 +3848,12 @@ immutable@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2" -imports-loader@^0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.6.5.tgz#ae74653031d59e37b3c2fb2544ac61aeae3530a6" +imports-loader@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.7.1.tgz#f204b5f34702a32c1db7d48d89d5e867a0441253" dependencies: - loader-utils "0.2.x" - source-map "0.1.x" + loader-utils "^1.0.2" + source-map "^0.5.6" imurmurhash@^0.1.4: version "0.1.4" @@ -3764,9 +3945,9 @@ inquirer@0.8.2: rx "^2.4.3" through "^2.3.6" -inquirer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.1.tgz#6dfbffaf4d697dd76c8fe349f919de01c28afc4d" +inquirer@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347" dependencies: ansi-escapes "^1.1.0" chalk "^1.0.0" @@ -4088,7 +4269,7 @@ istanbul-lib-hook@^1.0.0: dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.1.4, istanbul-lib-instrument@^1.3.0: +istanbul-lib-instrument@^1.3.0: version "1.4.2" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.4.2.tgz#0e2fdfac93c1dabf2e31578637dc78a19089f43e" dependencies: @@ -4100,6 +4281,18 @@ istanbul-lib-instrument@^1.1.4, istanbul-lib-instrument@^1.3.0: istanbul-lib-coverage "^1.0.0" semver "^5.3.0" +istanbul-lib-instrument@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.6.2.tgz#dac644f358f51efd6113536d7070959a0111f73b" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" + istanbul-lib-coverage "^1.0.0" + semver "^5.3.0" + istanbul-lib-report@^1.0.0-alpha.3: version "1.0.0-alpha.3" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz#32d5f6ec7f33ca3a602209e278b2e6ff143498af" @@ -4280,9 +4473,9 @@ jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" -jsonwebtoken@^7.1.9: - version "7.2.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.2.1.tgz#0fc7217473fc02b4c9aa1e188aa70b51bba4fccb" +jsonwebtoken@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.3.0.tgz#85118d6a70e3fccdf14389f4e7a1c3f9c8a9fbba" dependencies: joi "^6.10.1" jws "^3.1.4" @@ -4329,9 +4522,9 @@ jws@^3.1.4: jwa "^1.1.4" safe-buffer "^5.0.1" -kareem@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/kareem/-/kareem-1.2.0.tgz#59851e833feb1ce6cf60000e0c23acf75c8a3547" +kareem@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/kareem/-/kareem-1.2.1.tgz#acdb8c8119845834abbfa58ade1cf9dea63dc752" keymaster@^1.6.2: version "1.6.2" @@ -4456,7 +4649,7 @@ loader-runner@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" -loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.7, loader-utils@~0.2.2: +loader-utils@^0.2.15, loader-utils@^0.2.16: version "0.2.16" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d" dependencies: @@ -4465,6 +4658,21 @@ loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0. json5 "^0.5.0" object-assign "^4.0.1" +loader-utils@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + lodash-es@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" @@ -4519,13 +4727,6 @@ lodash._createassigner@^3.0.0: lodash._isiterateecall "^3.0.0" lodash.restparam "^3.0.0" -lodash._createcompounder@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075" - dependencies: - lodash.deburr "^3.0.0" - lodash.words "^3.0.0" - lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" @@ -4534,10 +4735,6 @@ lodash._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - lodash.assign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" @@ -4558,11 +4755,9 @@ lodash.bind@^4.1.4: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" -lodash.camelcase@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz#932c8b87f8a4377897c67197533282f97aeac298" - dependencies: - lodash._createcompounder "^3.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" lodash.clone@^3.0.3: version "3.0.3" @@ -4584,12 +4779,6 @@ lodash.create@3.1.1, lodash.create@^3.1.1: lodash._basecreate "^3.0.0" lodash._isiterateecall "^3.0.0" -lodash.deburr@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-3.2.0.tgz#6da8f54334a366a7cf4c4c76ef8d80aa1b365ed5" - dependencies: - lodash._root "^3.0.0" - lodash.defaults@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" @@ -4665,10 +4854,6 @@ lodash.pick@^4.2.1, lodash.pick@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" -lodash.pickby@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" - lodash.reduce@4.6.0, lodash.reduce@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" @@ -4689,12 +4874,6 @@ lodash.uniq@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash.words@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-3.2.0.tgz#4e2a8649bc08745b17c695b1a3ce8fee596623b3" - dependencies: - lodash._root "^3.0.0" - lodash@3.10.1, lodash@^3.3.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" @@ -4968,44 +5147,44 @@ moment@2.x.x, moment@^2.10.3: version "2.17.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82" -mongodb-core@2.1.7: - version "2.1.7" - resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.7.tgz#6a27909b98142ef2508d924c274969008954fa29" +mongodb-core@2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.9.tgz#85aa71ee4fb716196e06b787557bf139f801daf5" dependencies: bson "~1.0.4" require_optional "~1.0.0" -mongodb@2.2.22: - version "2.2.22" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.22.tgz#d67c588fc08f922db19754b1d2e03e2d7d1319fb" +mongodb@2.2.25: + version "2.2.25" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.25.tgz#d3b25dad00eda2bdfcbc996210ba082ac686a6b6" dependencies: es6-promise "3.2.1" - mongodb-core "2.1.7" + mongodb-core "2.1.9" readable-stream "2.1.5" -mongoose@^4.6.5: - version "4.8.1" - resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.8.1.tgz#1dbd3014fb39e9344271a53ec5dd741205864aae" +mongoose@^4.9.1: + version "4.9.1" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.9.1.tgz#e621d9e7356f46d1e39980a71063857405fa9099" dependencies: async "2.1.4" bson "~1.0.4" - hooks-fixed "1.2.0" - kareem "1.2.0" - mongodb "2.2.22" + hooks-fixed "2.0.0" + kareem "1.2.1" + mongodb "2.2.25" mpath "0.2.1" mpromise "0.5.5" - mquery "2.2.1" + mquery "2.3.0" ms "0.7.2" - muri "1.2.0" + muri "1.2.1" regexp-clone "0.0.1" sliced "1.0.1" -morgan@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.7.0.tgz#eb10ca8e50d1abe0f8d3dad5c0201d052d981c62" +morgan@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.8.1.tgz#f93023d3887bd27b78dfd6023cea7892ee27a4b1" dependencies: - basic-auth "~1.0.3" - debug "~2.2.0" + basic-auth "~1.1.0" + debug "2.6.1" depd "~1.1.0" on-finished "~2.3.0" on-headers "~1.0.1" @@ -5018,9 +5197,9 @@ mpromise@0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mpromise/-/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6" -mquery@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/mquery/-/mquery-2.2.1.tgz#aa31076419adce2b06e9757f4cfc5d7f371b47ce" +mquery@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/mquery/-/mquery-2.3.0.tgz#3d1717ad8958d0c99e42ea2461a109f3e5f3e458" dependencies: bluebird "2.10.2" debug "2.2.0" @@ -5035,9 +5214,9 @@ ms@0.7.2, ms@^0.7.1: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" -muri@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/muri/-/muri-1.2.0.tgz#b86383c902920b09ebe62af0e75c94de5f33cd3d" +muri@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/muri/-/muri-1.2.1.tgz#ec7ea5ce6ca6a523eb1ab35bacda5fa816c9aa3c" mute-stream@0.0.4: version "0.0.4" @@ -5325,7 +5504,7 @@ object-assign@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" -object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -5445,6 +5624,16 @@ osenv@^0.1.0: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + pac-proxy-agent@1: version "1.0.0" resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-1.0.0.tgz#dcd5b746581367430a236e88eacfd4e5b8d068a5" @@ -5566,6 +5755,10 @@ path-exists@^2.0.0: dependencies: pinkie-promise "^2.0.0" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -5786,37 +5979,37 @@ postcss-filter-plugins@^2.0.0: postcss "^5.0.4" uniqid "^4.0.0" -postcss-load-config@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.1.0.tgz#1c3c217608642448c03bebf3c32b1b28985293f9" +postcss-load-config@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" dependencies: cosmiconfig "^2.1.0" object-assign "^4.1.0" - postcss-load-options "^1.1.0" - postcss-load-plugins "^2.2.0" + postcss-load-options "^1.2.0" + postcss-load-plugins "^2.3.0" -postcss-load-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.1.0.tgz#e39215d154a19f69f9cb6052bffad4a82f09f354" +postcss-load-options@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" dependencies: cosmiconfig "^2.1.0" object-assign "^4.1.0" -postcss-load-plugins@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.2.0.tgz#84ef9cf36e637810ac5265e03f6d4c48ead83314" +postcss-load-plugins@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" dependencies: cosmiconfig "^2.1.1" object-assign "^4.1.0" -postcss-loader@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-1.2.2.tgz#bbf4e19a8cde85597e0c9bfd96015fe775a157ac" +postcss-loader@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-1.3.3.tgz#a621ea1fa29062a83972a46f54486771301916eb" dependencies: - loader-utils "^0.2.16" - object-assign "^4.1.0" - postcss "^5.2.9" - postcss-load-config "^1.1.0" + loader-utils "^1.0.2" + object-assign "^4.1.1" + postcss "^5.2.15" + postcss-load-config "^1.2.0" postcss-media-minmax@^2.1.0: version "2.1.2" @@ -5893,18 +6086,12 @@ postcss-mixins@^2.1.0: postcss "^5.0.10" postcss-simple-vars "^1.0.1" -postcss-modules-extract-imports@1.0.0: +postcss-modules-extract-imports@1.0.0, postcss-modules-extract-imports@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.0.tgz#5b07f368e350cda6fd5c8844b79123a7bd3e37be" dependencies: postcss "^5.0.4" -postcss-modules-extract-imports@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" - dependencies: - postcss "^5.0.4" - postcss-modules-local-by-default@1.1.1, postcss-modules-local-by-default@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" @@ -6093,7 +6280,7 @@ postcss@5.1.2: source-map "^0.5.6" supports-color "^3.1.2" -postcss@^5.0.0, postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.19, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.1.2, postcss@^5.2.11, postcss@^5.2.4, postcss@^5.2.5, postcss@^5.2.9: +postcss@^5.0.0, postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.19, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.1.2, postcss@^5.2.11, postcss@^5.2.4, postcss@^5.2.5: version "5.2.11" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.11.tgz#ff29bcd6d2efb98bfe08a022055ec599bbe7b761" dependencies: @@ -6102,6 +6289,15 @@ postcss@^5.0.0, postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0. source-map "^0.5.6" supports-color "^3.2.3" +postcss@^5.2.15: + version "5.2.16" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + pre-git@^3.10.0: version "3.12.0" resolved "https://registry.yarnpkg.com/pre-git/-/pre-git-3.12.0.tgz#8291899a15ba86f9cdaa8ca180e47096deff8dc3" @@ -6355,6 +6551,10 @@ qs@6.2.1, qs@^6.1.0, qs@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" +qs@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + qs@~6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" @@ -6632,11 +6832,15 @@ redis-parser@^2.0.0: version "2.4.0" resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.4.0.tgz#018ea743077aae944d0b798b2fd12587320bf3c9" +redis-parser@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.5.0.tgz#79fc2b1d4a6e4d2870b35368433639271fca2617" + redis@^0.12.1: version "0.12.1" resolved "https://registry.yarnpkg.com/redis/-/redis-0.12.1.tgz#64df76ad0fc8acebaebd2a0645e8a48fac49185e" -redis@^2.1.0, redis@^2.6.5, redis@~2.6.0-2: +redis@^2.1.0, redis@~2.6.0-2: version "2.6.5" resolved "https://registry.yarnpkg.com/redis/-/redis-2.6.5.tgz#87c1eff4a489f94b70871f3d08b6988f23a95687" dependencies: @@ -6644,6 +6848,14 @@ redis@^2.1.0, redis@^2.6.5, redis@~2.6.0-2: redis-commands "^1.2.0" redis-parser "^2.0.0" +redis@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/redis/-/redis-2.7.1.tgz#7d56f7875b98b20410b71539f1d878ed58ebf46a" + dependencies: + double-ended-queue "^2.1.0-0" + redis-commands "^1.2.0" + redis-parser "^2.5.0" + reds@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/reds/-/reds-0.2.5.tgz#38a767f7663cd749036848697d82c74fd29bc01f" @@ -6978,6 +7190,33 @@ send@0.14.2: range-parser "~1.2.0" statuses "~1.3.1" +send@0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" + dependencies: + debug "2.6.1" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" + mime "1.3.4" + ms "0.7.2" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +serve-static@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.15.1" + serve-static@~1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.2.tgz#2cf9889bd4435a320cc36895c9aa57bd662e6ac7" @@ -7003,6 +7242,10 @@ setprototypeof@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + sha.js@^2.3.6: version "2.4.8" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" @@ -7108,10 +7351,14 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" -source-list-map@^0.1.4, source-list-map@~0.1.7: +source-list-map@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" +source-list-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.0.1.tgz#cc1fc17122ae0a51978024c2cc0f8c35659026b8" + source-map-support@^0.4.2: version "0.4.11" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322" @@ -7130,7 +7377,7 @@ source-map@0.4.x, source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" @@ -7187,7 +7434,7 @@ stable@~0.1.3: version "0.1.5" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.5.tgz#08232f60c732e9890784b5bed0734f8b32a887b9" -"statuses@>= 1.3.1 < 2", statuses@~1.3.0, statuses@~1.3.1: +"statuses@>= 1.3.1 < 2", statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" @@ -7311,11 +7558,11 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -style-loader@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.1.tgz#468280efbc0473023cd3a6cd56e33b5a1d7fc3a9" +style-loader@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.16.0.tgz#5f001a9bf58fff9fd40f8aa3b9738ab99d4000c7" dependencies: - loader-utils "^0.2.7" + loader-utils "^1.0.2" stylus@0.54.5, stylus@~0.54.5: version "0.54.5" @@ -7453,9 +7700,9 @@ tcomb@^2.5.1: version "2.7.0" resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-2.7.0.tgz#10d62958041669a5d53567b9a4ee8cde22b1c2b0" -test-exclude@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-2.1.3.tgz#a8d8968e1da83266f9864f2852c55e220f06434a" +test-exclude@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.0.3.tgz#86a13ce3effcc60e6c90403cf31a27a60ac6c4e7" dependencies: arrify "^1.0.1" micromatch "^2.3.11" @@ -7574,6 +7821,10 @@ tr46@~0.0.1, tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + tryit@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" @@ -7631,14 +7882,14 @@ uc.micro@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192" -uglify-js@^2.6, uglify-js@^2.6.1, uglify-js@^2.7.5: - version "2.7.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" +uglify-js@^2.6, uglify-js@^2.6.1, uglify-js@^2.8.5: + version "2.8.15" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.15.tgz#835dd4cd5872554756e6874508d0d0561704d94d" dependencies: - async "~0.2.6" source-map "~0.5.1" - uglify-to-browserify "~1.0.0" yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" uglify-to-browserify@~1.0.0: version "1.0.2" @@ -7784,9 +8035,9 @@ warning@^3.0.0: dependencies: loose-envify "^1.0.0" -watchpack@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.2.0.tgz#15d4620f1e7471f13fcb551d5c030d2c3eb42dbb" +watchpack@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" dependencies: async "^2.1.2" chokidar "^1.4.3" @@ -7808,16 +8059,16 @@ webidl-conversions@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" -webpack-sources@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.4.tgz#ccc2c817e08e5fa393239412690bb481821393cd" +webpack-sources@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.0.tgz#fea93ba840f16cdd3f246f0ee95f88a9492c69fb" dependencies: - source-list-map "~0.1.7" + source-list-map "^1.0.1" source-map "~0.5.3" -webpack@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.1.tgz#7bb1d72ae2087dd1a4af526afec15eed17dda475" +webpack@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.1.tgz#55bce8baffe7c1f9dc3029adc048643b448318a8" dependencies: acorn "^4.0.4" acorn-dynamic-import "^2.0.0" @@ -7835,9 +8086,9 @@ webpack@^2.2.1: source-map "^0.5.3" supports-color "^3.1.0" tapable "~0.2.5" - uglify-js "^2.7.5" - watchpack "^1.2.0" - webpack-sources "^0.1.4" + uglify-js "^2.8.5" + watchpack "^1.3.1" + webpack-sources "^0.2.0" yargs "^6.0.0" whatwg-encoding@^1.0.1: From 8114608626c47ff8e804e1501929dc12710ce7df Mon Sep 17 00:00:00 2001 From: Riley Davis Date: Fri, 24 Mar 2017 11:33:06 -0600 Subject: [PATCH 17/44] put the mongoose update opts in the right place --- services/assets.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/services/assets.js b/services/assets.js index 8397600a7..0aa4219da 100644 --- a/services/assets.js +++ b/services/assets.js @@ -62,18 +62,16 @@ module.exports = class AssetsService { SettingsService.retrieve() ]).then(([whitelisted, settings]) => { - const setOnInsert = {url}; + const update = {$setOnInsert: {url}}; if (settings.autoCloseStream) { - setOnInsert.closedAt = new Date(Date.now() + settings.closedTimeout * 1000); + update.$setOnInsert.closedAt = new Date(Date.now() + settings.closedTimeout * 1000); } if (!whitelisted) { return Promise.reject(errors.ErrInvalidAssetURL); } else { - return AssetModel.findOneAndUpdate({url}, {url}, { - - $setOnInsert: setOnInsert, + return AssetModel.findOneAndUpdate({url}, update, { // Ensure that if it's new, we return the new object created. new: true, From 9eaed90318d7de64a916f2a70bda189a56085c6e Mon Sep 17 00:00:00 2001 From: gaba Date: Fri, 24 Mar 2017 11:15:42 -0700 Subject: [PATCH 18/44] Revert "Revert "Story 138187767 - Moderate Flag User Names"" This reverts commit 903aa23f193b3d74b95c4205966bccead4111bed. --- .gitignore | 2 + client/coral-admin/src/AppRouter.js | 15 + client/coral-admin/src/actions/community.js | 29 +- client/coral-admin/src/components/Modal.js | 1 - .../src/components/SuspendUserModal.js | 106 ------ client/coral-admin/src/components/User.js | 50 --- client/coral-admin/src/constants/comments.js | 1 - client/coral-admin/src/constants/community.js | 10 + client/coral-admin/src/constants/users.js | 1 - .../src/containers/Community/Community.css | 230 ++++++++++++ .../Community/CommunityContainer.js | 117 ++++-- .../containers/Community/CommunityLayout.js | 9 + .../containers/Community/FlaggedAccounts.js | 45 +++ .../Community/{Community.js => People.js} | 6 +- .../src/containers/Community/Table.js | 2 +- .../Community/components/ActionButton.js | 24 ++ .../Community/components/BanUserDialog.css | 164 +++++++++ .../Community/components/BanUserDialog.js | 54 +++ .../Community/components/CommunityMenu.js | 31 ++ .../components/SuspendUserDialog.css} | 0 .../Community/components/SuspendUserDialog.js | 115 ++++++ .../containers/Community/components/User.js | 90 +++++ .../Community/components/styles.css | 339 ++++++++++++++++++ .../ModerationQueue/components/Comment.js | 20 +- .../src/graphql/mutations/index.js | 32 +- .../src/graphql/mutations/suspendUser.graphql | 7 + .../coral-admin/src/graphql/queries/index.js | 3 + .../queries/modUserFlaggedQuery.graphql | 26 ++ client/coral-admin/src/reducers/community.js | 72 ++-- client/coral-admin/src/translations.json | 51 ++- client/coral-plugin-flags/FlagComment.js | 4 +- graph/loaders/users.js | 41 +++ graph/mutators/user.js | 30 +- graph/resolvers/flag_action.js | 12 +- graph/resolvers/root_mutation.js | 3 + graph/resolvers/root_query.js | 22 ++ graph/typeDefs.graphql | 31 ++ models/user.js | 5 +- services/email/suspension.ejs | 1 + services/email/suspension.txt.ejs | 1 + services/users.js | 46 +++ test/graph/mutations/addCommentTag.js | 2 +- 42 files changed, 1604 insertions(+), 246 deletions(-) delete mode 100644 client/coral-admin/src/components/SuspendUserModal.js delete mode 100644 client/coral-admin/src/components/User.js create mode 100644 client/coral-admin/src/containers/Community/CommunityLayout.js create mode 100644 client/coral-admin/src/containers/Community/FlaggedAccounts.js rename client/coral-admin/src/containers/Community/{Community.js => People.js} (94%) create mode 100644 client/coral-admin/src/containers/Community/components/ActionButton.js create mode 100644 client/coral-admin/src/containers/Community/components/BanUserDialog.css create mode 100644 client/coral-admin/src/containers/Community/components/BanUserDialog.js create mode 100644 client/coral-admin/src/containers/Community/components/CommunityMenu.js rename client/coral-admin/src/{components/SuspendUserModal.css => containers/Community/components/SuspendUserDialog.css} (100%) create mode 100644 client/coral-admin/src/containers/Community/components/SuspendUserDialog.js create mode 100644 client/coral-admin/src/containers/Community/components/User.js create mode 100644 client/coral-admin/src/containers/Community/components/styles.css create mode 100644 client/coral-admin/src/graphql/mutations/suspendUser.graphql create mode 100644 client/coral-admin/src/graphql/queries/modUserFlaggedQuery.graphql create mode 100644 services/email/suspension.ejs create mode 100644 services/email/suspension.txt.ejs diff --git a/.gitignore b/.gitignore index 8775ac487..d91635c94 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,8 @@ dump.rdb *.cfg .idea/ coverage/ +.tags +.tags1 # remove plugin folders plugins diff --git a/client/coral-admin/src/AppRouter.js b/client/coral-admin/src/AppRouter.js index a2990677f..2bd59b79d 100644 --- a/client/coral-admin/src/AppRouter.js +++ b/client/coral-admin/src/AppRouter.js @@ -5,10 +5,13 @@ import Stories from 'containers/Stories/Stories'; import Configure from 'containers/Configure/Configure'; import LayoutContainer from 'containers/LayoutContainer'; import InstallContainer from 'containers/Install/InstallContainer'; + +import CommunityLayout from 'containers/Community/CommunityLayout'; import CommunityContainer from 'containers/Community/CommunityContainer'; import ModerationLayout from 'containers/ModerationQueue/ModerationLayout'; import ModerationContainer from 'containers/ModerationQueue/ModerationContainer'; + import Dashboard from 'containers/Dashboard/Dashboard'; const routes = ( @@ -21,6 +24,18 @@ const routes = ( + {/* Community Routes */} + + + + + + + + + + + {/* Moderation Routes */} diff --git a/client/coral-admin/src/actions/community.js b/client/coral-admin/src/actions/community.js index c2d738460..0f53ea3da 100644 --- a/client/coral-admin/src/actions/community.js +++ b/client/coral-admin/src/actions/community.js @@ -7,28 +7,33 @@ import { SORT_UPDATE, COMMENTERS_NEW_PAGE, SET_ROLE, - SET_COMMENTER_STATUS + SET_COMMENTER_STATUS, + SHOW_BANUSER_DIALOG, + HIDE_BANUSER_DIALOG, + SHOW_SUSPENDUSER_DIALOG, + HIDE_SUSPENDUSER_DIALOG } from '../constants/community'; import coralApi from '../../../coral-framework/helpers/response'; -export const fetchCommenters = (query = {}) => dispatch => { - dispatch(requestFetchCommenters()); +export const fetchAccounts = (query = {}) => dispatch => { + + dispatch(requestFetchAccounts()); coralApi(`/users?${qs.stringify(query)}`) - .then(({result, page, count, limit, totalPages}) => + .then(({result, page, count, limit, totalPages}) =>{ dispatch({ type: FETCH_COMMENTERS_SUCCESS, - commenters: result, + accounts: result, page, count, limit, totalPages - }) - ) + }); + }) .catch(error => dispatch({type: FETCH_COMMENTERS_FAILURE, error})); }; -const requestFetchCommenters = () => ({ +const requestFetchAccounts = () => ({ type: FETCH_COMMENTERS_REQUEST }); @@ -55,3 +60,11 @@ export const setCommenterStatus = (id, status) => (dispatch) => { return dispatch({type: SET_COMMENTER_STATUS, id, status}); }); }; + +// Ban User Dialog +export const showBanUserDialog = (user) => ({type: SHOW_BANUSER_DIALOG, user}); +export const hideBanUserDialog = () => ({type: HIDE_BANUSER_DIALOG}); + +// Suspend User Dialog +export const showSuspendUserDialog = (user) => ({type: SHOW_SUSPENDUSER_DIALOG, user}); +export const hideSuspendUserDialog = () => ({type: HIDE_SUSPENDUSER_DIALOG}); diff --git a/client/coral-admin/src/components/Modal.js b/client/coral-admin/src/components/Modal.js index 99c27c3a1..b667258c2 100644 --- a/client/coral-admin/src/components/Modal.js +++ b/client/coral-admin/src/components/Modal.js @@ -1,4 +1,3 @@ - import React from 'react'; import {Button, Icon} from 'react-mdl'; import styles from './Modal.css'; diff --git a/client/coral-admin/src/components/SuspendUserModal.js b/client/coral-admin/src/components/SuspendUserModal.js deleted file mode 100644 index 5afb8ffee..000000000 --- a/client/coral-admin/src/components/SuspendUserModal.js +++ /dev/null @@ -1,106 +0,0 @@ -import I18n from 'coral-framework/modules/i18n/i18n'; -import translations from '../translations.json'; -import React, {Component, PropTypes} from 'react'; -import Modal from 'components/Modal'; -import styles from './SuspendUserModal.css'; -import {Button} from 'coral-ui'; - -const stages = [ - { - title: 'suspenduser.title_0', - description: 'suspenduser.description_0', - options: { - 'j': 'suspenduser.no_cancel', - 'k': 'suspenduser.yes_suspend' - } - }, - { - title: 'suspenduser.title_1', - description: 'suspenduser.description_1', - options: { - 'j': 'bandialog.cancel', - 'k': 'suspenduser.send' - } - } -]; - -class SuspendUserModal extends Component { - - state = {email: '', stage: 0} - - static propTypes = { - stage: PropTypes.number, - actionType: PropTypes.string, - onClose: PropTypes.func.isRequired, - suspendUser: PropTypes.func.isRequired - } - - componentDidMount() { - const about = lang.t('suspenduser.username'); - this.setState({email: lang.t('suspenduser.email', about)}); - } - - /* - * When an admin clicks to suspend a user a dialog is shown, this function - * handles the possible actions for that dialog. - */ - onActionClick = (stage, menuOption) => () => { - const {suspendUser, action} = this.props; - const {stage, email} = this.state; - const cancel = this.props.onClose; - const next = () => this.setState({stage: stage + 1}); - const suspend = () => suspendUser(action.item_id, lang.t('suspenduser.email_subject'), email) - .then(this.props.onClose); - const suspendModalActions = [ - [ cancel, next ], - [ cancel, suspend ] - ]; - return suspendModalActions[stage][menuOption](); - } - - onEmailChange = (e) => this.setState({email: e.target.value}) - - render () { - const {action, onClose} = this.props; - - if (!action) { - return null; - } - - const {stage} = this.state; - const actionType = action.actionType; - const about = actionType === 'flag_bio' ? lang.t('suspenduser.bio') : lang.t('suspenduser.username'); - return -
    {lang.t(stages[stage].title, about)}
    -
    -
    - {lang.t(stages[stage].description, about)} -
    - { - stage === 1 && -
    -
    {lang.t('suspenduser.write_message')}
    -
    -