#!/usr/bin/python2.4
# -*- coding: iso-8859-2 -*-
# Script: sms.orangembox.py - wersja GTK
# Copyright by skrobul@batnet.pl 2005
# License: BSD license


import pygtk
pygtk.require('2.0')
import gtk, cookielib, string, urllib, urllib2

debug = 0   # for debug change to '1'
login = ''  # set login
password = '' # set password

class Pomarancza:
	
	def __init__(self):
		#glowne okno
		self.okno = gtk.Window(gtk.WINDOW_TOPLEVEL);
		self.okno.connect("destroy", self.destroy)
		self.okno.set_title("Bramka SMS do sieci Orange")


		# przycisk wysylania
		self.bWyslij = gtk.Button("Wyślij")
		# ramka wpisywania tekstu i numeru
		self.eTresc = gtk.Entry(max=120)
		self.eNumer = gtk.Entry(max=9)
		self.ePodpis = gtk.Entry(max=15)
		# opis
		self.lTekst = gtk.Label("Treść")
		self.lNumer = gtk.Label("Numer")
		self.lPodpis = gtk.Label("Podpis")


		# obsluga sygnałów
		self.eTresc.connect("activate", self.wyslij_sms, self.eTresc)
		self.bWyslij.connect("clicked", self.wyslij_sms, self.eTresc)
		
		
		# kontener na numer i tresc
		self.pudlo1 = gtk.HBox(False,7)
		# kontener na kontener i przycisk wyslij ;-)
		self.pudlo2 = gtk.HBox(False,7)
		
		# wrzucamy do kontenera
		self.pudlo1.pack_start(self.lTekst,False)
		self.pudlo1.pack_start(self.eTresc,True)

		self.pudlo2.pack_start(self.lPodpis, False)
		self.pudlo2.pack_start(self.ePodpis, False)
		self.pudlo2.pack_start(self.lNumer,False)
		self.pudlo2.pack_start(self.eNumer,False)
		self.pudlo2.pack_start(self.bWyslij,False)
		
		self.duzePudlo = gtk.VBox(False,2)
		self.duzePudlo.pack_start(self.pudlo1)
		self.duzePudlo.pack_start(self.pudlo2)
		#dodajemy kontener do okna
		self.okno.add(self.duzePudlo)


		#pokazujemy ten caly burdel
		self.bWyslij.show()
		self.eTresc.show()
		self.eNumer.show()
		self.ePodpis.show()
		self.lTekst.show()
		self.lNumer.show()
		self.lPodpis.show()
		self.pudlo1.show()
		self.pudlo2.show()
		self.duzePudlo.show()
		self.okno.show()
	
	def wyslij_sms(self,widget, data):	
		tresc = self.eTresc.get_text()
		numer = self.eNumer.get_text()
		podpis = self.ePodpis.get_text()

		if numer.isdigit() and len(numer) == 9:
			if debug:
				print "Wysyłam smsa(%s): %s " % (numer, tresc)
			nowy = SMS();
			nowy.sender = podpis
			nowy.number = numer
			nowy.message = tresc
			nowy.sendsms()
	
	def main(self):
		gtk.main()
		return 0

	def destroy(self,widget):
		gtk.main_quit()

class SMS:
	
	def sendsms(self):
	# funkcja wysylajaca smsy by Rodion rodion7(at)o2.pl
	        if len(self.sender) > 0 and self.number.isdigit() and len(self.number) == 9 and len(self.message) > 0:
	            baseURLSSL='https://www.orange.pl'
	            baseURL='http://www.orange.pl'
	            length = 634 - len(self.message) - len(self.sender)
	            cj = cookielib.CookieJar()
	            opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
	            
	# orange index
	            request = urllib2.Request(baseURLSSL)
	            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 map
	            request = urllib2.Request(baseURLSSL + '/portal/map/map/')
	            request.add_header('User-Agent', 'Opera/8.00 (Windows NT 5.0; U; en)')
	            try:
	                result = opener.open(request)
	                if debug:
	                    print 'Connecting with www.orange.pl/portal/map/map'
	            except IOError:
	                print 'Connection with https://www.orange.pl/portal/map/map failed.'
	
	# orange login
	            parmdicta = {'_dyncharset': 'UTF-8',
	                         '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.loginErrorURL': '/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/login.jsp'}
	
	            request = urllib2.Request(baseURLSSL + '/portal/map/map/home?_DARGS=/gear/static/login.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': self.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 '+self.sender+' : '+self.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)
	                if debug:
	                    print 'SMS sended.'
	            except IOError:
	                print 'SMS not send.'
	
	# Logout
	
	            parmdictc = {'_dyncharset' : 'UTF-8',
	                         '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.'


if __name__ == "__main__":
	smsWin = Pomarancza()
	smsWin.main()
