diff options
author | Chocobozzz <me@florianbigard.com> | 2019-01-09 15:14:29 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2019-01-10 11:32:37 +0100 |
commit | a4101923e699e49ceb9ff36e971c75417fafc9f0 (patch) | |
tree | c098a87ac5a85e1bc7454facbb59ecbd6c7dac82 /server/lib | |
parent | 8d00889b6038c38d9c86cbeca88a9f3c23962c48 (diff) | |
download | PeerTube-a4101923e699e49ceb9ff36e971c75417fafc9f0.tar.gz PeerTube-a4101923e699e49ceb9ff36e971c75417fafc9f0.tar.zst PeerTube-a4101923e699e49ceb9ff36e971c75417fafc9f0.zip |
Implement contact form on server side
Diffstat (limited to 'server/lib')
-rw-r--r-- | server/lib/emailer.ts | 23 | ||||
-rw-r--r-- | server/lib/job-queue/handlers/email.ts | 3 | ||||
-rw-r--r-- | server/lib/redis.ts | 24 |
3 files changed, 45 insertions, 5 deletions
diff --git a/server/lib/emailer.ts b/server/lib/emailer.ts index 3429498e7..9b1c5122f 100644 --- a/server/lib/emailer.ts +++ b/server/lib/emailer.ts | |||
@@ -354,13 +354,32 @@ class Emailer { | |||
354 | return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload }) | 354 | return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload }) |
355 | } | 355 | } |
356 | 356 | ||
357 | sendMail (to: string[], subject: string, text: string) { | 357 | addContactFormJob (fromEmail: string, fromName: string, body: string) { |
358 | const text = 'Hello dear admin,\n\n' + | ||
359 | fromName + ' sent you a message' + | ||
360 | '\n\n---------------------------------------\n\n' + | ||
361 | body + | ||
362 | '\n\n---------------------------------------\n\n' + | ||
363 | 'Cheers,\n' + | ||
364 | 'PeerTube.' | ||
365 | |||
366 | const emailPayload: EmailPayload = { | ||
367 | from: fromEmail, | ||
368 | to: [ CONFIG.ADMIN.EMAIL ], | ||
369 | subject: '[PeerTube] Contact form submitted', | ||
370 | text | ||
371 | } | ||
372 | |||
373 | return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload }) | ||
374 | } | ||
375 | |||
376 | sendMail (to: string[], subject: string, text: string, from?: string) { | ||
358 | if (!this.enabled) { | 377 | if (!this.enabled) { |
359 | throw new Error('Cannot send mail because SMTP is not configured.') | 378 | throw new Error('Cannot send mail because SMTP is not configured.') |
360 | } | 379 | } |
361 | 380 | ||
362 | return this.transporter.sendMail({ | 381 | return this.transporter.sendMail({ |
363 | from: CONFIG.SMTP.FROM_ADDRESS, | 382 | from: from || CONFIG.SMTP.FROM_ADDRESS, |
364 | to: to.join(','), | 383 | to: to.join(','), |
365 | subject, | 384 | subject, |
366 | text | 385 | text |
diff --git a/server/lib/job-queue/handlers/email.ts b/server/lib/job-queue/handlers/email.ts index 73d98ae54..220d0af32 100644 --- a/server/lib/job-queue/handlers/email.ts +++ b/server/lib/job-queue/handlers/email.ts | |||
@@ -6,13 +6,14 @@ export type EmailPayload = { | |||
6 | to: string[] | 6 | to: string[] |
7 | subject: string | 7 | subject: string |
8 | text: string | 8 | text: string |
9 | from?: string | ||
9 | } | 10 | } |
10 | 11 | ||
11 | async function processEmail (job: Bull.Job) { | 12 | async function processEmail (job: Bull.Job) { |
12 | const payload = job.data as EmailPayload | 13 | const payload = job.data as EmailPayload |
13 | logger.info('Processing email in job %d.', job.id) | 14 | logger.info('Processing email in job %d.', job.id) |
14 | 15 | ||
15 | return Emailer.Instance.sendMail(payload.to, payload.subject, payload.text) | 16 | return Emailer.Instance.sendMail(payload.to, payload.subject, payload.text, payload.from) |
16 | } | 17 | } |
17 | 18 | ||
18 | // --------------------------------------------------------------------------- | 19 | // --------------------------------------------------------------------------- |
diff --git a/server/lib/redis.ts b/server/lib/redis.ts index 3e25e6a2c..3628c0583 100644 --- a/server/lib/redis.ts +++ b/server/lib/redis.ts | |||
@@ -2,7 +2,13 @@ import * as express from 'express' | |||
2 | import { createClient, RedisClient } from 'redis' | 2 | import { createClient, RedisClient } from 'redis' |
3 | import { logger } from '../helpers/logger' | 3 | import { logger } from '../helpers/logger' |
4 | import { generateRandomString } from '../helpers/utils' | 4 | import { generateRandomString } from '../helpers/utils' |
5 | import { CONFIG, USER_PASSWORD_RESET_LIFETIME, USER_EMAIL_VERIFY_LIFETIME, VIDEO_VIEW_LIFETIME } from '../initializers' | 5 | import { |
6 | CONFIG, | ||
7 | CONTACT_FORM_LIFETIME, | ||
8 | USER_EMAIL_VERIFY_LIFETIME, | ||
9 | USER_PASSWORD_RESET_LIFETIME, | ||
10 | VIDEO_VIEW_LIFETIME | ||
11 | } from '../initializers' | ||
6 | 12 | ||
7 | type CachedRoute = { | 13 | type CachedRoute = { |
8 | body: string, | 14 | body: string, |
@@ -76,6 +82,16 @@ class Redis { | |||
76 | return this.getValue(this.generateVerifyEmailKey(userId)) | 82 | return this.getValue(this.generateVerifyEmailKey(userId)) |
77 | } | 83 | } |
78 | 84 | ||
85 | /************* Contact form per IP *************/ | ||
86 | |||
87 | async setContactFormIp (ip: string) { | ||
88 | return this.setValue(this.generateContactFormKey(ip), '1', CONTACT_FORM_LIFETIME) | ||
89 | } | ||
90 | |||
91 | async isContactFormIpExists (ip: string) { | ||
92 | return this.exists(this.generateContactFormKey(ip)) | ||
93 | } | ||
94 | |||
79 | /************* Views per IP *************/ | 95 | /************* Views per IP *************/ |
80 | 96 | ||
81 | setIPVideoView (ip: string, videoUUID: string) { | 97 | setIPVideoView (ip: string, videoUUID: string) { |
@@ -175,7 +191,11 @@ class Redis { | |||
175 | } | 191 | } |
176 | 192 | ||
177 | private generateViewKey (ip: string, videoUUID: string) { | 193 | private generateViewKey (ip: string, videoUUID: string) { |
178 | return videoUUID + '-' + ip | 194 | return `views-${videoUUID}-${ip}` |
195 | } | ||
196 | |||
197 | private generateContactFormKey (ip: string) { | ||
198 | return 'contact-form-' + ip | ||
179 | } | 199 | } |
180 | 200 | ||
181 | /************* Redis helpers *************/ | 201 | /************* Redis helpers *************/ |