annotate browser/sat_browser/plugin_xep_0085.py @ 1203:251eba911d4d

server (websockets): fixed websocket handling on HTTPS connections: Original request used to retrieve a page was stored on dynamic pages, but after the end of it, the channel was deleted, resulting in a isSecure() always returning False, and troubles in chain leading to the the use of the wrong session object. This patch fixes this by reworking the way original request is used, and creating a new wrapping class allowing to keep an API similar to iweb.IRequest, with data coming from both the original request and the websocket request. fix 327
author Goffi <goffi@goffi.org>
date Sun, 14 Jul 2019 14:45:51 +0200
parents 28e3eb3bb217
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
223
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
1 #!/usr/bin/python
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
3
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
4 # SAT plugin for Chat State Notifications Protocol (xep-0085)
818
f8a7a046ff9c copyright update
Goffi <goffi@goffi.org>
parents: 685
diff changeset
5 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org)
223
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
6
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
10 # (at your option) any later version.
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
11
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
16
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
19
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
20 from pyjamas.Timer import Timer
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
21
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
22
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
23 # Copy of the map from sat/src/plugins/plugin_xep_0085
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
24 TRANSITIONS = {"active": {"next_state": "inactive", "delay": 120},
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
25 "inactive": {"next_state": "gone", "delay": 480},
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
26 "gone": {"next_state": "", "delay": 0},
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
27 "composing": {"next_state": "paused", "delay": 30},
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
28 "paused": {"next_state": "inactive", "delay": 450}
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
29 }
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
30
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
31
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
32 class ChatStateMachine:
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
33 """This is an adapted version of the ChatStateMachine from sat/src/plugins/plugin_xep_0085
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
34 which manage a timer on the web browser and keep it synchronized with the timer that runs
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
35 on the backend. This is only needed to avoid calling the bridge method chatStateComposing
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
36 too often ; accuracy is not needed so we can ignore the delay of the communication between
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
37 the web browser and the backend (the timer on the web browser always starts a bit before).
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
38 /!\ Keep this file up to date if you modify the one in the sat plugins directory.
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
39 """
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
40 def __init__(self, host, target_s):
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
41
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
42 self.host = host
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
43 self.target_s = target_s
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
44 self.started = False
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
45 self.state = None
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
46 self.timer = None
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
47
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
48 def _onEvent(self, state):
582
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
49 # Pyjamas callback takes no extra argument so we need this trick
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
50
223
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
51 # Here we should check the value of the parameter "Send chat state notifications"
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
52 # but this costs two messages. It's even better to call chatStateComposing
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
53 # with a doubt, it will be checked by the back-end anyway before sending
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
54 # the actual notifications to the other client.
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
55 if state == "composing" and not self.started:
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
56 return
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
57 self.started = True
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
58 self.next_state = state
422
20c508f9b32a browser side: fixed bad use of Timer
Goffi <goffi@goffi.org>
parents: 340
diff changeset
59 self.__onEvent(None)
223
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
60
422
20c508f9b32a browser side: fixed bad use of Timer
Goffi <goffi@goffi.org>
parents: 340
diff changeset
61 def __onEvent(self, timer):
223
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
62 state = self.next_state
582
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
63
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
64 assert(state in TRANSITIONS)
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
65 transition = TRANSITIONS[state]
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
66 assert("next_state" in transition and "delay" in transition)
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
67
223
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
68 if state != self.state and state == "composing":
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
69 self.host.bridge.call('chatStateComposing', None, self.target_s)
582
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
70
223
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
71 self.state = state
582
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
72 if self.timer is not None:
223
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
73 self.timer.cancel()
624a87377412 browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
diff changeset
74
582
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
75 if transition["next_state"] and transition["delay"] > 0:
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
76 self.next_state = transition["next_state"]
c6380dd30602 plugin XEP-0085: follow the changes in sat plugin
souliane <souliane@mailoo.org>
parents: 467
diff changeset
77 self.timer = Timer(transition["delay"] * 1000, self.__onEvent) # pyjamas timer is in milliseconds