@@ -96,20 +96,30 @@ async def start(self) -> None:
96
96
web .post (r"/api" , self ._api_post ),
97
97
web .post (r"/api/upload" , self ._api_upload ),
98
98
web .get (r"/api" , self ._api_index ),
99
- web .get (r"/api/{user}" , self ._api_user ),
100
- web .get (r"/api/{user}/{mailbox}" , self ._api_mailbox ),
101
- web .get (r"/api/{user}/{mailbox}/{uid:\d+}" , self ._api_message ),
102
- web .get (r"/api/{user}/{mailbox}/{uid:\d+}/reply" , self ._api_reply ),
99
+ web .get (r"/api/{account:\d+}" , self ._api_account ),
100
+ web .get (r"/api/{account:\d+}/{mailbox:\d+}" , self ._api_mailbox ),
103
101
web .get (
104
- r"/api/{user}/{mailbox}/{uid:\d+}/attachment/{attachment}" ,
102
+ r"/api/{account:\d+}/{mailbox:\d+}/{uid:\d+}" ,
103
+ self ._api_message ,
104
+ ),
105
+ web .get (
106
+ r"/api/{account:\d+}/{mailbox:\d+}/{uid:\d+}/reply" ,
107
+ self ._api_reply ,
108
+ ),
109
+ web .get (
110
+ r"/api/{account:\d+}/{mailbox:\d+}/{uid:\d+}/attachment/{attachment}" ,
105
111
self ._api_attachment ,
106
112
),
107
- web .get (r"/api/{user}/{mailbox}/{uid:\d+}/flags" , self ._api_flag ),
113
+ web .get (
114
+ r"/api/{account:\d+}/{mailbox:\d+}/{uid:\d+}/flags" , self ._api_flag
115
+ ),
108
116
web .put (
109
- r"/api/{user}/{mailbox}/{uid:\d+}/flags/{flag}" , self ._api_flag
117
+ r"/api/{account:\d+}/{mailbox:\d+}/{uid:\d+}/flags/{flag}" ,
118
+ self ._api_flag ,
110
119
),
111
120
web .delete (
112
- r"/api/{user}/{mailbox}/{uid:\d+}/flags/{flag}" , self ._api_flag
121
+ r"/api/{account:\d+}/{mailbox:\d+}/{uid:\d+}/flags/{flag}" ,
122
+ self ._api_flag ,
113
123
),
114
124
]
115
125
)
@@ -191,18 +201,22 @@ async def _api_config(self, request: Request) -> Response: # pylint: disable=W0
191
201
)
192
202
193
203
async def _api_index (self , request : Request ) -> Response : # pylint: disable=W0613
194
- mailboxes = await self .mailboxes .list ()
195
- return web .json_response (mailboxes )
204
+ accounts = await self .mailboxes .list ()
205
+ return web .json_response (
206
+ {self .mailboxes .id_of_user (user ): user for user in accounts }
207
+ )
196
208
197
- async def _api_user (self , request : Request ) -> Response : # pylint: disable=W0613
209
+ async def _api_account (self , request : Request ) -> Response : # pylint: disable=W0613
198
210
try :
199
- user = request .match_info ["user" ]
200
- mailbox = self .mailboxes [ user ]
211
+ account_id = int ( request .match_info ["account" ])
212
+ account = await self .mailboxes . get_by_id ( account_id )
201
213
except KeyError as e : # pragma: no cover
202
214
raise web .HTTPNotFound () from e
203
215
204
- mailboxes = await mailbox .list_mailboxes ()
205
- return web .json_response ([e .name for e in mailboxes .list ()])
216
+ mailboxes = await account .list_mailboxes ()
217
+ return web .json_response (
218
+ {account .id_of_mailbox (e .name ): e .name for e in mailboxes .list ()}
219
+ )
206
220
207
221
async def _api_upload (self , request : Request ) -> Response : # pylint: disable=W0613
208
222
data = await request .json ()
@@ -256,9 +270,10 @@ async def _api_post(self, request: Request) -> Response:
256
270
257
271
async def _api_mailbox (self , request : Request ) -> Response :
258
272
try :
259
- user = request .match_info ["user" ]
260
- name = request .match_info ["mailbox" ]
261
- mailbox = await self .mailboxes [user ].get_mailbox (name )
273
+ account_id = int (request .match_info ["account" ])
274
+ account = self .mailboxes .user_mapping [account_id ]
275
+ mailbox_id = int (request .match_info ["mailbox" ])
276
+ mailbox = await self .mailboxes [account ].get_mailbox_by_id (mailbox_id )
262
277
except KeyError as e : # pragma: no cover
263
278
raise web .HTTPNotFound () from e
264
279
@@ -270,10 +285,11 @@ async def _api_mailbox(self, request: Request) -> Response:
270
285
271
286
async def _api_message (self , request : Request ) -> Response :
272
287
try :
273
- user = request .match_info ["user" ]
274
- name = request .match_info ["mailbox" ]
288
+ account_id = int (request .match_info ["account" ])
289
+ account = self .mailboxes .user_mapping [account_id ]
290
+ mailbox_id = int (request .match_info ["mailbox" ])
275
291
uid = int (request .match_info ["uid" ])
276
- mailbox = await self .mailboxes [user ]. get_mailbox ( name )
292
+ mailbox = await self .mailboxes [account ]. get_mailbox_by_id ( mailbox_id )
277
293
except (IndexError , KeyError ) as e : # pragma: no cover
278
294
raise web .HTTPNotFound () from e
279
295
@@ -285,10 +301,11 @@ async def _api_message(self, request: Request) -> Response:
285
301
286
302
async def _api_reply (self , request : Request ) -> Response :
287
303
try :
288
- user = request .match_info ["user" ]
289
- name = request .match_info ["mailbox" ]
304
+ account_id = int ( request .match_info ["account" ])
305
+ mailbox_id = int ( request .match_info ["mailbox" ])
290
306
uid = int (request .match_info ["uid" ])
291
- mailbox = await self .mailboxes [user ].get_mailbox (name )
307
+ account = await self .mailboxes .get_by_id (account_id )
308
+ mailbox = await account .get_mailbox_by_id (mailbox_id )
292
309
except (IndexError , KeyError ) as e : # pragma: no cover
293
310
raise web .HTTPNotFound () from e
294
311
@@ -314,11 +331,12 @@ async def _api_reply(self, request: Request) -> Response:
314
331
315
332
async def _api_attachment (self , request : Request ) -> Response :
316
333
try :
317
- user = request .match_info ["user" ]
318
- name = request .match_info ["mailbox" ]
334
+ account_id = int ( request .match_info ["account" ])
335
+ mailbox_id = int ( request .match_info ["mailbox" ])
319
336
uid = int (request .match_info ["uid" ])
320
337
attachment = request .match_info ["attachment" ]
321
- mailbox = await self .mailboxes [user ].get_mailbox (name )
338
+ account = await self .mailboxes .get_by_id (account_id )
339
+ mailbox = await account .get_mailbox_by_id (mailbox_id )
322
340
except (IndexError , KeyError ) as e : # pragma: no cover
323
341
raise web .HTTPNotFound () from e
324
342
@@ -350,9 +368,10 @@ async def _api_attachment(self, request: Request) -> Response:
350
368
351
369
async def _api_flag (self , request : Request ) -> Response :
352
370
try :
353
- user = request .match_info ["user" ]
354
- name = request .match_info ["mailbox" ]
355
- mailbox = await self .mailboxes [user ].get_mailbox (name )
371
+ account_id = int (request .match_info ["account" ])
372
+ mailbox_id = int (request .match_info ["mailbox" ])
373
+ account = await self .mailboxes .get_by_id (account_id )
374
+ mailbox = await account .get_mailbox_by_id (mailbox_id )
356
375
uid = int (request .match_info ["uid" ])
357
376
358
377
if request .method in ("DELETE" , "PUT" ):
0 commit comments