mirror of
https://github.com/wassname/talk.git
synced 2026-07-02 08:47:53 +08:00
added durations to configuration file
This commit is contained in:
@@ -6,6 +6,7 @@ import moment from 'moment';
|
||||
import { Button, Icon } from 'plugin-api/beta/client/components/ui';
|
||||
import styles from './AccountDeletionRequestedSign.css';
|
||||
import { getErrorMessages } from 'coral-framework/utils';
|
||||
import { scheduledDeletionDelayHours } from '../../config.json';
|
||||
|
||||
class AccountDeletionRequestedSign extends React.Component {
|
||||
cancelAccountDeletion = async () => {
|
||||
@@ -25,7 +26,7 @@ class AccountDeletionRequestedSign extends React.Component {
|
||||
'MMM Do YYYY, h:mm a'
|
||||
);
|
||||
const deletionScheduledOn = moment(scheduledDeletionDate)
|
||||
.subtract(24, 'hours')
|
||||
.subtract(scheduledDeletionDelayHours, 'hours')
|
||||
.format('MMM Do YYYY, h:mm a');
|
||||
|
||||
return (
|
||||
|
||||
@@ -4,16 +4,17 @@ import cn from 'classnames';
|
||||
import { Button } from 'plugin-api/beta/client/components/ui';
|
||||
import styles from './DeleteMyAccountStep.css';
|
||||
import { t } from 'plugin-api/beta/client/services';
|
||||
import { scheduledDeletionDelayHours } from '../../config.json';
|
||||
|
||||
const DeleteMyAccountStep1 = props => (
|
||||
<div className={styles.step}>
|
||||
<h4 className={styles.subTitle}>{t('delete_request.step_1.subtitle')}</h4>
|
||||
<p className={styles.description}>
|
||||
{t('delete_request.step_1.description')}
|
||||
{t('delete_request.step_1.description', scheduledDeletionDelayHours)}
|
||||
</p>
|
||||
<h4 className={styles.subTitle}>{t('delete_request.step_1.subtitle_2')}</h4>
|
||||
<p className={styles.description}>
|
||||
{t('delete_request.step_1.description_2')}
|
||||
{t('delete_request.step_1.description_2', scheduledDeletionDelayHours)}
|
||||
</p>
|
||||
<div className={cn(styles.actions)}>
|
||||
<Button
|
||||
|
||||
@@ -4,6 +4,7 @@ import { t } from 'plugin-api/beta/client/services';
|
||||
import { Button } from 'plugin-api/beta/client/components/ui';
|
||||
import styles from './DownloadCommentHistory.css';
|
||||
import { getErrorMessages } from 'coral-framework/utils';
|
||||
import { downloadRateLimitDays } from '../../config.json';
|
||||
|
||||
export const readableDuration = durAsHours => {
|
||||
const durAsDays = Math.ceil(durAsHours / 24);
|
||||
@@ -42,7 +43,8 @@ class DownloadCommentHistory extends Component {
|
||||
lastAccountDownload && new Date(lastAccountDownload);
|
||||
const hoursLeft = lastAccountDownloadDate
|
||||
? Math.ceil(
|
||||
7 * 24 - (now.getTime() - lastAccountDownloadDate.getTime()) / 3.6e6
|
||||
downloadRateLimitDays * 24 -
|
||||
(now.getTime() - lastAccountDownloadDate.getTime()) / 3.6e6
|
||||
)
|
||||
: 0;
|
||||
const canRequestDownload = !lastAccountDownloadDate || hoursLeft <= 0;
|
||||
@@ -52,7 +54,7 @@ class DownloadCommentHistory extends Component {
|
||||
<h3>{t('download_request.section_title')}</h3>
|
||||
<p>
|
||||
{t('download_request.you_will_get_a_copy')}{' '}
|
||||
<b>{t('download_request.download_rate')}</b>.
|
||||
<b>{t('download_request.download_rate', downloadRateLimitDays)}</b>.
|
||||
</p>
|
||||
{lastAccountDownloadDate && (
|
||||
<p className={styles.most_recent}>
|
||||
|
||||
@@ -2,7 +2,7 @@ en:
|
||||
download_request:
|
||||
section_title: "Download My Comment History"
|
||||
you_will_get_a_copy: "You will recieve an email with a link to download your comment history. You can make"
|
||||
download_rate: "one download request every 7 days"
|
||||
download_rate: "one download request every {0} days"
|
||||
most_recent_request: "Your most recent request"
|
||||
request: "Request Comment History"
|
||||
rate_limit: "You can submit another Comment History request in {0}"
|
||||
@@ -38,9 +38,9 @@ en:
|
||||
item_3: "Your username and email address are removed from our system"
|
||||
step_1:
|
||||
subtitle: "When will my account be deleted?"
|
||||
description: "Your account will be deleted 24 hours after your request has been submitted."
|
||||
description: "Your account will be deleted {0} hours after your request has been submitted."
|
||||
subtitle_2: "Can I still write comments until my account is deleted?"
|
||||
description_2: "Yes, you can still comment, reply, and react to comments until the 24 hours expires."
|
||||
description_2: "Yes, you can still comment, reply, and react to comments until the {0} hours expires."
|
||||
step_2:
|
||||
description: "Before your account is deleted, we recommend you download your comment history for your records. After your account is deleted, you will be unable to request your comment history."
|
||||
to_download: "To download your comment history go to:"
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"scheduledDeletionDelayHours": 24,
|
||||
"downloadRateLimitDays": 7
|
||||
}
|
||||
@@ -8,6 +8,10 @@ const {
|
||||
} = require('./errors');
|
||||
const { ErrNotAuthorized, ErrMaxRateLimit } = require('errors');
|
||||
const { URL } = require('url');
|
||||
const {
|
||||
scheduledDeletionDelayHours,
|
||||
downloadRateLimitDays,
|
||||
} = require('../config.json');
|
||||
|
||||
// generateDownloadLinks will generate a signed set of links for a given user to
|
||||
// download an archive of their data.
|
||||
@@ -42,21 +46,26 @@ async function sendDownloadLink(ctx) {
|
||||
} = ctx;
|
||||
|
||||
// downloadLinkLimiter can be used to limit downloads for the user's data to
|
||||
// once every 7 days.
|
||||
const downloadLinkLimiter = new Limit('profileDataDownloadLimiter', 1, '7d');
|
||||
// once every ${downloadRateLimitDays} days.
|
||||
const downloadLinkLimiter = new Limit(
|
||||
'profileDataDownloadLimiter',
|
||||
1,
|
||||
`${downloadRateLimitDays}d`
|
||||
);
|
||||
|
||||
// Check that the user has not already requested a download within the last
|
||||
// 7 days.
|
||||
// ${downloadRateLimitDays} days.
|
||||
const attempts = await downloadLinkLimiter.get(user.id);
|
||||
if (attempts && attempts >= 1) {
|
||||
throw new ErrMaxRateLimit();
|
||||
}
|
||||
|
||||
// Check if the lastAccountDownload time is within 7 days.
|
||||
// Check if the lastAccountDownload time is within ${downloadRateLimitDays}
|
||||
// days.
|
||||
if (
|
||||
user.lastAccountDownload &&
|
||||
moment(user.lastAccountDownload)
|
||||
.add(7, 'days')
|
||||
.add(downloadRateLimitDays, 'days')
|
||||
.isAfter(moment())
|
||||
) {
|
||||
throw new ErrMaxRateLimit();
|
||||
@@ -93,16 +102,17 @@ async function sendDownloadLink(ctx) {
|
||||
}
|
||||
|
||||
// requestDeletion will schedule the current user to have their account deleted
|
||||
// by setting the `scheduledDeletionDate` on the user 24 hours from now.
|
||||
// by setting the `scheduledDeletionDate` on the user
|
||||
// ${scheduledDeletionDelayHours} hours from now.
|
||||
async function requestDeletion({ user, connectors: { models: { User } } }) {
|
||||
// Ensure the user doesn't already have a deletion scheduled.
|
||||
if (get(user, 'metadata.scheduledDeletionDate')) {
|
||||
throw new ErrDeletionAlreadyScheduled();
|
||||
}
|
||||
|
||||
// Get the date in the future 24 hours from now.
|
||||
// Get the date in the future ${scheduledDeletionDelayHours} hours from now.
|
||||
const scheduledDeletionDate = moment()
|
||||
.add(24, 'hours')
|
||||
.add(scheduledDeletionDelayHours, 'hours')
|
||||
.toDate();
|
||||
|
||||
// Amend the scheduledDeletionDate on the user.
|
||||
|
||||
Reference in New Issue
Block a user