Skip to content

Commit 796e879

Browse files
committed
[IMP] mail, *: subscribe to presence with token
*: base, cloud_storage_azure, cloud_storage_google, im_livechat, portal, test_discuss_full, test_mail, test_mail_full, web, website_livechat. Currently, complex queries and overrides are used to validate access to presences. This commit replaces those by a simple access token. task-4676556 closes odoo#210762 Related: odoo/enterprise#85963 Signed-off-by: Matthieu Stockbauer (tsm) <[email protected]>
1 parent 0e352f1 commit 796e879

35 files changed

+383
-407
lines changed

addons/bus/static/src/services/bus_service.js

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Deferred } from "@web/core/utils/concurrency";
44
import { registry } from "@web/core/registry";
55
import { session } from "@web/session";
66
import { isIosApp } from "@web/core/browser/feature_detection";
7-
import { EventBus } from "@odoo/owl";
7+
import { EventBus, reactive } from "@odoo/owl";
88
import { user } from "@web/core/user";
99

1010
// List of worker events that should not be broadcasted.
@@ -34,10 +34,7 @@ export const busService = {
3434
* @typedef {typeof import("@bus/workers/websocket_worker").WORKER_STATE} WORKER_STATE
3535
* @type {WORKER_STATE[keyof WORKER_STATE]}
3636
*/
37-
let workerState;
38-
let isActive = false;
3937
let isInitialized = false;
40-
let lastNotificationId = null;
4138
let isUsingSharedWorker = browser.SharedWorker && !isIosApp();
4239
let backOnlineTimeout;
4340
const startedAt = luxon.DateTime.now().set({ milliseconds: 0 });
@@ -89,8 +86,8 @@ export const busService = {
8986
}
9087
case "notification": {
9188
const notifications = data.map(({ id, message }) => ({ id, ...message }));
92-
lastNotificationId = notifications.at(-1).id;
93-
multiTab.setSharedValue("last_notification_id", lastNotificationId);
89+
state.lastNotificationId = notifications.at(-1).id;
90+
multiTab.setSharedValue("last_notification_id", state.lastNotificationId);
9491
for (const { id, type, payload } of notifications) {
9592
notificationBus.trigger(type, { id, payload });
9693
busService._onMessage(env, id, type, payload);
@@ -103,7 +100,7 @@ export const busService = {
103100
break;
104101
}
105102
case "worker_state_updated":
106-
workerState = data;
103+
state.workerState = data;
107104
break;
108105
case "outdated": {
109106
multiTab.unregister();
@@ -214,7 +211,7 @@ export const busService = {
214211
"online",
215212
() => {
216213
backOnlineTimeout = browser.setTimeout(() => {
217-
if (isActive) {
214+
if (state.isActive) {
218215
send("start");
219216
}
220217
}, BACK_ONLINE_RECONNECT_DELAY);
@@ -231,7 +228,7 @@ export const busService = {
231228
capture: true,
232229
}
233230
);
234-
return {
231+
const state = reactive({
235232
addEventListener: bus.addEventListener.bind(bus),
236233
addChannel: async (channel) => {
237234
if (!worker) {
@@ -240,9 +237,11 @@ export const busService = {
240237
await connectionInitializedDeferred;
241238
send("add_channel", channel);
242239
send("start");
243-
isActive = true;
240+
state.isActive = true;
241+
},
242+
deleteChannel: (channel) => {
243+
send("delete_channel", channel);
244244
},
245-
deleteChannel: (channel) => send("delete_channel", channel),
246245
setLoggingEnabled: (isEnabled) => send("set_logging_enabled", isEnabled),
247246
downloadLogs: () => send("request_logs"),
248247
forceUpdateChannels: () => send("force_update_channels"),
@@ -255,15 +254,13 @@ export const busService = {
255254
}
256255
await connectionInitializedDeferred;
257256
send("start");
258-
isActive = true;
257+
state.isActive = true;
259258
},
260259
stop: () => {
261260
send("leave");
262-
isActive = false;
263-
},
264-
get isActive() {
265-
return isActive;
261+
state.isActive = false;
266262
},
263+
isActive: false,
267264
/**
268265
* Subscribe to a single notification type.
269266
*
@@ -292,14 +289,11 @@ export const busService = {
292289
subscribeFnToWrapper.delete(callback);
293290
},
294291
startedAt,
295-
get workerState() {
296-
return workerState;
297-
},
292+
workerState: null,
298293
/** The id of the last notification received by this tab. */
299-
get lastNotificationId() {
300-
return lastNotificationId;
301-
},
302-
};
294+
lastNotificationId: null,
295+
});
296+
return state;
303297
},
304298
/** Overriden to provide logs in tests. Use subscribe() in production. */
305299
_onMessage(env, id, type, payload) {},

addons/cloud_storage_azure/tests/test_cloud_storage_azure_attachment_controller.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from unittest.mock import patch
55

66
import odoo
7-
from odoo.tools.misc import file_open, limited_field_access_token
7+
from odoo.tools.misc import file_open
88
from odoo.addons.base.tests.common import HttpCaseWithUserDemo
99
from odoo.addons.cloud_storage_azure.tests.test_cloud_storage_azure import TestCloudStorageAzureCommon
1010

@@ -65,9 +65,7 @@ def post(url, **kwargs):
6565
"id": attachment.id,
6666
"mimetype": "text/x-python",
6767
"name": "__init__.py",
68-
"raw_access_token": limited_field_access_token(
69-
attachment, "raw"
70-
),
68+
"raw_access_token": attachment._get_raw_access_token(),
7169
"res_name": False,
7270
"thread": False,
7371
"voice": False,

addons/cloud_storage_google/tests/test_cloud_storage_google_attachment_controller.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import re
33

44
import odoo
5-
from odoo.tools.misc import file_open, limited_field_access_token
5+
from odoo.tools.misc import file_open
66
from odoo.addons.base.tests.common import HttpCaseWithUserDemo
77
from odoo.addons.cloud_storage_google.tests.test_cloud_storage_google import TestCloudStorageGoogleCommon
88

@@ -50,7 +50,7 @@ def test_cloud_storage_google_attachment_upload(self):
5050
"id": attachment.id,
5151
"mimetype": "text/x-python",
5252
"name": "__init__.py",
53-
"raw_access_token": limited_field_access_token(attachment, "raw"),
53+
"raw_access_token": attachment._get_raw_access_token(),
5454
"res_name": False,
5555
"thread": False,
5656
"voice": False,

addons/im_livechat/tests/test_chatbot_internals.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from odoo import Command, fields
77
from odoo.addons.im_livechat.tests import chatbot_common
88
from odoo.tests.common import JsonRpcException, new_test_user, tagged
9-
from odoo.tools.misc import limited_field_access_token, mute_logger
9+
from odoo.tools.misc import mute_logger
1010
from odoo.addons.bus.models.bus import json_dump
1111
from odoo.addons.mail.tests.common import MailCommon
1212
from odoo.addons.mail.tools.discuss import Store
@@ -232,16 +232,17 @@ def get_forward_op_bus_params():
232232
0,
233233
{
234234
"active": False,
235-
"avatar_128_access_token": limited_field_access_token(
236-
self.chatbot_script.operator_partner_id, "avatar_128"
237-
),
235+
"avatar_128_access_token": self.chatbot_script.operator_partner_id._get_avatar_128_access_token(),
238236
"country_id": False,
239237
"id": self.chatbot_script.operator_partner_id.id,
240238
"im_status": "im_partner",
239+
"im_status_access_token": self.chatbot_script.operator_partner_id._get_im_status_access_token(),
241240
"is_public": False,
242241
"name": "Testing Bot",
243242
"user_livechat_username": False,
244-
"write_date": fields.Datetime.to_string(self.chatbot_script.operator_partner_id.write_date),
243+
"write_date": fields.Datetime.to_string(
244+
self.chatbot_script.operator_partner_id.write_date
245+
),
245246
},
246247
)
247248
channel_data = Store(discuss_channel).get_result()
@@ -330,12 +331,11 @@ def get_forward_op_bus_params():
330331
"res.partner": self._filter_partners_fields(
331332
{
332333
"active": True,
333-
"avatar_128_access_token": limited_field_access_token(
334-
self.partner_employee, "avatar_128"
335-
),
334+
"avatar_128_access_token": self.partner_employee._get_avatar_128_access_token(),
336335
"country_id": self.env.ref("base.be").id,
337336
"id": self.partner_employee.id,
338337
"im_status": "offline",
338+
"im_status_access_token": self.partner_employee._get_im_status_access_token(),
339339
"is_public": False,
340340
"name": "Ernest Employee",
341341
"user_livechat_username": False,
@@ -392,9 +392,7 @@ def get_forward_op_bus_params():
392392
],
393393
"res.partner": self._filter_partners_fields(
394394
{
395-
"avatar_128_access_token": limited_field_access_token(
396-
self.partner_employee, "avatar_128"
397-
),
395+
"avatar_128_access_token": self.partner_employee._get_avatar_128_access_token(),
398396
"id": self.partner_employee.id,
399397
"name": "Ernest Employee",
400398
"user_livechat_username": False,

addons/im_livechat/tests/test_get_discuss_channel.py

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from unittest.mock import patch, PropertyMock
66

77
from odoo import fields
8-
from odoo.tools.misc import limited_field_access_token
98
from odoo.addons.im_livechat.tests.common import TestImLivechatCommon
109
from odoo.addons.mail.tests.common import MailCommon
1110
from odoo.tests import new_test_user, tagged
@@ -53,10 +52,11 @@ def test_channel_get_livechat_visitor_info(self):
5352
data["mail.guest"],
5453
[
5554
{
56-
"avatar_128_access_token": limited_field_access_token(guest, "avatar_128"),
55+
"avatar_128_access_token": guest._get_avatar_128_access_token(),
5756
"country_id": belgium.id,
5857
"id": guest.id,
5958
"im_status": "offline",
59+
"im_status_access_token": guest._get_im_status_access_token(),
6060
"name": "Visitor",
6161
"offline_since": False,
6262
"write_date": fields.Datetime.to_string(guest.write_date),
@@ -68,11 +68,10 @@ def test_channel_get_livechat_visitor_info(self):
6868
self._filter_partners_fields(
6969
{
7070
"active": False,
71-
"avatar_128_access_token": limited_field_access_token(
72-
self.partner_root, "avatar_128"
73-
),
71+
"avatar_128_access_token": self.partner_root._get_avatar_128_access_token(),
7472
"id": self.user_root.partner_id.id,
7573
"im_status": "bot",
74+
"im_status_access_token": self.partner_root._get_im_status_access_token(),
7675
"isInternalUser": True,
7776
"is_company": False,
7877
"name": "OdooBot",
@@ -82,12 +81,11 @@ def test_channel_get_livechat_visitor_info(self):
8281
},
8382
{
8483
"active": True,
85-
"avatar_128_access_token": limited_field_access_token(
86-
operator.partner_id, "avatar_128"
87-
),
84+
"avatar_128_access_token": operator.partner_id._get_avatar_128_access_token(),
8885
"country_id": False,
8986
"id": operator.partner_id.id,
9087
"im_status": "offline",
88+
"im_status_access_token": operator.partner_id._get_im_status_access_token(),
9189
"is_public": False,
9290
"user_livechat_username": "Michel Operator",
9391
"write_date": fields.Datetime.to_string(operator.write_date),
@@ -121,12 +119,11 @@ def test_channel_get_livechat_visitor_info(self):
121119
self._filter_partners_fields(
122120
{
123121
"active": False,
124-
"avatar_128_access_token": limited_field_access_token(
125-
self.partner_root, "avatar_128"
126-
),
122+
"avatar_128_access_token": self.partner_root._get_avatar_128_access_token(),
127123
"email": "[email protected]",
128124
"id": self.user_root.partner_id.id,
129125
"im_status": "bot",
126+
"im_status_access_token": self.partner_root._get_im_status_access_token(),
130127
"isInternalUser": True,
131128
"is_company": False,
132129
"name": "OdooBot",
@@ -136,12 +133,11 @@ def test_channel_get_livechat_visitor_info(self):
136133
},
137134
{
138135
"active": True,
139-
"avatar_128_access_token": limited_field_access_token(
140-
test_user.partner_id, "avatar_128"
141-
),
136+
"avatar_128_access_token": test_user.partner_id._get_avatar_128_access_token(),
142137
"country_id": belgium.id,
143138
"id": test_user.partner_id.id,
144139
"im_status": "offline",
140+
"im_status_access_token": test_user.partner_id._get_im_status_access_token(),
145141
"isAdmin": False,
146142
"isInternalUser": True,
147143
"is_public": False,
@@ -155,12 +151,11 @@ def test_channel_get_livechat_visitor_info(self):
155151
},
156152
{
157153
"active": True,
158-
"avatar_128_access_token": limited_field_access_token(
159-
operator.partner_id, "avatar_128"
160-
),
154+
"avatar_128_access_token": operator.partner_id._get_avatar_128_access_token(),
161155
"country_id": False,
162156
"id": operator.partner_id.id,
163157
"im_status": "offline",
158+
"im_status_access_token": operator.partner_id._get_im_status_access_token(),
164159
"is_public": False,
165160
"user_livechat_username": "Michel Operator",
166161
"write_date": fields.Datetime.to_string(operator.write_date),
@@ -222,12 +217,11 @@ def test_channel_get_livechat_visitor_info(self):
222217
self._filter_partners_fields(
223218
{
224219
"active": False,
225-
"avatar_128_access_token": limited_field_access_token(
226-
self.partner_root, "avatar_128"
227-
),
220+
"avatar_128_access_token": self.partner_root._get_avatar_128_access_token(),
228221
"email": "[email protected]",
229222
"id": self.user_root.partner_id.id,
230223
"im_status": "bot",
224+
"im_status_access_token": self.partner_root._get_im_status_access_token(),
231225
"isInternalUser": True,
232226
"is_company": False,
233227
"name": "OdooBot",
@@ -237,12 +231,11 @@ def test_channel_get_livechat_visitor_info(self):
237231
},
238232
{
239233
"active": True,
240-
"avatar_128_access_token": limited_field_access_token(
241-
operator.partner_id, "avatar_128"
242-
),
234+
"avatar_128_access_token": operator.partner_id._get_avatar_128_access_token(),
243235
"country_id": False,
244236
"id": operator.partner_id.id,
245237
"im_status": "offline",
238+
"im_status_access_token": operator.partner_id._get_im_status_access_token(),
246239
"isAdmin": False,
247240
"isInternalUser": True,
248241
"is_public": False,

addons/im_livechat/tests/test_message.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
from odoo import Command, fields
77
from odoo.exceptions import AccessError
8-
from odoo.tools.misc import limited_field_access_token
98
from odoo.tests.common import users, tagged
109
from odoo.addons.mail.tests.common import MailCommon
1110
from odoo.addons.mail.tools.discuss import Store
@@ -210,9 +209,9 @@ def test_message_to_store(self):
210209
],
211210
"res.partner": self._filter_partners_fields(
212211
{
213-
"avatar_128_access_token": limited_field_access_token(
214-
self.users[1].partner_id, "avatar_128"
215-
),
212+
"avatar_128_access_token": self.users[
213+
1
214+
].partner_id._get_avatar_128_access_token(),
216215
"id": self.users[1].partner_id.id,
217216
"is_company": False,
218217
"isInternalUser": True,
@@ -322,9 +321,7 @@ def _get_feedback_bus():
322321
],
323322
"res.partner": self._filter_partners_fields(
324323
{
325-
"avatar_128_access_token": limited_field_access_token(
326-
self.env.user.partner_id, "avatar_128"
327-
),
324+
"avatar_128_access_token": self.env.user.partner_id._get_avatar_128_access_token(),
328325
"id": self.env.user.partner_id.id,
329326
"isInternalUser": False,
330327
"is_company": False,

addons/im_livechat/tests/test_user_livechat_username.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from odoo import fields
22
from odoo.tests.common import tagged
3-
from odoo.tools.misc import limited_field_access_token
43
from odoo.addons.im_livechat.tests.common import TestGetOperatorCommon
54

65

@@ -52,9 +51,7 @@ def test_user_livechat_username_reactions(self):
5251
self.assertEqual(
5352
data["res.partner"][0],
5453
{
55-
"avatar_128_access_token": limited_field_access_token(
56-
john.partner_id, "avatar_128"
57-
),
54+
"avatar_128_access_token": john.partner_id._get_avatar_128_access_token(),
5855
"id": john.partner_id.id,
5956
"user_livechat_username": "ELOPERADOR",
6057
"write_date": fields.Datetime.to_string(john.partner_id.write_date),

0 commit comments

Comments
 (0)