1414use OCA \Mail \Http \JsonResponse ;
1515use OCA \Mail \Http \TrapError ;
1616use OCA \Mail \Service \AccountService ;
17+ use OCA \Mail \Service \DelegationService ;
1718use OCA \Mail \Service \DraftsService ;
1819use OCA \Mail \Service \OutboxService ;
1920use OCA \Mail \Service \SmimeService ;
@@ -29,18 +30,21 @@ class OutboxController extends Controller {
2930 private string $ userId ;
3031 private AccountService $ accountService ;
3132 private SmimeService $ smimeService ;
33+ private DelegationService $ delegationService ;
3234
3335 public function __construct (string $ appName ,
3436 $ userId ,
3537 IRequest $ request ,
3638 OutboxService $ service ,
3739 AccountService $ accountService ,
38- SmimeService $ smimeService ) {
40+ SmimeService $ smimeService ,
41+ DelegationService $ delegationService ) {
3942 parent ::__construct ($ appName , $ request );
4043 $ this ->userId = $ userId ;
4144 $ this ->service = $ service ;
4245 $ this ->accountService = $ accountService ;
4346 $ this ->smimeService = $ smimeService ;
47+ $ this ->delegationService = $ delegationService ;
4448 }
4549
4650 /**
@@ -61,7 +65,8 @@ public function index(): JsonResponse {
6165 */
6266 #[TrapError]
6367 public function show (int $ id ): JsonResponse {
64- $ message = $ this ->service ->getMessage ($ id , $ this ->userId );
68+ $ effectiveUserId = $ this ->delegationService ->resolveLocalMessageUserId ($ id , $ this ->userId );
69+ $ message = $ this ->service ->getMessage ($ id , $ effectiveUserId );
6570 return JsonResponse::success ($ message );
6671 }
6772
@@ -108,7 +113,8 @@ public function create(
108113 bool $ requestMdn = false ,
109114 bool $ isPgpMime = false ,
110115 ): JsonResponse {
111- $ account = $ this ->accountService ->find ($ this ->userId , $ accountId );
116+ $ effectiveUserId = $ this ->delegationService ->resolveAccountUserId ($ accountId , $ this ->userId );
117+ $ account = $ this ->accountService ->find ($ effectiveUserId , $ accountId );
112118
113119 if ($ draftId !== null ) {
114120 $ this ->service ->handleDraft ($ account , $ draftId );
@@ -147,9 +153,10 @@ public function create(
147153 */
148154 #[TrapError]
149155 public function createFromDraft (DraftsService $ draftsService , int $ id , int $ sendAt ): JsonResponse {
150- $ draftMessage = $ draftsService ->getMessage ($ id , $ this ->userId );
156+ $ effectiveUserId = $ this ->delegationService ->resolveLocalMessageUserId ($ id , $ this ->userId );
157+ $ draftMessage = $ draftsService ->getMessage ($ id , $ effectiveUserId );
151158 // Locate the account to check authorization
152- $ this ->accountService ->find ($ this -> userId , $ draftMessage ->getAccountId ());
159+ $ this ->accountService ->find ($ effectiveUserId , $ draftMessage ->getAccountId ());
153160
154161 $ outboxMessage = $ this ->service ->convertDraft ($ draftMessage , $ sendAt );
155162
@@ -201,11 +208,12 @@ public function update(
201208 bool $ requestMdn = false ,
202209 bool $ isPgpMime = false ,
203210 ): JsonResponse {
204- $ message = $ this ->service ->getMessage ($ id , $ this ->userId );
211+ $ effectiveUserId = $ this ->delegationService ->resolveAccountUserId ($ accountId , $ this ->userId );
212+ $ message = $ this ->service ->getMessage ($ id , $ effectiveUserId );
205213 if ($ message ->getStatus () === LocalMessage::STATUS_PROCESSED ) {
206214 return JsonResponse::error ('Cannot modify already sent message ' , Http::STATUS_FORBIDDEN , [$ message ]);
207215 }
208- $ account = $ this ->accountService ->find ($ this -> userId , $ accountId );
216+ $ account = $ this ->accountService ->find ($ effectiveUserId , $ accountId );
209217
210218 $ message ->setAccountId ($ accountId );
211219 $ message ->setAliasId ($ aliasId );
@@ -239,8 +247,9 @@ public function update(
239247 */
240248 #[TrapError]
241249 public function send (int $ id ): JsonResponse {
242- $ message = $ this ->service ->getMessage ($ id , $ this ->userId );
243- $ account = $ this ->accountService ->find ($ this ->userId , $ message ->getAccountId ());
250+ $ effectiveUserId = $ this ->delegationService ->resolveLocalMessageUserId ($ id , $ this ->userId );
251+ $ message = $ this ->service ->getMessage ($ id , $ effectiveUserId );
252+ $ account = $ this ->accountService ->find ($ effectiveUserId , $ message ->getAccountId ());
244253
245254 $ message = $ this ->service ->sendMessage ($ message , $ account );
246255
@@ -260,8 +269,9 @@ public function send(int $id): JsonResponse {
260269 */
261270 #[TrapError]
262271 public function destroy (int $ id ): JsonResponse {
263- $ message = $ this ->service ->getMessage ($ id , $ this ->userId );
264- $ this ->service ->deleteMessage ($ this ->userId , $ message );
272+ $ effectiveUserId = $ this ->delegationService ->resolveLocalMessageUserId ($ id , $ this ->userId );
273+ $ message = $ this ->service ->getMessage ($ id , $ effectiveUserId );
274+ $ this ->service ->deleteMessage ($ effectiveUserId , $ message );
265275 return JsonResponse::success ('Message deleted ' , Http::STATUS_ACCEPTED );
266276 }
267277}
0 commit comments