Blocked Sender

This commit is contained in:
2026-01-23 17:02:02 -06:00
parent f6e9bfd2b7
commit 6fdf8f6436
4 changed files with 351 additions and 70 deletions

View File

@@ -34,6 +34,7 @@ const client = new DynamoDBClient({
});
const docClient = DynamoDBDocumentClient.from(client);
const TABLE_NAME = process.env.DYNAMODB_TABLE || 'email-rules';
const TABLE_BLOCKED_NAME = process.env.DYNAMODB_TABLE_BLOCKED || 'email-blocked-senders';
// Validation
const handleValidationErrors = (req, res, next) => {
@@ -101,4 +102,44 @@ app.post('/api/rules', [
}
});
// 5. Blocked: Get One
app.get('/api/blocked/:email', [
param('email').isEmail()
], handleValidationErrors, async (req, res) => {
try {
const response = await docClient.send(new GetCommand({
TableName: TABLE_BLOCKED_NAME,
Key: { email_address: decodeURIComponent(req.params.email) }
}));
// Wenn kein Eintrag existiert, geben wir ein leeres Standard-Objekt zurück
if (!response.Item) {
return res.json({
email_address: decodeURIComponent(req.params.email),
blocked_patterns: []
});
}
res.json(response.Item);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// 6. Blocked: Save/Update
app.post('/api/blocked', [
body('email_address').isEmail(),
body('blocked_patterns').isArray()
], handleValidationErrors, async (req, res) => {
try {
const item = {
email_address: req.body.email_address,
blocked_patterns: req.body.blocked_patterns,
last_updated: new Date().toISOString(),
};
await docClient.send(new PutCommand({ TableName: TABLE_BLOCKED_NAME, Item: item }));
res.json({ success: true, rule: item });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.listen(PORT, () => console.log(`🚀 API active on port ${PORT}`));