5 from wx.lib.pubsub import setupkwargs
6 from wx.lib.pubsub import pub
10 from Crypto.Cipher import AES
11 from binascii import b2a_hex, a2b_hex
14 import simplejson as json
15 #from gi.repository import Notify
16 import wx.lib.agw.toasterbox as TB
21 if locale.getdefaultlocale()[0] == 'zh_CN':
22 gettext.install('messages', './locale', unicode=False)
23 gettext.translation('messages', './locale', languages=['cn']).install(True)
25 def __init__(self, key):
27 self.mode = AES.MODE_CBC
28 def decrypt(self, text):
29 cryptor = AES.new(self.key, self.mode, self.key)
30 plain_text = cryptor.decrypt(a2b_hex(text))
31 return plain_text.rstrip('\0')
32 def encrypt(self, text):
33 cryptor = AES.new(self.key, self.mode, self.key)
36 add = length - (count % length)
37 text = text + ('\0' * add)
38 self.ciphertext = cryptor.encrypt(text)
39 return b2a_hex(self.ciphertext)
41 class LoginFrame(wx.Frame):
42 def __init__(self, parent, id, title, size):
43 wx.Frame.__init__(self, parent, id, title)
46 self.passWordLabel = wx.StaticText(self, label = _("UserName"), pos = (30, 40), size = (120, 25))
47 self.userNameLabel = wx.StaticText(self, label = _("Password"), pos = (30, 90), size = (120, 25))
48 self.userName = wx.TextCtrl(self, pos = (85, 37), size = (150, 25),style=wx.TE_PROCESS_ENTER)
49 self.passWord= wx.TextCtrl(self, pos = (85, 87), size = (150, 25),style=wx.TE_PASSWORD|wx.TE_PROCESS_ENTER)
50 self.userName.Bind(wx.EVT_TEXT_ENTER,self.login_thread)
51 self.passWord.Bind(wx.EVT_TEXT_ENTER,self.login_thread)
52 self.cb = wx.CheckBox(self, pos=(30,120) ,label="I am new user", size=(120,25))
53 self.loginButton = wx.Button(self, label = _('Login'), pos = (80, 145), size = (130, 30))
54 self.loginButton.Bind(wx.EVT_BUTTON,self.login_thread)
55 pub.subscribe(self.__Friend_list, 'list.show')
57 def __Friend_list(self, data):
58 #print 'Object', message.data, 'is added'
62 frame = FriendList.MyFrame(None, id=-1, title=_("Friend List"),user=data,un=self.userName.GetValue())
64 def login_thread(self,event):
65 thread.start_new_thread(self.login, ())
66 self.loginButton.Disable()
68 if not self.userName.GetValue():
69 wx.CallAfter(wx.MessageBox,_('Please enter the username'), _('Error'),
70 wx.OK | wx.ICON_ERROR)
71 wx.CallAfter(self.loginButton.Enable)
72 elif not self.passWord.GetValue():
73 wx.CallAfter(wx.MessageBox,_('Please enter the password'), _('Error'),
74 wx.OK | wx.ICON_ERROR)
75 wx.CallAfter(self.loginButton.Enable)
77 if self.cb.IsChecked()==False:
79 passwd = urllib2.urlopen("http://chat-tyl.coding.io/put_db.php?content=PASS&db=USER&where=NAME&where_t=" + self.userName.GetValue()).read()
80 except urllib2.HTTPError,e:
81 wx.CallAfter(wx.MessageBox,_('Unable to fetch data'),_('Error'), wx.OK | wx.ICON_ERROR)
82 wx.CallAfter(self.loginButton.Enable)
83 passwd0 = pc.decrypt(passwd)
84 if self.passWord.GetValue()==passwd0:
85 #urllib2.urlopen('http://chat-tyl.coding.io/user_log?info=User___'+self.userName.GetValue()+'___Login')
87 data = urllib2.urlopen("http://chat-tyl.coding.io/put_db.php?content=LIST&db=FRIEND&where=NAME&where_t=" + self.userName.GetValue()).read()
88 except urllib2.HTTPError,e:
89 wx.CallAfter(wx.MessageBox,_('Unable to fetch data'),_('Error'), wx.OK | wx.ICON_ERROR)
90 wx.CallAfter(self.loginButton.Enable)
92 wx.CallAfter(pub.sendMessage,'list.show', data=json.loads(data))
94 wx.CallAfter(wx.MessageBox,_('Your Password is wrong'), _('Try it again'),
95 wx.OK | wx.ICON_ERROR)
96 wx.CallAfter(self.loginButton.Enable)
99 cont = urllib2.urlopen("http://chat-tyl.coding.io/put_db.php?content=PASS&db=USER&where=NAME&where_t=" + self.userName.GetValue()).read()
100 except urllib2.HTTPError,e:
101 wx.CallAfter(wx.MessageBox,_('Check Your NetWork,and try it again'),_('Error'), wx.OK | wx.ICON_ERROR)
102 wx.CallAfter(self.loginButton.Enable)
105 passwd = urllib2.urlopen("http://chat-tyl.coding.io/in_db.php?db=USER&first=NAME&seconed=PASS&name=" + self.userName.GetValue() + "&pass=" + pc.encrypt(self.passWord.GetValue())).read()
106 except urllib2.HTTPError,e:
107 wx.CallAfter(wx.MessageBox,_("We can't register,check your network and try it again"),_('Error'), wx.OK | wx.ICON_ERROR)
108 wx.CallAfter(self.loginButton.Enable)
110 list = urllib2.urlopen("http://chat-tyl.coding.io/in_db.php?db=FRIEND&first=NAME&seconed=LIST&name=" + self.userName.GetValue() + "&pass={'item': ['friend'],'friend' : ['tyl','Test']}").read()
111 except urllib2.HTTPError,e:
112 wx.CallAfter(wx.MessageBox,_("We can't register,check your network and try it again"),_('Error'), wx.OK | wx.ICON_ERROR)
113 wx.CallAfter(self.loginButton.Enable)
114 wx.CallAfter(wx.MessageBox,_("Register Successful"),_('Error'), wx.OK | wx.ICON_ERROR)
115 wx.CallAfter(self.loginButton.Enable)
117 wx.CallAfter(wx.MessageBox,_('You already registered'),_('Error'), wx.OK | wx.ICON_INFORMATION)
118 wx.CallAfter(self.loginButton.Enable)
119 if __name__ == '__main__':
120 pc = prpcrypt('keyskeyskeyskeys')
122 LoginFrame(None, -1, title = _("Login"), size = (280, 210))