diff --git a/packages/api/src/routers/svc/pdf_attachments.ts b/packages/api/src/routers/svc/pdf_attachments.ts index 2c3e40dd7..5234415cb 100644 --- a/packages/api/src/routers/svc/pdf_attachments.ts +++ b/packages/api/src/routers/svc/pdf_attachments.ts @@ -12,6 +12,7 @@ import { initModels } from '../../server' import { kx } from '../../datalayer/knex_config' import { analytics } from '../../utils/analytics' import { getNewsletterEmail } from '../../services/newsletters' +import { setClaims } from '../../datalayer/helpers' export function pdfAttachmentsRouter() { const router = express.Router() @@ -82,9 +83,10 @@ export function pdfAttachmentsRouter() { router.post('/create-article', async (req, res) => { console.log('pdf-attachments/create-article') - const { email, uploadFileId } = req.body as { + const { email, uploadFileId, subject } = req.body as { email: string uploadFileId: string + subject: string } const token = req?.headers?.authorization @@ -130,13 +132,14 @@ export function pdfAttachmentsRouter() { pageType: pageType, hash: uploadFileHash, uploadFileId: uploadFileId, - title: uploadFile.fileName, + title: subject || uploadFile.fileName, content: '', } - const uploadFileData = await models.uploadFile.setFileUploadComplete( - uploadFileId - ) + const uploadFileData = await kx.transaction(async (tx) => { + await setClaims(tx, user.id) + return models.uploadFile.setFileUploadComplete(uploadFileId, tx) + }) if (!uploadFileData || !uploadFileData.id || !uploadFileData.fileName) { return res.status(400).send('BAD REQUEST') } @@ -147,6 +150,7 @@ export function pdfAttachmentsRouter() { ) const link = await kx.transaction(async (tx) => { + await setClaims(tx, user.id) const articleRecord = await models.article.create(articleToSave, tx) return models.userArticle.create( { diff --git a/packages/inbound-email-handler/src/index.ts b/packages/inbound-email-handler/src/index.ts index 5b79b2cfc..e60170fbb 100644 --- a/packages/inbound-email-handler/src/index.ts +++ b/packages/inbound-email-handler/src/index.ts @@ -23,15 +23,16 @@ export const inboundEmailHandler = Sentry.GCPFunction.wrapHttpFunction( const parts = multipart.parse(req.body, 'xYzZY') const parsed: Record = {} + let pdfAttachment: Buffer | undefined + let pdfAttachmentName: string | undefined + for (const part of parts) { const { name, data, type, filename } = part if (name && data) { parsed[name] = data.toString() } else if (type === 'application/pdf' && data) { - parsed['pdf-attachment-data'] = data.toString() - parsed['pdf-attachment-filename'] = filename - ? filename - : 'attachment.pdf' + pdfAttachment = data + pdfAttachmentName = filename } else { console.log('no data or name for ', part) } @@ -82,12 +83,13 @@ export const inboundEmailHandler = Sentry.GCPFunction.wrapHttpFunction( if (isConfirmationEmail(from)) { console.log('handleConfirmation', from, recipientAddress) await handleConfirmation(recipientAddress, subject) - } else if (parsed['pdf-attachment-filename']) { + } else if (pdfAttachment) { console.log('handle PDF attachment', from, recipientAddress) await handlePdfAttachment( recipientAddress, - parsed['pdf-attachment-filename'], - parsed['pdf-attachment-data'] + pdfAttachmentName, + pdfAttachment, + subject ) } diff --git a/packages/inbound-email-handler/src/pdf.ts b/packages/inbound-email-handler/src/pdf.ts index 1cf8325e8..85e68cd84 100644 --- a/packages/inbound-email-handler/src/pdf.ts +++ b/packages/inbound-email-handler/src/pdf.ts @@ -11,11 +11,14 @@ type UploadResponse = { export const handlePdfAttachment = async ( email: string, - fileName: string, - data: string + fileName: string | undefined, + data: Buffer, + subject: string ): Promise => { console.log('handlePdfAttachment', email, fileName) + fileName = fileName || 'attachment.pdf' + try { const uploadResult = await getUploadIdAndSignedUrl(email, fileName) if (!uploadResult.url || !uploadResult.id) { @@ -23,7 +26,7 @@ export const handlePdfAttachment = async ( return } await uploadToSignedUrl(uploadResult.url, data) - await createArticle(email, uploadResult.id) + await createArticle(email, uploadResult.id, subject) } catch (error) { console.error('handlePdfAttachment error', error) } @@ -60,7 +63,7 @@ const getUploadIdAndSignedUrl = async ( const uploadToSignedUrl = async ( uploadUrl: string, - data: string + data: Buffer ): Promise => { return axios.put(uploadUrl, data, { headers: { @@ -73,11 +76,13 @@ const uploadToSignedUrl = async ( const createArticle = async ( email: string, - uploadFileId: string + uploadFileId: string, + subject: string ): Promise => { const data = { email, uploadFileId, + subject, } if (process.env.JWT_SECRET === undefined) {