From 12e61bbc6615e7a4380a61b775a688b2a157a335 Mon Sep 17 00:00:00 2001 From: Kim Gardner Date: Mon, 20 Nov 2017 19:41:14 +0000 Subject: [PATCH 01/11] Update suspend copy --- locales/da.yml | 6 +++--- locales/en.yml | 6 +++--- locales/es.yml | 6 +++--- locales/fr.yml | 8 ++++---- locales/pt_BR.yml | 6 +++--- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/locales/da.yml b/locales/da.yml index 37c1cc188..48b5ab362 100644 --- a/locales/da.yml +++ b/locales/da.yml @@ -347,15 +347,15 @@ da: email_message_suspend: "Kære {0},\n\nI overensstemmelse med {1}'s retningslinjer for fællesskabet er din konto midlertidigt suspenderet. Under suspensionen vil du ikke kunne kommentere, flagge eller engagere dig med andre kommentarer. Venligst tilslut dig til samtalen{2}.'" title_notify: "Underret bruygeren om deres midlertidige suspension" notify_suspend_until: "Bruger {0} er midlertidigt suspenderet. Denne suspension ophører automatisk om {1}." - description_notify: "Suspendering af denne bruger vil midlertidigt deaktivere deres konto og skjule alle deres kommentarer på webstedet." + description_notify: "Suspendering af denne bruger vil midlertidigt deaktivere deres konto." write_message: "Skriv en besked" send: "Send" reject_username: username: "brugernavn" no_cancel: "Nej Afbryd" - description_reject: "Vil du midlertidigt forbyde denne bruger på grund af deres {0}? Hvis du gør det, vil det midlertidigt skjule deres kommentarer, indtil de omskriver deres {0}." + description_reject: "Vil du midlertidigt forbyde denne bruger på grund af deres {0}? Hvis du gør det vil blive suspenderet indtil de omskriver deres {0}." title_notify: "Underret brugeren om deres midlertidige suspension" - description_notify: "Suspendering af denne bruger vil midlertidigt deaktivere deres konto, og skjule alle deres kommentarer på webstedet." + description_notify: "Suspendering af denne bruger vil midlertidigt deaktivere deres konto." title_reject: "Vi har bemærket at du afviste et brugernavn." suspend_user: "Suspender bruger" yes_suspend: "Ja suspender" diff --git a/locales/en.yml b/locales/en.yml index 8c3f60a2d..02bdea30b 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -361,15 +361,15 @@ en: email_message_suspend: "Dear {0},\n\nIn accordance with {1}’s community guidelines, your account has been temporarily suspended. During the suspension, you will be unable to comment, flag or engage with fellow commenters. Please rejoin the conversation {2}." title_notify: "Notify the user of their temporary suspension" notify_suspend_until: "User {0} has been temporarily suspended. This suspension will automatically end {1}." - description_notify: "Suspending this user will temporarily disable their account and hide all of their comments on the site." + description_notify: "Suspending this user will temporarily disable their account." write_message: "Write a message" send: Send reject_username: username: username no_cancel: "No cancel" - description_reject: "Would you like to temporarily ban this user because of their {0}? Doing so will temporarily hide their comments until they rewrite their {0}." + description_reject: "Would you like to temporarily ban this user because of their {0}? Doing so will temporarily suspend this user until they rewrite their {0}." title_notify: "Notify the user of their temporary suspension" - description_notify: "Suspending this user will temporarily disable their account and hide all of their comments on the site." + description_notify: "Suspending this user will temporarily disable their account." title_reject: "We noticed you rejected a username" suspend_user: "Suspend User" yes_suspend: "Yes suspend" diff --git a/locales/es.yml b/locales/es.yml index 3f01b8457..0282b6431 100644 --- a/locales/es.yml +++ b/locales/es.yml @@ -378,15 +378,15 @@ es: email_message_suspend: "Querido/a {0}, De acuerdo a la guía comunitaria de {1}, su cuenta ha sido temporalmente suspendida. Durante este tiempo, no podrá comentar, marcar o involucrarse con otros comentaristas. Por favor unirse a la conversación {2}." title_notify: "Notificar al usuario de su suspensión temporal" notify_suspend_until: "Usuario {0} ha sido temporalmente suspendido. Esta suspension va a terminar automáticamente en {1}." - description_notify: "Suspender a este usuario va a deshabilitar temporalmente su cuenta y ocultar todos sus comentarios en el sitio." + description_notify: "Suspender a este usuario va a deshabilitar temporalmente su cuenta." write_message: "Escribir un mensaje" send: "Enviar" reject_username: username: nombre de usuario no_cancel: "No cancelar" - description_reject: "¿Quiere suspender temporalmente a este usuario por su {0}? Hacerlo va a ocultar temporalmente sus comentarios hasta que edite su {0}." + description_reject: "¿Quiere suspender temporalmente a este usuario por su {0}? El usuario estará temporalmente suspendido hasta que edite su {0}." title_notify: "Notificar al usuario de su suspensión temporal" - description_notify: "Suspender a este usuario va a deshabilitar temporalmente su cuenta y ocultar todos sus comentarios en el sitio." + description_notify: "Suspender a este usuario va a deshabilitar temporalmente su cuenta." title_reject: "Vimos que ha rechazado un nombre de usuario" suspend_user: "Suspender Usuario" yes_suspend: "Si, suspender" diff --git a/locales/fr.yml b/locales/fr.yml index f703c87f1..5c5a45aab 100644 --- a/locales/fr.yml +++ b/locales/fr.yml @@ -291,10 +291,10 @@ fr: bio: Bio cancel: "Annuler" days: "{0} jours" - description_0: "Voulez-vous interdire temporairement cet utilisateur en raison de leur {0} ? Cela dissimulera temporairement leurs commentaires jusqu'à ce qu'ils réécrivent leurs {0}." - description_1: "Suspendre cet utilisateur désactivera temporairement son compte et cachera tous ses commentaires sur le site." - description_notify: "Suspendre cet utilisateur désactivera temporairement son compte et cachera tous ses commentaires sur le site." - description_reject: "Voulez-vous interdire temporairement cet utilisateur en raison de leur {0}? Cela dissimulera temporairement leurs commentaires jusqu'à ce qu'ils réécrivent leurs {0}." + description_0: "Voulez-vous interdire temporairement cet utilisateur en raison de leur {0} ? Cela va temporairement suspendre l'utilisateur jusqu'à ce qu'ils réécrivent leurs {0}." + description_1: "Suspendre cet utilisateur désactivera temporairement son compte." + description_notify: "Suspendre cet utilisateur désactivera temporairement son compte." + description_reject: "Voulez-vous interdire temporairement cet utilisateur en raison de leur {0}? Cela va temporairement suspendre l'utilisateur jusqu'à ce qu'ils réécrivent leurs {0}." description_suspend: "Vous suspendez {0}. Ce commentaire sera rejeté, et {0} ne sera pas autorisé à aimer, à signaler, à répondre ou à publier jusqu'à ce que la suspension soit levée." email: "Un autre membre de la communauté a récemment signalé votre nom d'utilisateur pour examen. En raison de son contenu, votre utilisateur a été rejeté. Cela signifie que vous ne pouvez plus commenter ou signaler du contenu jusqu'à ce que vous changiez votre nom d'utilisateur. Veuillez nous envoyer un e-mail si vous avez des questions ou des préoccupations." email_subject: "Votre compte a été suspendu" diff --git a/locales/pt_BR.yml b/locales/pt_BR.yml index a23c1ad8c..ae8e1310c 100644 --- a/locales/pt_BR.yml +++ b/locales/pt_BR.yml @@ -349,15 +349,15 @@ pt_BR: email_message_suspend: "Querido/a {0},\n\nDe acordo com as diretrizes da comunidade de {1}, sua conta foi temporariamente suspensa. Durante a suspensão, você não poderá comentar, denunciar ou se responder outros usuários(as). Por favor, volte para a conversa {2}." title_notify: "Notificar o usuário da suspensão temporária" notify_suspend_until: "O usuário {0} foi temporariamente suspenso. Esta suspensão terminará automaticamente {1}." - description_notify: "Suspender este usuário temporariamente desativará sua conta e esconderá todos os seus comentários no site" + description_notify: "Suspender este usuário temporariamente desativará sua conta." write_message: "Escrever uma mensagem" send: Enviar reject_username: username: nome de usuário no_cancel: "Não cancelar" - description_reject: "Gostaria de proibir temporariamente este usuário por causa de seu {0}? Isso ocultará temporariamente seus comentários até que eles reescrevam seu {0}." + description_reject: "Gostaria de proibir temporariamente este usuário por causa de seu {0}? O usuário será suspenso temporariamente até que eles reescrevam seu {0}." title_notify: "Notificar o usuário da suspensão temporária" - description_notify: "Suspender este usuário temporariamente desativará sua conta e esconderá todos os seus comentários no site." + description_notify: "Suspender este usuário temporariamente desativará sua conta." title_reject: "Percebemos que você rejeitou um nome de usuário" suspend_user: "Suspender usuário" yes_suspend: "Sim suspender" From 4830aec138fd9323c023e7a2b5f8643cd550150f Mon Sep 17 00:00:00 2001 From: Kim Gardner Date: Mon, 20 Nov 2017 19:59:57 +0000 Subject: [PATCH 02/11] Update Report Bug link in Admin Settings --- client/coral-admin/src/components/ui/Header.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/coral-admin/src/components/ui/Header.js b/client/coral-admin/src/components/ui/Header.js index bd7fbcf0c..e199d5ded 100644 --- a/client/coral-admin/src/components/ui/Header.js +++ b/client/coral-admin/src/components/ui/Header.js @@ -87,7 +87,7 @@ const CoralHeader = ({ - + Report a bug or give feedback From c990a812a4cfcb94f1738120f21d4f3355eece81 Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Tue, 21 Nov 2017 15:59:20 +0100 Subject: [PATCH 03/11] new design for show all comments button --- .../src/components/Stream.css | 19 ++++++++++++--- .../src/components/Stream.js | 23 +++++++++---------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/client/coral-embed-stream/src/components/Stream.css b/client/coral-embed-stream/src/components/Stream.css index 23f620157..ac014e75d 100644 --- a/client/coral-embed-stream/src/components/Stream.css +++ b/client/coral-embed-stream/src/components/Stream.css @@ -2,9 +2,22 @@ margin-top: 6px; } -.viewAllButton { +.viewAllButtonContainer { position: absolute; - right: 0px; + width: 100%; + display: flex; + justify-content: center; + margin-top: -11px; + z-index: 10; +} + +.viewAllButton { + composes: buttonReset from "coral-framework/styles/reset.css"; + + background-color: #4D8FCC; + color: white; + padding: 4px 8px; + border-radius: 2px; } .tabPanel { @@ -26,4 +39,4 @@ margin-top: 28px; padding-bottom: 50px; min-height: 600px; -} \ No newline at end of file +} diff --git a/client/coral-embed-stream/src/components/Stream.js b/client/coral-embed-stream/src/components/Stream.js index 7ff48106b..67d27f903 100644 --- a/client/coral-embed-stream/src/components/Stream.js +++ b/client/coral-embed-stream/src/components/Stream.js @@ -13,7 +13,7 @@ import t, {timeago} from 'coral-framework/services/i18n'; import CommentBox from 'talk-plugin-commentbox/CommentBox'; import QuestionBox from 'talk-plugin-questionbox/QuestionBox'; import {isCommentActive} from 'coral-framework/utils'; -import {Button, Tab, TabCount, TabPane} from 'coral-ui'; +import {Tab, TabCount, TabPane} from 'coral-ui'; import cn from 'classnames'; import {getTopLevelParent, attachCommentToParent} from '../graphql/utils'; @@ -58,6 +58,7 @@ class Stream extends React.Component { loadNewReplies, auth: {user}, emit, + viewAllComments, } = this.props; // even though the permalinked comment is the highlighted one, we're displaying its parent + replies @@ -76,6 +77,14 @@ class Stream extends React.Component { return (
+
+ +
- {highlightedComment && - } - {open ?
Date: Tue, 21 Nov 2017 12:13:28 -0700 Subject: [PATCH 04/11] added better logic around removing users for clearning out their stale data. --- bin/cli-users | 53 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/bin/cli-users b/bin/cli-users index 89f53a67d..89bf667a7 100755 --- a/bin/cli-users +++ b/bin/cli-users @@ -8,10 +8,13 @@ const program = require('./commander'); const inquirer = require('inquirer'); const UsersService = require('../services/users'); const UserModel = require('../models/user'); +const CommentModel = require('../models/comment'); +const ActionModel = require('../models/action'); const USER_ROLES = require('../models/enum/user_roles'); const mongoose = require('../services/mongoose'); const util = require('./util'); const Table = require('cli-table'); +const databaseVerifications = require('./verifications/database'); const validateRequired = (msg = 'Field is required', len = 1) => (input) => { if (input && input.length >= len) { @@ -122,26 +125,48 @@ async function createUser(options) { } catch (err) { console.error(err); - util.shutdown(); + util.shutdown(1); } } /** * Deletes a user. */ -function deleteUser(userID) { - UserModel - .findOneAndRemove({ - id: userID - }) - .then(() => { - console.log('Deleted user'); - util.shutdown(); - }) - .catch((err) => { - console.error(err); - util.shutdown(); - }); +async function deleteUser(userID) { + + try { + + // Find the user we're removing. + const user = await UserModel.findOne({id: userID}); + if (!user) { + throw new Error(`user with id ${userID} not found`); + } + + // Remove all the user's actions. + await ActionModel + .where({user_id: user.id}) + .setOptions({multi: true}) + .remove(); + + // Remove all the user's comments. + await CommentModel + .where({author_id: user.id}) + .setOptions({multi: true}) + .remove(); + + // Update the counts that might have changed. + for (const verification of databaseVerifications) { + await verification({fix: true, limit: Infinity, batch: 1000}); + } + + // Remove the user. + await user.remove(); + + util.shutdown(); + } catch (err) { + console.error(err); + util.shutdown(1); + } } /** From 9629ba2f8399ffd779be80f683ca8548fc0ce235 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Wed, 22 Nov 2017 14:48:34 -0700 Subject: [PATCH 05/11] added connector support --- graph/connectors.js | 83 +++++++++++++++++++++++++++++++++++++++++++++ graph/context.js | 4 +++ 2 files changed, 87 insertions(+) create mode 100644 graph/connectors.js diff --git a/graph/connectors.js b/graph/connectors.js new file mode 100644 index 000000000..ecaa79550 --- /dev/null +++ b/graph/connectors.js @@ -0,0 +1,83 @@ +// Errors. +const errors = require('../errors'); + +// Models. +const Action = require('../models/action'); +const Asset = require('../models/asset'); +const Comment = require('../models/comment'); +const Setting = require('../models/setting'); +const User = require('../models/user'); + +// Services. +const Actions = require('../services/actions'); +const Assets = require('../services/assets'); +const Cache = require('../services/cache'); +const Comments = require('../services/comments'); +const DomainList = require('../services/domainlist'); +const I18n = require('../services/i18n'); +const Jwt = require('../services/jwt'); +const Karma = require('../services/karma'); +const Kue = require('../services/kue'); +const Limit = require('../services/limit'); +const Locals = require('../services/locals'); +const Mailer = require('../services/mailer'); +const Metadata = require('../services/metadata'); +const Migration = require('../services/migration'); +const Mongoose = require('../services/mongoose'); +const Passport = require('../services/passport'); +const Plugins = require('../services/plugins'); +const Pubsub = require('../services/pubsub'); +const Redis = require('../services/redis'); +const Regex = require('../services/regex'); +const Scraper = require('../services/scraper'); +const Settings = require('../services/settings'); +const Setup = require('../services/setup'); +const Subscriptions = require('../services/subscriptions'); +const Tags = require('../services/tags'); +const Tokens = require('../services/tokens'); +const Users = require('../services/users'); +const Wordlist = require('../services/wordlist'); + +// Connector. +const connectors = { + errors, + models: { + Action, + Asset, + Comment, + Setting, + User, + }, + services: { + Actions, + Assets, + Cache, + Comments, + DomainList, + I18n, + Jwt, + Karma, + Kue, + Limit, + Locals, + Mailer, + Metadata, + Migration, + Mongoose, + Passport, + Plugins, + Pubsub, + Redis, + Regex, + Scraper, + Settings, + Setup, + Subscriptions, + Tags, + Tokens, + Users, + Wordlist, + }, +}; + +module.exports = connectors; diff --git a/graph/context.js b/graph/context.js index cd3f5ddbe..d6d85a651 100644 --- a/graph/context.js +++ b/graph/context.js @@ -2,6 +2,7 @@ const loaders = require('./loaders'); const mutators = require('./mutators'); const uuid = require('uuid'); const merge = require('lodash/merge'); +const connectors = require('./connectors'); const plugins = require('../services/plugins'); const pubsub = require('../services/pubsub'); @@ -51,6 +52,9 @@ class Context { this.user = user; } + // Attach the connectors. + this.connectors = connectors; + // Create the loaders. this.loaders = loaders(this); From 7f53375c67e0e99d24b8876d184f265a120a2ce7 Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Thu, 23 Nov 2017 13:40:19 +0100 Subject: [PATCH 06/11] More padding for question box --- client/talk-plugin-questionbox/QuestionBox.css | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/talk-plugin-questionbox/QuestionBox.css b/client/talk-plugin-questionbox/QuestionBox.css index cb9902ade..b8df1f228 100644 --- a/client/talk-plugin-questionbox/QuestionBox.css +++ b/client/talk-plugin-questionbox/QuestionBox.css @@ -13,6 +13,8 @@ min-height: 50px; display: flex; border-radius: 3px; + padding-right: 40px; + box-sizing: border-box; } .icon { @@ -67,4 +69,4 @@ .hidden { visibility: hidden; display: none; -} \ No newline at end of file +} From 9359bfc322a986f24b4cc7502bb5999246f0b765 Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Thu, 23 Nov 2017 20:09:16 +0100 Subject: [PATCH 07/11] Fix styling bug in firefox --- .../Configure/components/StreamSettings.css | 3 ++ .../Configure/components/StreamSettings.js | 34 ++++++++++--------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/client/coral-admin/src/routes/Configure/components/StreamSettings.css b/client/coral-admin/src/routes/Configure/components/StreamSettings.css index 5ddd46bd2..628192de6 100644 --- a/client/coral-admin/src/routes/Configure/components/StreamSettings.css +++ b/client/coral-admin/src/routes/Configure/components/StreamSettings.css @@ -53,3 +53,6 @@ +.autoCloseWrapper { + display: flex; +} diff --git a/client/coral-admin/src/routes/Configure/components/StreamSettings.js b/client/coral-admin/src/routes/Configure/components/StreamSettings.js index 9c05711cb..ffaeed63b 100644 --- a/client/coral-admin/src/routes/Configure/components/StreamSettings.js +++ b/client/coral-admin/src/routes/Configure/components/StreamSettings.js @@ -180,22 +180,24 @@ class StreamSettings extends React.Component { onCheckbox={this.updateAutoClose} title={t('configure.close_after')} > - -
- - - - - +
+ +
+ + + + + +
{/* the above card should be the last one if at all possible because of z-index issues with the selects */} From 37f3c1110420ebfa7685c4a2bd2c7ba7d12e1282 Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Fri, 24 Nov 2017 12:29:29 +0100 Subject: [PATCH 08/11] Fix radiogroup not working properly in ff --- .../src/routes/Stories/components/Stories.js | 4 ++-- yarn.lock | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/client/coral-admin/src/routes/Stories/components/Stories.js b/client/coral-admin/src/routes/Stories/components/Stories.js index 866defde4..933237ab9 100644 --- a/client/coral-admin/src/routes/Stories/components/Stories.js +++ b/client/coral-admin/src/routes/Stories/components/Stories.js @@ -48,7 +48,7 @@ class Stories extends Component {
{t('streams.filter_streams')}
{t('streams.stream_status')}
{t('streams.sort_by')}
Date: Fri, 24 Nov 2017 12:41:18 +0100 Subject: [PATCH 09/11] Sort by publication_date --- routes/api/assets/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/routes/api/assets/index.js b/routes/api/assets/index.js index 165b2cd99..d7cc86438 100644 --- a/routes/api/assets/index.js +++ b/routes/api/assets/index.js @@ -38,7 +38,7 @@ router.get('/', authorization.needed('ADMIN', 'MODERATOR'), async (req, res, nex const { value = '', - field = 'created_at', + field = 'publication_date', page = 1, asc = 'false', filter = 'all', @@ -46,9 +46,10 @@ router.get('/', authorization.needed('ADMIN', 'MODERATOR'), async (req, res, nex } = req.query; try { + const order = (asc === 'true') ? 1 : -1; const queryOpts = { - sort: {[field]: (asc === 'true') ? 1 : -1}, + sort: {[field]: order, 'created_at': order}, skip: (page - 1) * limit, limit }; From fb1dc23fa97bd863c1c4da31f110363080f7d05c Mon Sep 17 00:00:00 2001 From: Kim Gardner Date: Mon, 27 Nov 2017 16:28:46 +0000 Subject: [PATCH 10/11] Version 3.8.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 196effd71..63a1b7119 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "talk", - "version": "3.8.0", + "version": "3.8.1", "description": "A better commenting experience from Mozilla, The New York Times, and the Washington Post. https://coralproject.net", "main": "app.js", "private": true, From 417a7a3c369e76683781b43f304352307a07b49f Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Tue, 28 Nov 2017 09:16:33 -0700 Subject: [PATCH 11/11] added excemption as no fix available as of yet --- .nsprc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.nsprc b/.nsprc index 071431eff..583560bdd 100644 --- a/.nsprc +++ b/.nsprc @@ -1,5 +1,6 @@ { "exceptions": [ - "https://nodesecurity.io/advisories/531" + "https://nodesecurity.io/advisories/531", + "https://nodesecurity.io/advisories/532" ] -} \ No newline at end of file +}