Advertisement
Guest User

Untitled

a guest
Sep 9th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.32 KB | None | 0 0
  1. import datetime
  2. from tkinter import *
  3. from tkinter import messagebox
  4. import smtplib
  5. import re
  6.  
  7. import mysql.connector
  8.  
  9. from email.mime.multipart import MIMEMultipart
  10. from email.mime.text import MIMEText
  11. from twilio.rest import TwilioRestClient
  12. import random
  13.  
  14. ### Variables - Change them to fit your needs:
  15. use_two_step_authentication = 'true' # Describes it self. True / False
  16. accountSid = "" # Twilio Account SID
  17. auth_token = "" # Twilio Authentication Token
  18. twilio_number= "" # Twilio Assigned Number
  19. client = TwilioRestClient(accountSid, auth_token)
  20. __author__ = 'hiperbolt' # Gotta get some o' that credit xd
  21. cnx = mysql.connector.connect() # MySQL Connector Information
  22. cursor = cnx.cursor()
  23. server = smtplib.SMTP('smtp.gmail.com', 587) # Mail server, currently set to Gmail
  24. server.starttls()
  25. server.login('', '') # Mail server credentials
  26. EMAIL_REGEX = re.compile(r"[^@]+@[^@]+.[^@]+") # In case you are curious, REGEX to make sure mail is valid, feel free to make a more comprehensive one
  27. mymail = "" # Mail adress in server.login
  28. ###
  29.  
  30. def combine_funcs(*funcs):
  31. def combined_func(*args, **kwargs):
  32. for f in funcs:
  33. f(*args, **kwargs)
  34.  
  35. return combined_func
  36.  
  37. def to_integer(dt_time):
  38. return 10000*dt_time.year + 100*dt_time.month + dt_time.day
  39.  
  40. class login():
  41. def __init__(self):
  42. self.frame1 = Frame(root)
  43. self.frame2 = Frame(root)
  44. self.entry1 = Entry(self.frame1)
  45. self.entry2 = Entry(self.frame2)
  46. self.label1 = Label(self.frame1, text='Username:')
  47. self.label2 = Label(self.frame2, text='Password:')
  48. self.button1 = Button(self.frame2, text='Login', command=lambda: self.loginconfirm())
  49. self.button2 = Button(self.frame2, text='Forgot password?', command=lambda: self.loginhelp())
  50. self.button3 = Button(self.frame2, text='Go back', command=lambda: combine_funcs(self.frame1.pack_forget(), self.frame2.pack_forget(), initialscreen()))
  51. self.frame1.pack()
  52. self.frame2.pack()
  53. self.label1.pack()
  54. self.label2.pack()
  55. self.entry1.pack()
  56. self.entry2.pack()
  57. self.button1.pack()
  58. self.button2.pack()
  59. self.button3.pack()
  60.  
  61. def loginconfirm(self):
  62. global inputusername
  63. inputusername = self.entry1.get()
  64. inputpassword = self.entry2.get()
  65. query = ("SELECT * FROM credentials "
  66. "WHERE username= %s AND password= %s")
  67.  
  68. cursor.execute(query, (inputusername, inputpassword))
  69.  
  70. if len(cursor.fetchall()) == 0:
  71. messagebox.showerror("Sign-In Error", "Wrong username/password combination!")
  72. self.frame1.pack_forget()
  73. self.frame2.pack_forget()
  74. login()
  75. else:
  76. query = ("SELECT twostepauth FROM credentials WHERE username= %s")
  77. cursor.execute(query, (inputusername,))
  78. for (twostepauth) in cursor:
  79. if '0' in twostepauth:
  80. login.loginsection(self)
  81. if '1' in twostepauth:
  82. randomnumber = random.randint(0, 99999)
  83. def checkrandomnumber():
  84. inputrandomnumber = self.entry1.get()
  85. if int(inputrandomnumber) == int(randomnumber):
  86. login.loginsection(self)
  87. else:
  88. messagebox.showerror("Error", "Two-Step Authentication has failed!")
  89. self.frame1.pack_forget()
  90. self.frame2.pack_forget()
  91. login()
  92. query = "SELECT phonenumber FROM credentials WHERE username= %s"
  93. cursor.execute(query, (inputusername,))
  94. for (phonenumber) in cursor:
  95. receiver = phonenumber
  96.  
  97. msg = "Here is your loginsystem acess code: %s" % str(randomnumber)
  98. message = client.messages.create(to=receiver, from_=twilio_number, body=msg)
  99. self.frame1.pack_forget()
  100. self.frame2.pack_forget()
  101. self.frame1 = Frame(root)
  102. self.frame2 = Frame(root)
  103. self.label1 = Label(self.frame1, text='Authentication Code:')
  104. self.entry1 = Entry(self.frame2)
  105. self.button1 = Button(self.frame2, text='Submit', command=lambda: checkrandomnumber())
  106. self.frame1.pack()
  107. self.frame2.pack()
  108. self.label1.pack()
  109. self.entry1.pack()
  110. self.button1.pack()
  111. else:
  112. login.loginsection(self)
  113. def loginhelp(self):
  114. self.frame1.pack_forget()
  115. self.frame2.pack_forget()
  116. self.frame1 = Frame(root)
  117. self.frame2 = Frame(root)
  118. self.label1 = Label(self.frame1, text='Enter username:')
  119. self.entry1 = Entry(self.frame1)
  120. self.button1 = Button(self.frame2, text='Recover password', command=lambda: self.loginhelpconfirm())
  121. self.button2 = Button(self.frame2, text='Go back', command=lambda: combine_funcs(self.frame1.pack_forget(), self.frame2.pack_forget(), login()))
  122. self.frame1.pack()
  123. self.frame2.pack()
  124. self.label1.pack()
  125. self.entry1.pack()
  126. self.button1.pack()
  127. self.button2.pack()
  128.  
  129. def loginhelpconfirm(self):
  130. self.recoverusername = self.entry1.get()
  131. query = ("SELECT Date, username FROM passwordrecover WHERE username= %s")
  132. cursor.execute(query, (self.recoverusername, ))
  133. if len(cursor.fetchall()) != 0:
  134. cursor.execute(query, (self.recoverusername,))
  135. for (Date, username) in cursor:
  136. print(datetime.date.today())
  137. print(Date)
  138. diff = to_integer(datetime.date.today()) - to_integer(Date)
  139. print(diff)
  140. if diff <= 1:
  141. messagebox.showerror("Error", "Password was recovered already in the last 24 hours!")
  142. self.frame1.pack_forget()
  143. self.frame2.pack_forget()
  144. self.loginhelp()
  145. return
  146.  
  147. query = ("SELECT email, password FROM credentials WHERE username= %s")
  148.  
  149. cursor.execute(query, (self.recoverusername, ))
  150. if len(cursor.fetchall()) == 0:
  151. messagebox.showerror("Error", "Wrong username!")
  152. self.frame1.pack_forget()
  153. self.frame2.pack_forget()
  154. self.loginhelp()
  155. else:
  156. cursor.execute(query, (self.recoverusername,))
  157. for (email, password) in cursor:
  158. me = mymail
  159. you = email
  160. msg = MIMEMultipart('alternative')
  161. msg['Subject'] = "Link"
  162. msg['From'] = me
  163. msg['To'] = you
  164. text = "Hello %s!nHow are you?nSomeone requested your password!nHere it is: %s!n nHave a good one!" % (
  165. email, password)
  166. html = """
  167. <html>
  168. <head></head>
  169. <body>
  170. <p>Hello %s!<br>
  171. How are you?<br>
  172. Someone requested your password!<br>
  173. Here it is: %s<br>
  174.  
  175. Have a good one!<br>
  176. </p>
  177. </body>
  178. </html>
  179. """ % (email, password)
  180.  
  181. part1 = MIMEText(text, 'plain')
  182. part2 = MIMEText(html, 'html')
  183. msg.attach(part1)
  184. msg.attach(part2)
  185. try:
  186. server.sendmail(me, you, msg.as_string())
  187. server.quit()
  188. messagebox.showinfo("Sucess", "An email was sent with your password")
  189. query = ("INSERT INTO passwordrecover (Date, username) VALUES (%s, %s)")
  190. cursor.execute(query, (datetime.date.today(), self.recoverusername,))
  191. cnx.commit()
  192. except smtplib.SMTPException:
  193. messagebox.showerror("Error!", "An error occurred sending this email, that's all we know.")
  194. self.frame1.pack_forget()
  195. self.frame2.pack_forget()
  196. self.loginhelp()
  197.  
  198. def loginsection(self):
  199. self.frame1.pack_forget()
  200. self.frame2.pack_forget()
  201. self.frame1 = Frame(root)
  202. self.frame2 = Frame(root)
  203. self.label1 = Label(self.frame1, text='Hello ' + inputusername + '!')
  204. self.button1 = Button(self.frame2, text='Change password', command=lambda: login.changepassword(self))
  205. self.button2 = Button(self.frame2, text='Logout', command=lambda: login.logout(self))
  206. self.button3 = Button(self.frame2, text='Delete', command=lambda: login.delete(self))
  207. self.button4 = Button(self.frame2, text='Two-Step Authentication', command=lambda: login.twostepauth(self))
  208. self.frame1.pack()
  209. self.frame2.pack()
  210. self.label1.pack()
  211. self.button1.pack()
  212. self.button2.pack()
  213. self.button3.pack()
  214. self.button4.pack()
  215.  
  216. def changepassword(self):
  217. self.frame1.pack_forget()
  218. self.frame2.pack_forget()
  219. self.frame1 = Frame(root)
  220. self.frame2 = Frame(root)
  221. self.entry1 = Entry(self.frame1)
  222. self.entry2 = Entry(self.frame2)
  223. self.entry3 = Entry(self.frame2)
  224. self.label1 = Label(self.frame1, text='Old Password:')
  225. self.label2 = Label(self.frame2, text='New Password:')
  226. self.label3 = Label(self.frame2, text='Re-Enter New Password:')
  227. self.button1 = Button(self.frame2, text='Change password', command=lambda: self.changepasswordconfirm())
  228. self.button2 = Button(self.frame2, text='Go back',
  229. command=lambda: combine_funcs(self.frame1.pack_forget(), self.frame2.pack_forget(),
  230. login.loginsection(self)))
  231. self.frame1.pack()
  232. self.frame2.pack()
  233. self.label1.pack()
  234. self.label2.pack()
  235. self.entry1.pack()
  236. self.entry2.pack()
  237. self.label3.pack()
  238. self.entry3.pack()
  239. self.button1.pack()
  240. self.button2.pack()
  241.  
  242. def changepasswordconfirm(self):
  243. query = ("SELECT * FROM credentials WHERE username= %s AND password= %s;")
  244.  
  245. self.oldpassword = self.entry1.get()
  246. self.newpassword = self.entry2.get()
  247. self.newpassword2 = self.entry3.get()
  248.  
  249. cursor.execute(query, (inputusername, self.oldpassword))
  250. if len(cursor.fetchall()) == 0:
  251. messagebox.showerror("Wrong password!", "The password entered is incorrect!")
  252. login.changepassword(self)
  253. else:
  254. if self.newpassword == self.newpassword2:
  255. update_password = ("UPDATE credentials SET password = %s WHERE username = %s")
  256. cursor.execute(update_password, (self.newpassword, inputusername))
  257. cnx.commit()
  258. messagebox.showinfo("Sucess!", "Password was altered sucessfully!")
  259. login.loginsection(self)
  260. else:
  261. messagebox.showerror("Password don't match!", "The password do not match!")
  262. login.changepassword(self)
  263.  
  264. def logout(self):
  265. cursor.close()
  266. cnx.close()
  267. root.quit()
  268.  
  269. def delete(self):
  270. self.frame1.pack_forget()
  271. self.frame2.pack_forget()
  272. self.frame1 = Frame(root)
  273. self.frame2 = Frame(root)
  274. self.label1 = Label(self.frame1, text='Enter your password:')
  275. self.entry1 = Entry(self.frame2)
  276. self.button1 = Button(self.frame2, text='Delete!', command=lambda: login.deleteconfirm(self))
  277. self.button2 = Button(self.frame2, text='Go back',
  278. command=lambda: combine_funcs(self.frame1.pack_forget(), self.frame2.pack_forget(),
  279. login.loginsection(self)))
  280. self.frame1.pack()
  281. self.frame2.pack()
  282. self.label1.pack()
  283. self.entry1.pack()
  284. self.button1.pack()
  285. self.button2.pack()
  286.  
  287. def deleteconfirm(self):
  288. query = ("SELECT * FROM credentials WHERE username= %s AND password= %s;")
  289.  
  290. password = self.entry1.get()
  291. cursor.execute(query, (inputusername, password))
  292. if len(cursor.fetchall()) == 0:
  293. messagebox.showerror("Error!", "Wrong password!")
  294. login.delete(self)
  295. else:
  296. delete_account = ("DELETE FROM credentials WHERE username= %s")
  297. cursor.execute(delete_account, (inputusername,))
  298. messagebox.showinfo("Sucess!", 'Your account has been deleted!')
  299. cnx.commit()
  300. cursor.close()
  301. cnx.close()
  302. root.quit()
  303.  
  304. def twostepauth(self):
  305. query = ("SELECT twostepauth FROM credentials WHERE username= %s")
  306. self.CheckVar1 = IntVar(root)
  307. cursor.execute(query, (inputusername, ))
  308. for (twostepauth) in cursor:
  309. if '1' in twostepauth:
  310. global authstatus
  311. authstatus = 1
  312. self.CheckVar1.set(1)
  313. elif '0' in twostepauth:
  314. self.CheckVar1.set(0)
  315. else:
  316. messagebox.showerror("Error", "Your account does not support twostepauthentication")
  317. self.loginsection()
  318. return
  319. self.frame1.pack_forget()
  320. self.frame2.pack_forget()
  321. self.frame1 = Frame(root)
  322. self.frame2 = Frame(root)
  323. self.label1 = Label(self.frame1, text='Enable/Disable Two-Step Authentication')
  324. self.checkbox1 = Checkbutton(self.frame2, variable=self.CheckVar1)
  325. self.button1 = Button(self.frame2, text='Go back', command=lambda: combine_funcs(self.frame1.pack_forget(), self.frame2.pack_forget(), login.loginsection(self)))
  326. self.frame1.pack()
  327. self.frame2.pack()
  328. self.label1.pack()
  329. self.checkbox1.pack()
  330. self.button1.pack()
  331. def callback(*args):
  332. query = ("UPDATE credentials SET twostepauth= %s WHERE username= %s")
  333. if not self.CheckVar1.get():
  334. cursor.execute(query, ('0', inputusername,))
  335. elif self.CheckVar1.get():
  336. cursor.execute(query, ('1', inputusername,))
  337. cnx.commit()
  338. self.CheckVar1.trace("w", callback)
  339. class register():
  340. def __init__(self):
  341. self.frame1 = Frame(root)
  342. self.frame2 = Frame(root)
  343. self.entry1 = Entry(self.frame1)
  344. self.entry2 = Entry(self.frame2)
  345. self.entry3 = Entry(self.frame2)
  346. self.entry4 = Entry(self.frame2)
  347. self.entry5 = Entry(self.frame2)
  348. self.label1 = Label(self.frame1, text='Username:')
  349. self.label2 = Label(self.frame2, text='Password:')
  350. self.label3 = Label(self.frame2, text='Re-Enter Password:')
  351. self.label4 = Label(self.frame2, text='E-Mail:')
  352. self.label5 = Label(self.frame2, text='Phone Number:')
  353. self.button1 = Button(self.frame2, text='Register', command=lambda: self.registerconfirm())
  354. self.button2 = Button(self.frame2, text='Go back', command=lambda: combine_funcs(self.frame1.pack_forget(), self.frame2.pack_forget(), initialscreen()))
  355. self.frame1.pack()
  356. self.frame2.pack()
  357. self.label1.pack()
  358. self.label2.pack()
  359. self.entry1.pack()
  360. self.entry2.pack()
  361. self.label3.pack()
  362. self.entry3.pack()
  363. self.label4.pack()
  364. self.entry4.pack()
  365. self.label5.pack()
  366. self.entry5.pack()
  367. self.button1.pack()
  368. self.button2.pack()
  369.  
  370. def registerconfirm(self):
  371. query = ("SELECT * FROM credentials "
  372. "WHERE username= %s OR email= %s OR phonenumber= %s")
  373. desiredusername = self.entry1.get()
  374. desiredpassword = self.entry2.get()
  375. desiredpassword2 = self.entry3.get()
  376. email = self.entry4.get()
  377. phone_number = self.entry5.get()
  378.  
  379. if not EMAIL_REGEX.match(email):
  380. messagebox.showerror("Invalid Email", "The email you entered is invalid!")
  381. self.frame1.pack_forget()
  382. self.frame2.pack_forget()
  383. register()
  384. else:
  385. cursor.execute(query, (desiredusername, email, phone_number,))
  386. if len(cursor.fetchall()) == 0:
  387. if desiredpassword2 == desiredpassword:
  388. add_credential = ("INSERT INTO credentials "
  389. "(username, password, created, email, phonenumber) "
  390. "VALUES (%s, %s, %s, %s, %s)")
  391. add_credential_auth = ("INSERT INTO credentials "
  392. "(username, password, created, email, twostepauth, phonenumber) "
  393. "VALUES (%s, %s, %s, %s, '0', %s)")
  394. if use_two_step_authentication == 'true':
  395. cursor.execute(add_credential_auth, (desiredusername, desiredpassword, str(datetime.date.today()), email, phone_number))
  396. cnx.commit()
  397. messagebox.showinfo("Sucess!", "Account Registered!")
  398. root.quit()
  399. cursor.close()
  400. cnx.close()
  401. elif use_two_step_authentication == 'false':
  402. cursor.execute(add_credential, (
  403. desiredusername, desiredpassword, str(datetime.date.today()), email, phone_number))
  404. cnx.commit()
  405. messagebox.showinfo("Sucess!", "Account Registered!")
  406. combine_funcs(self.frame1.pack_forget(), self.frame2.pack_forget(), initialscreen())
  407. else:
  408. cursor.execute(add_credential, (
  409. desiredusername, desiredpassword, str(datetime.date.today()), email, phone_number))
  410. cnx.commit()
  411. messagebox.showinfo("Sucess!", "Account Registered!")
  412. messagebox.showwarning("Warning","Variable misconfigured in source file - Variable: use_two_step_authentication")
  413. combine_funcs(self.frame1.pack_forget(), self.frame2.pack_forget(), initialscreen())
  414. else:
  415. messagebox.showerror("Password don't match!", "The password do not match!")
  416. self.frame1.pack_forget()
  417. self.frame2.pack_forget()
  418. register()
  419. else:
  420. messagebox.showerror("Error", "This username/email/phone number is taken!")
  421. self.frame1.pack_forget()
  422. self.frame2.pack_forget()
  423. register()
  424.  
  425.  
  426. def initialscreen():
  427. root.geometry('500x400')
  428. root.title('Login System')
  429. frame1 = Frame(root)
  430. frame2 = Frame(root)
  431. label1 = Label(frame1, text='Welcome to the login program!', font=5)
  432. button1 = Button(frame2, text='Login',
  433. command=lambda: combine_funcs(frame1.pack_forget(), frame2.pack_forget(), login()))
  434. button2 = Button(frame2, text='Register',
  435. command=lambda: combine_funcs(frame1.pack_forget(), frame2.pack_forget(), register()))
  436. frame1.pack()
  437. frame2.pack()
  438. label1.pack()
  439. button1.pack()
  440. button2.pack()
  441. root.mainloop()
  442.  
  443.  
  444. root = Tk()
  445. initialscreen()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement