From d19cf0b43a26b985a86c5c6b2bbe364f7586cff0 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 31 Mar 2015 15:59:53 +0200 Subject: [PATCH] sms: add backend for passerelle (#6860) --- wcs/qommon/sms.py | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/wcs/qommon/sms.py b/wcs/qommon/sms.py index b347d22..3b261e1 100644 --- a/wcs/qommon/sms.py +++ b/wcs/qommon/sms.py @@ -15,12 +15,15 @@ # along with this program; if not, see . import re +import json import urllib2 import urllib +from quixote import get_publisher from qommon import errors -from qommon import get_cfg +from qommon import get_cfg, get_logger from qommon.form import StringWidget, PasswordWidget +from qommon.misc import http_post_request class MobytSMS(object): @@ -196,12 +199,51 @@ class ChoositSMS(object): def get_money_left(self): raise NotImplementedError +class PasserelleSMS(object): + """This class allows to send a SMS using Passerelle + """ + parameters = [ + (StringWidget, 'sender', N_('Sender (number or name)')), + (StringWidget, 'passerelle_url', N_('URL')), + (StringWidget, 'passerelle_apikey', N_('Key')), + ] + + TIMEOUT = 10 + + def __init__(self): + sms_cfg = get_cfg('sms', {}) + self.sender = sms_cfg.get('sender', '') + self.key = sms_cfg.get('passerelle_apikey', '') + self.url = sms_cfg.get('passerelle_url', '') + + def send(self, sender, destinations, text, quality=None): + """Send a SMS using the Choosit provider""" + sender = sender or self.sender + payload = { + 'from': sender, + 'message': text, + 'to': destinations, + } + url = self.url + url += '?%s' % urllib.urlencode({'apikey': self.key}) + body = json.dumps(payload, encoding=get_publisher().site_charset) + response, status, data, auth_header = http_post_request( + url, body, timeout=self.TIMEOUT) + get_logger().debug('sms %r sent using passerelle to %r, result: %r', + text, destinations, response) + + def get_sms_left(self, type='standard'): + raise NotImplementedError + + def get_money_left(self): + raise NotImplementedError class SMS(object): providers = { 'mobyt': (N_('Mobyt provider'), MobytSMS), 'oxyd': (N_('Oxyd provider'), OxydSMS), 'choosit': (N_('Choosit provider'), ChoositSMS), + 'passerelle': (N_('Passerelle provider'), PasserelleSMS), } def get_sms_class(cls, provider_id): -- 2.1.4