#!/usr/local/bin/python2.4
# -*- coding: iso-8859-2 -*-
#
# Script: sms.orangembox.py
# Version: 0.3
# Date: 20/02/2006
# Works ONLY with python 2.4.1 or higher
# Copyright (c) 2006, Rodion infobot.pl
# Thanks to oort
# License: http://rodion.infobot.pl/bsd-license.txt
# 

import cookielib, string, urllib, urllib2

debug = 0   # for debug change to '1'
freesms = 0     # for smses left change to '1'
phonebook = 'phonebook.txt'
login = ''  # set login
password = '' # set password


def _phonebook(name):
    try:
        plik = open (phonebook, 'r')
    except IOError:
        print 'Error. File "%s" not found.' % phonebook
        sys.exit(1)
    else:
        for line in plik.readlines():
            if name in line:
                name = line.split()[-1]
                return name
                try:
                    plik.close()
                except IOError:
                    print 'Error. File "%s" not found.' % phonebook
                    sys.exit(1)
                    
def sendsms(sender, recipient, message):
        if recipient.isalpha():
            number = _phonebook(recipient)
            if number is None:
                print 'Error. Recipient "%s" not found.' % recipient
                sys.exit(1)
        if recipient.isdigit():
            number = recipient
            
    	if len(sender) > 0 and number.isdigit() and len(number) == 9 and len(message) > 0:
            baseURLSSL='https://www.orange.pl'
            baseURL='http://www.orange.pl'
            length = 634 - len(message) - len(sender)
            cj = cookielib.CookieJar()
            opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
            
# orange signin
            request = urllib2.Request(baseURLSSL + '/portal/map/map/signin')
            request.add_header('User-Agent', 'Opera/8.00 (Windows NT 5.0; U; en)')
            try:
                result = opener.open(request)
                if debug:
                    print 'Connecting with',baseURLSSL
            except IOError:
                print 'Connection with %s failed.' % baseURLSSL

# orange login
            parmdicta = {'_dyncharset': 'UTF-8',
                          '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.loginErrorURL': 'http://www.orange.pl/portal/map/map/signin',
                          '_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.loginErrorURL': ' ',
                          '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.loginSuccessURL': 'http://www.orange.pl/portal/map/map/pim',
                          '_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.loginSuccessURL': ' ',
                          '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.value.login': login,
                          '_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.value.login': ' ',
                          '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.value.password': password,
                          '_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.value.password': ' ',
                          '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.login.x': '0',
                          '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.login.y': '0',
                          '_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.login': ' ',
                          '_DARGS': '/gear/static/signIn.jsp'}

            request = urllib2.Request(baseURLSSL + '/portal/map/map/signin?_DARGS=/gear/static/signIn.jsp')
            postdata = urllib.unquote(urllib.urlencode(parmdicta))
            request.add_data(postdata)
            request.add_header('User-Agent', 'Opera/8.00 (Windows NT 5.0; U; en)')
            try:
                result = opener.open(request)
                if debug:
                    print 'Logged'
            except IOError:
                print 'Not logged'


# orange SMS form
            request = urllib2.Request(baseURL + '/portal/map/map/message_box?mbox_view=newsms&mbox_edit=new')
            request.add_header('User-Agent', 'Opera/8.00 (Windows NT 5.0; U; en)')
            try:
                result = opener.open(request)
                if debug:
                    print 'Opening SMS form'
            except IOError:
                print 'Open SMS form failed.'

# Send SMS
            parmdictb = {'_dyncharset': 'UTF-8',
                         '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.type': 'sms',
                         '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.type' : ' ',
                         'enabled': 'true',
                         '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.errorURL': '/portal/map/map/message_box?mbox_view=newsms',
                         '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.errorURL': ' ',
                         '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.successURL': '/portal/map/map/message_box?mbox_view=messageslist',
                         '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.successURL': ' ',
                         'smscounter' : '1',
                         'counter': length,
                         '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.to': number,
                         '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.to': ' ',
                         '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.body': ' ',
                         '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.body': 'Od '+sender+' : '+message,
                         '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.create.x': '0',
                         '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.create.y': '0',
                         '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.create': ' ',
                         '_DARGS': '/gear/mapmessagebox/smsform.jsp'}

            request = urllib2.Request(baseURL + '/portal/map/map/message_box?_DARGS=/gear/mapmessagebox/smsform.jsp')
            postdata = urllib.unquote(urllib.urlencode(parmdictb))
            request.add_data(postdata)
            request.add_header('User-Agent', 'Opera/8.00 (Windows NT 5.0; U; en)')
            try:
                result = opener.open(request).read()
                if freesms:
                    import re
                    rw = re.compile(r'darmowe:.*>(\d+)', re.S)
                    for sms in rw.findall(result):
                        print sms
                if debug:
                    print 'SMS sended.'
            except IOError:
                print 'SMS not send.'

# Logout

            parmdictc = {'_dyncharset' : 'UTF-8',
                         '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logoutSuccessURL' : '/portal/map/map',
                         '_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logoutSuccessURL' : ' ',
                         '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logoutErrorURL' : '/portal/map/map',
                         '_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logoutErrorURL' : ' ',
                         'enabled' : 'true',
                         '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logout.x' : '0',
                         '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logout.y' : '0',
                         '_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logout' : ' ',
                         '_DARGS': '/portal/layoutTemplates/html/user_status.jsp'}
                                                 
            request = urllib2.Request(baseURL + '/portal/map/map?_DARGS=/portal/layoutTemplates/html/user_status.jsp')
            postdata = urllib.unquote(urllib.urlencode(parmdictc))
            request.add_data(postdata)
            request.add_header('User-Agent', 'Opera/8.00 (Windows NT 5.0; U; en)')
            try:
                result = opener.open(request)
                if debug:
                    print 'Logout.'
            except IOError:
                print 'Logout error.'

# Main
if __name__ == '__main__':
    import sys
    if len(sys.argv) < 4:
        print 'Sposb uycia:', sys.argv[0], '<nadawca> <nazwa lub numer odbiorcy> <wiadomo>'
	print 'Przykad 1:', sys.argv[0], 'inspektor 501234567 bardzo by moe ale aba pozostaje ab'
	print 'Przykad 2:', sys.argv[0], 'sprzedawca pralinka najprawdopodobniej usycha z tskonty za fiordami'
	sys.exit(1)
    sender, recipient, message = sys.argv[1], sys.argv[2], ' '.join(sys.argv[3:])
    sendsms(sender, recipient, message)
