From e76e7d9fbfa287ace9b7542d64ef1659f350278e 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..d18956a 100644 --- a/wcs/qommon/sms.py +++ b/wcs/qommon/sms.py @@ -10,22 +10,25 @@ # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # 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): """This class allows to send a SMS using Mobyt provider""" parameters = [ (StringWidget, 'sender', N_('Sender (number or name)')), (StringWidget, 'mobyt_username', N_('Username')), (PasswordWidget, 'mobyt_password', N_('Password')), @@ -191,22 +194,61 @@ class ChoositSMS(object): r.close() def get_sms_left(self, type='standard'): raise NotImplementedError 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.ulrencode({'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): if not provider_id: sms_cfg = get_cfg('sms', {}) provider_id = sms_cfg.get('mode', '') if provider_id in cls.providers: return cls.providers.get(provider_id)[1]() -- 1.9.1