From: Michael Tremer Date: Thu, 16 Mar 2017 11:34:40 +0000 (+0000) Subject: talk: Allow hanging up channels from webapp X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=40818cf2a3a58fb0146cd75f953a9b87497b1f5c;p=ipfire.org.git talk: Allow hanging up channels from webapp Signed-off-by: Michael Tremer --- diff --git a/templates/talk/confirm-hangup.html b/templates/talk/confirm-hangup.html new file mode 100644 index 00000000..a6dfdadf --- /dev/null +++ b/templates/talk/confirm-hangup.html @@ -0,0 +1,39 @@ +{% extends "../base.html" %} + +{% block title %}{{ _("Hangup Channel") }}{% end block %} + +{% block body %} +
+ {% raw xsrf_form_html() %} + +
+
+
+

{{ _("Hangup Channel") }}

+ +

+ {{ _("You are about to hangup this channel") }} +

+ +
+ +

+ {% module TalkContact(channel.caller, name=channel.caller_name) %} +

+ +

+ +

+ +

+ {% module TalkContact(channel.callee, application=channel.application) %} +

+ +
+ + +
+
+
+
+{% end block %} diff --git a/templates/talk/modules/ongoing-calls.html b/templates/talk/modules/ongoing-calls.html index 8473dcf8..eedeacd2 100644 --- a/templates/talk/modules/ongoing-calls.html +++ b/templates/talk/modules/ongoing-calls.html @@ -31,6 +31,12 @@ {{ format_time(c.duration) }} + + + + + + {% end %} diff --git a/webapp/__init__.py b/webapp/__init__.py index b378188c..07d2f1a8 100644 --- a/webapp/__init__.py +++ b/webapp/__init__.py @@ -254,6 +254,7 @@ class Application(tornado.web.Application): (r"/", TalkIndexHandler), (r"/conferences", TalkConferencesHandler), (r"/diagnosis", TalkDiagnosisHandler), + (r"/hangup/(.*)", TalkHangupChannelHandler), (r"/phonebook/(\w+)", TalkPhonebookAccountHandler), (r"/phonebook", TalkPhonebookHandler), (r"/profile", TalkProfileHandler), diff --git a/webapp/backend/talk.py b/webapp/backend/talk.py index da2f0028..faf8d67b 100644 --- a/webapp/backend/talk.py +++ b/webapp/backend/talk.py @@ -159,6 +159,13 @@ class Talk(Object): return sorted(channels) + def get_channel(self, channel_id, account=None): + channels = self.get_channels(account=account) + + for channel in channels: + if channel.id == channel_id: + return channel + def get_ongoing_calls(self, account=None, sip_id=None): if account and sip_id is None: sip_id = account.sip_id diff --git a/webapp/handlers_talk.py b/webapp/handlers_talk.py index 89486bdf..39fccfbe 100644 --- a/webapp/handlers_talk.py +++ b/webapp/handlers_talk.py @@ -42,6 +42,32 @@ class TalkDiagnosisHandler(BaseHandler): return self.render("talk/diagnosis.html") +class TalkHangupChannelHandler(BaseHandler): + def _get_channel(self, channel_id): + account = None if self.current_user.is_admin() else self.current_user + + channel = self.talk.get_channel(channel_id, account=account) + if not channel: + raise tornado.web.HTTPError(404) + + return channel + + @tornado.web.authenticated + def get(self, channel_id): + channel = self._get_channel(channel_id) + + self.render("talk/confirm-hangup.html", channel=channel) + + @tornado.web.authenticated + def post(self, channel_id): + channel = self._get_channel(channel_id) + + # Hangup + channel.hangup() + + self.redirect("/") + + class TalkConferencesHandler(BaseHandler): @tornado.web.authenticated def get(self):