mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-08-28 19:48:01 +08:00
fix: align user send mail behavior
This commit is contained in:
@@ -5,8 +5,10 @@ import {
|
|||||||
createTestAddress,
|
createTestAddress,
|
||||||
deleteAddress,
|
deleteAddress,
|
||||||
deleteAllMailpitMessages,
|
deleteAllMailpitMessages,
|
||||||
|
getAddressSender,
|
||||||
hashPassword,
|
hashPassword,
|
||||||
onMailpitMessage,
|
onMailpitMessage,
|
||||||
|
updateAddressSender,
|
||||||
} from '../../fixtures/test-helpers';
|
} from '../../fixtures/test-helpers';
|
||||||
|
|
||||||
async function createUser(request: APIRequestContext) {
|
async function createUser(request: APIRequestContext) {
|
||||||
@@ -69,6 +71,12 @@ test.describe('User send mail API', () => {
|
|||||||
await bindAddress(request, user.jwt, bound.jwt);
|
await bindAddress(request, user.jwt, bound.jwt);
|
||||||
await bindAddress(request, user.jwt, accessRequest.jwt);
|
await bindAddress(request, user.jwt, accessRequest.jwt);
|
||||||
|
|
||||||
|
const invalidAddressSettingsRes = await request.get(
|
||||||
|
`${WORKER_URL}/user_api/address/0/settings`,
|
||||||
|
{ headers: { 'x-user-token': user.jwt } },
|
||||||
|
);
|
||||||
|
expect(invalidAddressSettingsRes.status()).toBe(400);
|
||||||
|
|
||||||
const outsiderSettingsRes = await request.get(
|
const outsiderSettingsRes = await request.get(
|
||||||
`${WORKER_URL}/user_api/address/${outsider.address_id}/settings`,
|
`${WORKER_URL}/user_api/address/${outsider.address_id}/settings`,
|
||||||
{ headers: { 'x-user-token': user.jwt } },
|
{ headers: { 'x-user-token': user.jwt } },
|
||||||
@@ -112,6 +120,20 @@ test.describe('User send mail API', () => {
|
|||||||
);
|
);
|
||||||
expect(requestAccessRes.ok()).toBe(true);
|
expect(requestAccessRes.ok()).toBe(true);
|
||||||
|
|
||||||
|
const accessSender = await getAddressSender(request, accessRequest.address);
|
||||||
|
await updateAddressSender(request, {
|
||||||
|
address: accessRequest.address,
|
||||||
|
address_id: accessSender.id,
|
||||||
|
balance: 0,
|
||||||
|
enabled: true,
|
||||||
|
});
|
||||||
|
const duplicateAccessRes = await request.post(
|
||||||
|
`${WORKER_URL}/user_api/address/${accessRequest.address_id}/request_send_mail_access`,
|
||||||
|
{ headers: { 'x-user-token': user.jwt } },
|
||||||
|
);
|
||||||
|
expect(duplicateAccessRes.status()).toBe(400);
|
||||||
|
expect(await duplicateAccessRes.text()).toContain('Already');
|
||||||
|
|
||||||
const addressSettingsRes = await request.get(
|
const addressSettingsRes = await request.get(
|
||||||
`${WORKER_URL}/user_api/address/${bound.address_id}/settings`,
|
`${WORKER_URL}/user_api/address/${bound.address_id}/settings`,
|
||||||
{ headers: { 'x-user-token': user.jwt } },
|
{ headers: { 'x-user-token': user.jwt } },
|
||||||
@@ -183,6 +205,28 @@ test.describe('User send mail API', () => {
|
|||||||
);
|
);
|
||||||
expect((await updatedSettingsRes.json()).send_balance).toBe(9);
|
expect((await updatedSettingsRes.json()).send_balance).toBe(9);
|
||||||
|
|
||||||
|
const sender = await getAddressSender(request, bound.address);
|
||||||
|
await updateAddressSender(request, {
|
||||||
|
address: bound.address,
|
||||||
|
address_id: sender.id,
|
||||||
|
balance: 0,
|
||||||
|
enabled: true,
|
||||||
|
});
|
||||||
|
const noBalanceRes = await request.post(
|
||||||
|
`${WORKER_URL}/user_api/address/${bound.address_id}/send_mail`,
|
||||||
|
{
|
||||||
|
headers: { 'x-user-token': user.jwt },
|
||||||
|
data: {
|
||||||
|
to_mail: 'recipient@test.example.com',
|
||||||
|
subject: 'No balance user send',
|
||||||
|
content: 'This message must not be sent',
|
||||||
|
is_html: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
expect(noBalanceRes.status()).toBe(400);
|
||||||
|
expect(await noBalanceRes.text()).toContain('No balance');
|
||||||
|
|
||||||
const userSendboxRes = await request.get(
|
const userSendboxRes = await request.get(
|
||||||
`${WORKER_URL}/user_api/sendbox?limit=20&offset=0`,
|
`${WORKER_URL}/user_api/sendbox?limit=20&offset=0`,
|
||||||
{ headers: { 'x-user-token': user.jwt } },
|
{ headers: { 'x-user-token': user.jwt } },
|
||||||
|
|||||||
@@ -60,13 +60,12 @@ const send = async (c: Context<HonoCustomType>): Promise<Response> => {
|
|||||||
if (address instanceof Response) {
|
if (address instanceof Response) {
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
const msgs = i18n.getMessagesbyContext(c);
|
|
||||||
try {
|
try {
|
||||||
const reqJson = await c.req.json();
|
const reqJson = await c.req.json();
|
||||||
await sendMail(c, address, reqJson);
|
await sendMail(c, address, reqJson);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Failed to send user mail", error);
|
console.error("Failed to send user mail", error);
|
||||||
return c.text(msgs.OperationFailedMsg, 500);
|
return c.text(`Failed to send mail ${(error as Error).message}`, 400);
|
||||||
}
|
}
|
||||||
return c.json({ status: "ok" });
|
return c.json({ status: "ok" });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,6 +65,10 @@ app.use('/*', async (c, next) => {
|
|||||||
c.req.path.startsWith("/api/new_address")
|
c.req.path.startsWith("/api/new_address")
|
||||||
|| c.req.path.startsWith("/api/send_mail")
|
|| c.req.path.startsWith("/api/send_mail")
|
||||||
|| c.req.path.startsWith("/external/api/send_mail")
|
|| c.req.path.startsWith("/external/api/send_mail")
|
||||||
|
|| (
|
||||||
|
c.req.path.startsWith("/user_api/address/")
|
||||||
|
&& c.req.path.endsWith("/send_mail")
|
||||||
|
)
|
||||||
|| c.req.path.startsWith("/user_api/register")
|
|| c.req.path.startsWith("/user_api/register")
|
||||||
|| c.req.path.startsWith("/user_api/verify_code")
|
|| c.req.path.startsWith("/user_api/verify_code")
|
||||||
) {
|
) {
|
||||||
|
|||||||
Reference in New Issue
Block a user