10 |
10 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11 |
11 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12 |
12 |
# GNU General Public License for more details.
|
13 |
13 |
#
|
14 |
14 |
# You should have received a copy of the GNU General Public License
|
15 |
15 |
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
16 |
16 |
|
17 |
17 |
import re
|
|
18 |
import json
|
18 |
19 |
import urllib2
|
19 |
20 |
import urllib
|
20 |
21 |
|
|
22 |
from quixote import get_publisher
|
21 |
23 |
from qommon import errors
|
22 |
|
from qommon import get_cfg
|
|
24 |
from qommon import get_cfg, get_logger
|
23 |
25 |
from qommon.form import StringWidget, PasswordWidget
|
|
26 |
from qommon.misc import http_post_request
|
24 |
27 |
|
25 |
28 |
|
26 |
29 |
class MobytSMS(object):
|
27 |
30 |
"""This class allows to send a SMS using Mobyt provider"""
|
28 |
31 |
parameters = [
|
29 |
32 |
(StringWidget, 'sender', N_('Sender (number or name)')),
|
30 |
33 |
(StringWidget, 'mobyt_username', N_('Username')),
|
31 |
34 |
(PasswordWidget, 'mobyt_password', N_('Password')),
|
... | ... | |
191 |
194 |
r.close()
|
192 |
195 |
|
193 |
196 |
def get_sms_left(self, type='standard'):
|
194 |
197 |
raise NotImplementedError
|
195 |
198 |
|
196 |
199 |
def get_money_left(self):
|
197 |
200 |
raise NotImplementedError
|
198 |
201 |
|
|
202 |
class PasserelleSMS(object):
|
|
203 |
"""This class allows to send a SMS using Passerelle
|
|
204 |
"""
|
|
205 |
parameters = [
|
|
206 |
(StringWidget, 'sender', N_('Sender (number or name)')),
|
|
207 |
(StringWidget, 'passerelle_url', N_('URL')),
|
|
208 |
(StringWidget, 'passerelle_apikey', N_('Key')),
|
|
209 |
]
|
|
210 |
|
|
211 |
TIMEOUT = 10
|
|
212 |
|
|
213 |
def __init__(self):
|
|
214 |
sms_cfg = get_cfg('sms', {})
|
|
215 |
self.sender = sms_cfg.get('sender', '')
|
|
216 |
self.key = sms_cfg.get('passerelle_apikey', '')
|
|
217 |
self.url = sms_cfg.get('passerelle_url', '')
|
|
218 |
|
|
219 |
def send(self, sender, destinations, text, quality=None):
|
|
220 |
"""Send a SMS using the Choosit provider"""
|
|
221 |
sender = sender or self.sender
|
|
222 |
payload = {
|
|
223 |
'from': sender,
|
|
224 |
'message': text,
|
|
225 |
'to': destinations,
|
|
226 |
}
|
|
227 |
url = self.url
|
|
228 |
url += '?%s' % urllib.ulrencode({'apikey': self.key})
|
|
229 |
body = json.dumps(payload, encoding=get_publisher().site_charset)
|
|
230 |
response, status, data, auth_header = http_post_request(
|
|
231 |
url, body, timeout=self.TIMEOUT)
|
|
232 |
get_logger().debug('sms %r sent using passerelle to %r, result: %r',
|
|
233 |
text, destinations, response)
|
|
234 |
|
|
235 |
def get_sms_left(self, type='standard'):
|
|
236 |
raise NotImplementedError
|
|
237 |
|
|
238 |
def get_money_left(self):
|
|
239 |
raise NotImplementedError
|
199 |
240 |
|
200 |
241 |
class SMS(object):
|
201 |
242 |
providers = {
|
202 |
243 |
'mobyt': (N_('Mobyt provider'), MobytSMS),
|
203 |
244 |
'oxyd': (N_('Oxyd provider'), OxydSMS),
|
204 |
245 |
'choosit': (N_('Choosit provider'), ChoositSMS),
|
|
246 |
'passerelle': (N_('Passerelle provider'), PasserelleSMS),
|
205 |
247 |
}
|
206 |
248 |
|
207 |
249 |
def get_sms_class(cls, provider_id):
|
208 |
250 |
if not provider_id:
|
209 |
251 |
sms_cfg = get_cfg('sms', {})
|
210 |
252 |
provider_id = sms_cfg.get('mode', '')
|
211 |
253 |
if provider_id in cls.providers:
|
212 |
254 |
return cls.providers.get(provider_id)[1]()
|
213 |
|
-
|