aboutsummaryrefslogtreecommitdiff
path: root/services/docker/mail-server/aws-sendmail/aws/retriver.ts
diff options
context:
space:
mode:
Diffstat (limited to 'services/docker/mail-server/aws-sendmail/aws/retriver.ts')
-rw-r--r--services/docker/mail-server/aws-sendmail/aws/retriver.ts31
1 files changed, 19 insertions, 12 deletions
diff --git a/services/docker/mail-server/aws-sendmail/aws/retriver.ts b/services/docker/mail-server/aws-sendmail/aws/retriver.ts
index 1544c04..b599c15 100644
--- a/services/docker/mail-server/aws-sendmail/aws/retriver.ts
+++ b/services/docker/mail-server/aws-sendmail/aws/retriver.ts
@@ -6,10 +6,10 @@ import {
S3Client,
} from "@aws-sdk/client-s3";
-import { generateTimeStringForFileName } from "../util.ts";
-import { getLogger } from "../logger.ts";
import { AwsContext, s3MoveObject } from "./context.ts";
+import { getLogger } from "../logger.ts";
import { getConfig } from "../config.ts";
+import { Mail } from "../mail.ts";
export class AwsMailRetriever {
readonly liveMailPrefix = "mail/live/";
@@ -21,7 +21,7 @@ export class AwsMailRetriever {
constructor(
aws: AwsContext,
- private readonly callback: (rawMail: string) => Promise<void>,
+ private readonly callback: (mail: Mail) => Promise<void>,
) {
const { region, credentials } = aws;
this.s3Client = new S3Client({ region, credentials });
@@ -34,12 +34,6 @@ export class AwsMailRetriever {
});
}
- generateArchivePrefix(instant: Date | Temporal.Instant): string {
- return `${this.archiveMailPrefix}${
- generateTimeStringForFileName(instant, true)
- }/`;
- }
-
async listLiveMails(): Promise<string[]> {
const listCommand = new ListObjectsV2Command({
Bucket: this.mailBucket,
@@ -55,7 +49,8 @@ export class AwsMailRetriever {
const result: string[] = [];
for (const object of res.Contents) {
if (object.Key != null) {
- result.push(object.Key);
+ // TODO: check prefix consistence here.
+ result.push(object.Key.slice(this.liveMailPrefix.length));
} else {
getLogger().warn(
"Listing live mails in S3 returns an object with no Key.",
@@ -79,13 +74,25 @@ export class AwsMailRetriever {
}
const rawMail = await res.Body.transformToString();
- await this.callback(rawMail);
+ const mail = new Mail(rawMail);
+ mail.awsMessageId = messageId;
+ await this.callback(mail);
// TODO: Continue here.
- await s3MoveObject(this.s3Client, this.mailBucket, mailPath, );
+ await s3MoveObject(
+ this.s3Client,
+ this.mailBucket,
+ mailPath,
+ `${this.archiveMailPrefix}${
+ mail.simpleGetDateString("invalid-date")
+ }/${messageId}`,
+ );
}
async recycleLiveMails() {
const mails = await this.listLiveMails();
+ for (const messageId of mails) {
+ await this.deliverS3MailObject(messageId);
+ }
}
}