From 1f82a431abf6c5ba4f939aebf1907efb659c751a Mon Sep 17 00:00:00 2001 From: Dima YaFlay <93622229+YaFlay@users.noreply.github.com> Date: Sat, 23 Apr 2022 18:50:54 +0300 Subject: [PATCH] Upload files. Version 1.0.1 Add files to PyPI, fix some bugs --- MANIFEST.in | 3 + README.md | 4 + build/lib/login/__init__.py | 2 + build/lib/login/__main__.py | 54 +++++ build/lib/login/commands.py | 227 ++++++++++++++++++ build/lib/login/feed.py | 1 + build/lib/login/fromaddr.cfg | Bin 0 -> 104 bytes build/lib/login/icon.png | Bin 0 -> 2133 bytes build/lib/login/mypass.cfg | Bin 0 -> 77 bytes cli.py | 1 + dist/Login app-1.0.0.tar.gz | Bin 0 -> 7431 bytes dist/Login_app-1.0.0-py3-none-any.whl | Bin 0 -> 7914 bytes login/__main__.py | 7 + login/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 264 bytes login/__pycache__/commands.cpython-39.pyc | Bin 0 -> 9215 bytes login/commands.py | 274 ++++++++++++++++++++++ login/icon.png | Bin 0 -> 2133 bytes setup.py | 33 +++ 18 files changed, 606 insertions(+) create mode 100644 MANIFEST.in create mode 100644 README.md create mode 100644 build/lib/login/__init__.py create mode 100644 build/lib/login/__main__.py create mode 100644 build/lib/login/commands.py create mode 100644 build/lib/login/feed.py create mode 100644 build/lib/login/fromaddr.cfg create mode 100644 build/lib/login/icon.png create mode 100644 build/lib/login/mypass.cfg create mode 100644 cli.py create mode 100644 dist/Login app-1.0.0.tar.gz create mode 100644 dist/Login_app-1.0.0-py3-none-any.whl create mode 100644 login/__main__.py create mode 100644 login/__pycache__/__init__.cpython-39.pyc create mode 100644 login/__pycache__/commands.cpython-39.pyc create mode 100644 login/commands.py create mode 100644 login/icon.png create mode 100644 setup.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..440d3bc --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,3 @@ +include login/*.cfg +include login/icon.png +include login/*.py \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..aeec384 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +RU_ru: +Это приложение было создано российским программистом, как база для входа и создания аккаунтов при помощи этого же приложения. Оно создает защищенные файлы учетной записи, которые можно восстановаить при помощи Encrypting code и почты. Если вы найдете ошибку или баг в моем проекте, пишите в телеграмм: https://t.me/bebra_yaflay +EN_us: +This application was created by a Russian programmer as a base for logging in and creating accounts using the same application. It creates secure account files that can be recovered using the Encrypting code and mail. If you find an error or a bug in my project, write to telegram: https://t.me/bebra_yaflay \ No newline at end of file diff --git a/build/lib/login/__init__.py b/build/lib/login/__init__.py new file mode 100644 index 0000000..5099581 --- /dev/null +++ b/build/lib/login/__init__.py @@ -0,0 +1,2 @@ +# __init__.py +__version__ = '1.0.0' \ No newline at end of file diff --git a/build/lib/login/__main__.py b/build/lib/login/__main__.py new file mode 100644 index 0000000..f8921e8 --- /dev/null +++ b/build/lib/login/__main__.py @@ -0,0 +1,54 @@ +# github.com/yaflay +import tkinter as tk +from commands import * +def main(): + window = Tk() + windows.title('LogIn App') + windows.geometry('415x180') + a = tk.PhotoImage(file=f'{path_take.main_path}/icon.png') + windows.tk.call('wm', 'iconphoto', windows._w, a) + # windows.window create + login_label = Label(text='Login:') + password_label = Label(text='Password:') + encrypt_code_label = Label(text='En(De)crypt code:') + email_label = Label(text='Your e-mail:') + # labels for entry + login_entry = Entry( width=20 ) + # login entry + password_entry = Entry( width=20, show='*') + # password entrywith seeked symbols + encrypting = Entry( width=20, show='*') + # encrypt code with seeked symbols + email_entry = Entry( width=20) + # email entry + create_account_button = Button( text='Create account', command=buttons_treatment.creating_account_def) + # create account button + login_button = Button( text='LogIn', command=buttons_treatment.clicked) + # log in button + forgot_but = Button( text='Forgot password?', command=forgot_password.forgot) + # forgot password button + close = Button( text='Close', command=buttons_treatment.closed) + # close app button + # buttons and entry + email_entry.grid(column=2, row=3) + password_entry.grid(column=2, row=1) + encrypting.grid(column=2, row=2) + login_entry.grid(column=2,row=0) + # entry + create_account_button.grid(row=1, column=3) + close.grid(column=3, row=3) + forgot_but.grid(row=2, column=3) + login_button.grid(row=0, column=3) + # buttons + login_label.grid(column=1, row=0) + password_label.grid(column=1, row=1) + encrypt_code_label.grid(column=1, row=2) + email_label.grid(column=1, row=3) + # labels + # grid for buttons and entry + windows.mainloop() + # Thanks for watching my shit-code! + # If u seeked a bug, write me in Telegram: @bebra_yaflay or in VK: https://vk.com/bebra_yaflay + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/build/lib/login/commands.py b/build/lib/login/commands.py new file mode 100644 index 0000000..80ba04f --- /dev/null +++ b/build/lib/login/commands.py @@ -0,0 +1,227 @@ +import os, smtplib +from random import randint +from tkinter import * +import tkinter as tk +from simplecrypt import encrypt, decrypt +from tkinter.messagebox import showerror, showinfo, askokcancel +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from __main__ import main + +class path_take(): + path = os.getcwd() + if not os.path.isdir(f'{path}/login_files'): + os.mkdir(f'{path}/login_files') + main_path = f'{path}/login_files' + os.popen(f'cd "{main_path}"') + with open(f'{main_path}/fromaddr.cfg', 'rb') as file: + crypted_data = file.read() + global fromaddr + fromaddr = decrypt('if_u_jailbreak_here_u_gay', crypted_data).decode('utf8') + file.close() + + with open(f'{main_path}/mypass.cfg', 'rb') as file: + crypted_data = file.read() + global mypass + mypass = decrypt('if_u_jailbreak_here_u_gay', crypted_data).decode('utf8') + file.close() +# decrypting e-mail and password +class forgot_password(): + def forgot(): + login = windows.login_entry.get() + toaddr = windows.email_entry.get() + encrypt_code = windows.encrypting.get() + with open(f'{path_take.main_path}/{login}_email.cfg', 'rb+') as file: + email_decrypted = decrypt(encrypt_code, file.read()).decode('utf8') + if email_decrypted == toaddr: + forgot_password.email(toaddr=toaddr, login=login) + else: showerror(title='LogIn', message='E-mail don`t correct! Try again!') +# if u forgot password, u can delete account + def email(toaddr, login): + code = randint(10000, 99999) + msg = MIMEMultipart() + msg['From'] = fromaddr + msg['To'] = toaddr + msg['Subject'] = f"{code}. LogIn creating account" + body = f"{code}" + + + server = smtplib.SMTP('smtp.gmail.com', 587) + server.starttls() + server.login(fromaddr, mypass) + text = msg.as_string() + + server.sendmail(fromaddr, toaddr, text) + + def clickedd(): + print(code2.get()) + if code2.get() == body: + newWindow.destroy() + os.remove(f'{path_take.main_path}/{login}.cfg') + os.remove(f'{path_take.main_path}/{login}_email.cfg') + deleting_text.del_text(when='all') + else: + showerror(title='LogIn', message='code isnt correct') + newWindow = Toplevel(windows.window) + newWindow.title("LogIn code") + newWindow.geometry("200x200") + code2 = Entry(newWindow, width=10) + code2.grid(row=1) + button = Button(newWindow, text='Creating account', command=clickedd) + button.grid(row=2) + server.quit() +# send code for ur mail +class creating_account(): + def email_creat(toaddr, login, password, encrypt_code): + code = randint(10000, 99999) + + msg2 = MIMEMultipart() + msg2['From'] = fromaddr + msg2['To'] = toaddr + msg2['Subject'] = f"LogIn creating account" + + + body2 = f'''Your LogIn: {login} +Your password: {password} +Your decrypt phrase: {encrypt_code} +Thanks for using my app! +Made in Russia with love!''' + msg2.attach(MIMEText(body2, 'plain')) + text2 = msg2.as_string() + + + msg = MIMEMultipart() + msg['From'] = fromaddr + msg['To'] = toaddr + msg['Subject'] = f"{code}. LogIn creating account" + + body = f"{code}" + msg.attach(MIMEText(body, 'plain')) + server = smtplib.SMTP('smtp.gmail.com', 587) + server.starttls() + server.login(fromaddr, mypass) + text = msg.as_string() + server.sendmail(fromaddr, toaddr, text) + + def clickedd(): + print(code2.get()) + if code2.get() == body: + newWindow.destroy() + server.sendmail(fromaddr, toaddr, text2) + server.quit() + creating_account.creating_account(login=login, password=password, encrypt_code=encrypt_code, toaddr=toaddr) + else: + showerror(title='LogIn', message='code isnt correct') + server.quit() + newWindow = Toplevel(windows.window) + newWindow.title("New window") + newWindow.geometry("200x200") + code2 = Entry(newWindow, width=10) + code2.grid(row=1) + button = Button(newWindow, text='Creating account', command=clickedd) + button.grid(row=2) + # creating account code for ur e-mail + def creating_account(login, password, encrypt_code, toaddr): + password2 = encrypt(encrypt_code, password) + if not os.path.isfile(f'{path_take.main_path}/{login}.cfg'): + with open(f'{path_take.main_path}/{login}.cfg', 'wb+') as file: + file.write(password2) + file.close() + showinfo(title='LogIn', message='Account created!') + else: + showerror(title='LogIn', message='Account already created!') + with open(f'{path_take.main_path}/{login}_email.cfg', 'wb+') as file: + toaddr2 = encrypt(encrypt_code, toaddr) + file.write(toaddr2) + file.close() + deleting_text.del_text(when='all') + # creating files with ur e-mail and password. All encrypted +class logging_account(): + def email_log(toaddr, login, password, encrypt_code): + code = randint(10000, 99999) + + msg = MIMEMultipart() + msg['From'] = fromaddr + msg['To'] = toaddr + msg['Subject'] = f"{code}. LogIn creating account" + + body = f"{code}" + msg.attach(MIMEText(body, 'plain')) + server = smtplib.SMTP('smtp.gmail.com', 587) + server.starttls() + server.login(fromaddr, mypass) + text = msg.as_string() + server.sendmail(fromaddr, toaddr, text) + server.quit() + def clickedd(): + print(code2.get()) + if code2.get() == body: + newWindow.destroy() + logging_account.loging(login=login, password=password, encrypt_code=encrypt_code) + else: + showerror(title='LogIn', message='code isnt correct') + # checking correct code + newWindow = Toplevel(windows.window) + newWindow.title("New windows.window") + newWindow.geometry("200x200") + # create windows.window for code + code2 = Entry(newWindow, width=10) + code2.grid(row=1) + button = Button(newWindow, text='Creating account', command=clickedd) + button.grid(row=2) + # login code for ur e-mail + def loging(login, password, encrypt_code): + try: + with open(f'{path_take.main_path}/{login}.cfg', 'rb+') as file: + password2 = decrypt(encrypt_code, file.read()).decode('utf8') + file.close() + if password == password2: + askokcancel(title='LogIn', message='LogIn succesful!') + deleting_text.del_text(when='all') + else: + showerror(title='LogIn', message='Password or login don`t correct. Try again!') + deleting_text.del_text(when='all') + except Exception as e: + print(e) + showerror(title='LogIn', message='Account don`t created!') + # log in function. u can use this for ur program +class deleting_text(): + def del_text(when): + if when == 'login_entry': + windows.login_entry.delete(0, END) + elif when == 'password_entry': + windows.password_entry.delete(0, END) + elif when == 'encrypting': + windows.encrypting.delete(0, END) + elif when == 'email_entry': + windows.email_entry.delete(0, END) + elif when == 'all': + windows.login_entry.delete(0, END) + windows.password_entry.delete(0, END) + windows.encrypting.delete(0, END) + windows.email_entry.delete(0, END) + # delete text login, password, encrypt code and email +class buttons_treatment(): + + def clicked(): + login = windows.windows.login_entry.get() + encrypt_code = windows.encrypting.get() + password = windows.password_entry.get() + toaddr = windows.email_entry.get() + logging_account.email_log(toaddr=toaddr, login=login, password=password, encrypt_code=encrypt_code) + # login button + def creating_account_def(): + login = windows.login_entry.get() + password = windows.password_entry.get() + encrypt_code = windows.encrypting.get() + toaddr = windows.email_entry.get() + + if login == ['mypass', 'fromaddr']: + showerror(title='LogIn', message='This login blocked!') + deleting_text.del_text(when='windows.login_entry') + else: + creating_account.email_creat(toaddr=toaddr, login=login, password=password, encrypt_code=encrypt_code) + # creating account button + def closed(): + windows.windows.destroy() + # windows.window close button diff --git a/build/lib/login/feed.py b/build/lib/login/feed.py new file mode 100644 index 0000000..464c436 --- /dev/null +++ b/build/lib/login/feed.py @@ -0,0 +1 @@ +import feedparser \ No newline at end of file diff --git a/build/lib/login/fromaddr.cfg b/build/lib/login/fromaddr.cfg new file mode 100644 index 0000000000000000000000000000000000000000..a2b1616a0d2f1c10206987852888cc08a106121d GIT binary patch literal 104 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 F007^T=4Jo@ literal 0 HcmV?d00001 diff --git a/dist/Login_app-1.0.0-py3-none-any.whl b/dist/Login_app-1.0.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..1fb7dfbc1eb1e705e63f0a979200c6829e118489 GIT binary patch literal 7914 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 z zK5!@=g-wUk1)CB`5RFg}G|p*LMG+!NDeA>Ed=J^^^AH2Z$&GRg_+`#xb^&aV=iWJg z=A>511p7ZSNm>qqvgin+^MhC;QW>TbCXVM32QWFPV{uRiM#@1Q^S~ivIzb^fhCv610LwAK|%i!(carz3ixYn@`8?b@`d<|i`h ziCc)73e(B++^9%^r*w z;g4cQ;eU>VkQRnQNS(Pp_4Jz11{1slrXg@2;uW&yp`Z{`3-P-o>tXb*n8g5_6u>34(IaljLrFZuhsM=}2f1+yoxDr$ zqE3fiG_Y*~hu@*M5vgK-cR^Cg*>qAs?a4qTLNpdnLY21a{U4>NTh`G(LIR;f3M9^} z;G{5Olfb^Uk8%^`msEiAxV(*W(!SSGZXX!O<=;TLjq-O;?hKVLqufFH!D#=Zy^i)Z z+5zdTLz0v>iO5WA_KzH z)k+~b@}s(CToKvY$tCW`qJ@K)w9TgyUNWU37Ew7Sn`t7dI-)tW_ykm}0Lw^Vx<5WH z%?l0YHz_{dHNpJwm(`Yy7ssH@*=Nwxm_;GTa=a31H^!6C%fQP;S}n;GFm1doVV94c zKkkkv>v+Zzw-=uJ2Rw01dukWZIe%i%{b1JFgBR!rga5dY{PEDC#fai=7|`UE*r7eD z3b@A_K(Gc6Nu_+u=Vp_=|q@y9pI*D}>V-r{ycXZ1lSpO$9?CoFGT&5N48J&x#%xN#q z*Y`@PgOLeFXBsIjYgY~l(k_bJ_NGE#DH&==%cvasz`-&*eAXoX74>Wzn%~IY?)YThOs)I)JAvGH8=WE{oh0=cbXH2xjU9 z&dnm1L){$b&WTB&d_KwZ(Mh>cSqmCbIf$zr2V`7pT`lSC7j;s7>b=^Ty59QSt3ioR z{cw0Af~&m%Q^2P>SDz4@sHlU96qf4-ZoWllz@6MR=HY%wUj-sqqw}xvNm#Lu&0qHI zYqUfwrTMWH^6eY+o&9ql{^%i0SNZAT;~O=we%yc?sPF_E%a}z_w1QWYmB626oez!` zR%wzXElIM>&*fgx1$vMIuYS50rbUHPB6cbU#&oQ!@;A`@-*K^D;PGh@jL3iq;V+F4 zF#U0>5#1sSA>C6}0#b`L91Ver4}hz@yVr<9d5?tsNAF~VkHa76yNFES^pKrDq`aCWXVmpZA%S~YAf zv|Ag{YjW3oW4r06sIa{m#vzBqo+zzNoNCzEYPRGrp`D7Kk@Em`=7PJFp7)K_+k=o- zV#K%o^qbVv8%-Qq4xG%y!ud$UH_F?*mde@qCUrbeKGH?Mz~(WoY@|MZN}UvwPJNf2 z+$HgC62D2}I}pBy!;MxW4BPlj3dbdSWe6gRC}HgUZzR|w&~WTPpk2@lW*&YD{&2iK zayR*j(s>n|S;dpSL;w8|HhKT%yYX$DRpH3v9#v(cS`!B=3=S%!L+-Ud-D|YaJI-AT z@2E|yi&{zEwqH<3NzGa_SZMbDBZNtFLS=-`YMPn) rPBFX0dr|#A#7nfK5pk;u4U(@`fKQ$^ax=LXaxdpD=kmGpxpV&qK_L^| literal 0 HcmV?d00001 diff --git a/login/commands.py b/login/commands.py new file mode 100644 index 0000000..aec366b --- /dev/null +++ b/login/commands.py @@ -0,0 +1,274 @@ +import os, smtplib +from random import randint +from tkinter import * +import tkinter as tk +from simplecrypt import encrypt, decrypt +from tkinter.messagebox import showerror, showinfo, askokcancel +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText + +class path_take(): + main_path = os.path.abspath(__file__).replace(os.path.basename(__file__), '') + with open(f'{main_path}/fromaddr.cfg', 'rb') as file: + crypted_data = file.read() + global fromaddr + fromaddr = decrypt('if_u_jailbreak_here_u_gay', crypted_data).decode('utf8') + file.close() + + with open(f'{main_path}/mypass.cfg', 'rb') as file: + crypted_data = file.read() + global mypass + mypass = decrypt('if_u_jailbreak_here_u_gay', crypted_data).decode('utf8') + file.close() +# decrypting e-mail and password +class forgot_password(): + def forgot(): + login = windows.login_entry.get() + toaddr = windows.email_entry.get() + encrypt_code = windows.encrypting.get() + with open(f'{path_take.main_path}/{login}_email.cfg', 'rb+') as file: + email_decrypted = decrypt(encrypt_code, file.read()).decode('utf8') + if email_decrypted == toaddr: + forgot_password.email(toaddr=toaddr, login=login) + else: showerror(title='LogIn', message='E-mail don`t correct! Try again!') +# if u forgot password, u can delete account + def email(toaddr, login): + code = randint(10000, 99999) + msg = MIMEMultipart() + msg['From'] = fromaddr + msg['To'] = toaddr + msg['Subject'] = f"{code}. LogIn creating account" + body = f"{code}" + + + server = smtplib.SMTP('smtp.gmail.com', 587) + server.starttls() + server.login(fromaddr, mypass) + text = msg.as_string() + + server.sendmail(fromaddr, toaddr, text) + + def clickedd(): + print(code2.get()) + if code2.get() == body: + newWindow.destroy() + os.remove(f'{path_take.main_path}/{login}.cfg') + os.remove(f'{path_take.main_path}/{login}_email.cfg') + deleting_text.del_text(when='all') + else: + showerror(title='LogIn', message='code isnt correct') + newWindow = Toplevel(windows.window) + newWindow.title("LogIn code") + newWindow.geometry("200x200") + code2 = Entry(newWindow, width=10) + code2.grid(row=1) + button = Button(newWindow, text='Creating account', command=clickedd) + button.grid(row=2) + server.quit() +# send code for ur mail +class creating_account(): + def email_creat(toaddr, login, password, encrypt_code): + code = randint(10000, 99999) + + msg2 = MIMEMultipart() + msg2['From'] = fromaddr + msg2['To'] = toaddr + msg2['Subject'] = f"LogIn creating account" + + + body2 = f'''Your LogIn: {login} +Your password: {password} +Your decrypt phrase: {encrypt_code} +Thanks for using my app! +Made in Russia with love!''' + msg2.attach(MIMEText(body2, 'plain')) + text2 = msg2.as_string() + + + msg = MIMEMultipart() + msg['From'] = fromaddr + msg['To'] = toaddr + msg['Subject'] = f"{code}. LogIn creating account" + + body = f"{code}" + msg.attach(MIMEText(body, 'plain')) + server = smtplib.SMTP('smtp.gmail.com', 587) + server.starttls() + server.login(fromaddr, mypass) + text = msg.as_string() + server.sendmail(fromaddr, toaddr, text) + + def clickedd(): + print(code2.get()) + if code2.get() == body: + newWindow.destroy() + server.sendmail(fromaddr, toaddr, text2) + server.quit() + creating_account.creating_account(login=login, password=password, encrypt_code=encrypt_code, toaddr=toaddr) + else: + showerror(title='LogIn', message='code isnt correct') + server.quit() + newWindow = Toplevel(windows.window) + newWindow.title("New window") + newWindow.geometry("200x200") + code2 = Entry(newWindow, width=10) + code2.grid(row=1) + button = Button(newWindow, text='Creating account', command=clickedd) + button.grid(row=2) + # creating account code for ur e-mail + def creating_account(login, password, encrypt_code, toaddr): + password2 = encrypt(encrypt_code, password) + if not os.path.isfile(f'{path_take.main_path}/{login}.cfg'): + with open(f'{path_take.main_path}/{login}.cfg', 'wb+') as file: + file.write(password2) + file.close() + showinfo(title='LogIn', message='Account created!') + else: + showerror(title='LogIn', message='Account already created!') + with open(f'{path_take.main_path}/{login}_email.cfg', 'wb+') as file: + toaddr2 = encrypt(encrypt_code, toaddr) + file.write(toaddr2) + file.close() + deleting_text.del_text(when='all') + # creating files with ur e-mail and password. All encrypted +class logging_account(): + def email_log(toaddr, login, password, encrypt_code): + code = randint(10000, 99999) + + msg = MIMEMultipart() + msg['From'] = fromaddr + msg['To'] = toaddr + msg['Subject'] = f"{code}. LogIn creating account" + + body = f"{code}" + msg.attach(MIMEText(body, 'plain')) + server = smtplib.SMTP('smtp.gmail.com', 587) + server.starttls() + server.login(fromaddr, mypass) + text = msg.as_string() + server.sendmail(fromaddr, toaddr, text) + server.quit() + def clickedd(): + print(code2.get()) + if code2.get() == body: + newWindow.destroy() + logging_account.loging(login=login, password=password, encrypt_code=encrypt_code) + else: + showerror(title='LogIn', message='code isnt correct') + # checking correct code + newWindow = Toplevel(windows.window) + newWindow.title("New windows.window") + newWindow.geometry("200x200") + # create windows.window for code + code2 = Entry(newWindow, width=10) + code2.grid(row=1) + button = Button(newWindow, text='Creating account', command=clickedd) + button.grid(row=2) + # login code for ur e-mail + def loging(login, password, encrypt_code): + try: + with open(f'{path_take.main_path}/{login}.cfg', 'rb+') as file: + password2 = decrypt(encrypt_code, file.read()).decode('utf8') + file.close() + if password == password2: + askokcancel(title='LogIn', message='LogIn succesful!') + deleting_text.del_text(when='all') + else: + showerror(title='LogIn', message='Password or login don`t correct. Try again!') + deleting_text.del_text(when='all') + except Exception as e: + print(e) + showerror(title='LogIn', message='Account don`t created!') + # log in function. u can use this for ur program +class deleting_text(): + def del_text(when): + if when == 'login_entry': + windows.login_entry.delete(0, END) + elif when == 'password_entry': + windows.password_entry.delete(0, END) + elif when == 'encrypting': + windows.encrypting.delete(0, END) + elif when == 'email_entry': + windows.email_entry.delete(0, END) + elif when == 'all': + windows.login_entry.delete(0, END) + windows.password_entry.delete(0, END) + windows.encrypting.delete(0, END) + windows.email_entry.delete(0, END) + # delete text login, password, encrypt code and email +class buttons_treatment(): + + def clicked(): + login = windows.windows.login_entry.get() + encrypt_code = windows.encrypting.get() + password = windows.password_entry.get() + toaddr = windows.email_entry.get() + logging_account.email_log(toaddr=toaddr, login=login, password=password, encrypt_code=encrypt_code) + # login button + def creating_account_def(): + login = windows.login_entry.get() + password = windows.password_entry.get() + encrypt_code = windows.encrypting.get() + toaddr = windows.email_entry.get() + + if login == ['mypass', 'fromaddr']: + showerror(title='LogIn', message='This login blocked!') + deleting_text.del_text(when='login_entry') + else: + creating_account.email_creat(toaddr=toaddr, login=login, password=password, encrypt_code=encrypt_code) + # creating account button + def closed(): + windows.windows.destroy() + # windows.window close button + +class entry_labels_etc(): + login_label = Label(text='Login:') + password_label = Label(text='Password:') + encrypt_code_label = Label(text='En(De)crypt code:') + email_label = Label(text='Your e-mail:') + # labels for entry + login_entry = Entry(width=20)#, windows.window ) + # login entry + password_entry = Entry(width=20, show='*')#,windows.window) + # password entrywith seeked symbols + encrypting = Entry( width=20, show='*')#,windows.window) + # encrypt code with seeked symbols + email_entry = Entry( width=20)#,windows.window) + # email entry + create_account_button = Button( text='Create account', command=buttons_treatment.creating_account_def)#,windows.window) + # create account button + login_button = Button( text='LogIn', command=buttons_treatment.clicked)#,windows.window) + # log in button + forgot_but = Button(text='Forgot password?', command=forgot_password.forgot)#,windows.window) + # forgot password button + close = Button(text='Close', command=buttons_treatment.closed)#,windows.window) + # close app button + # buttons and entry +def windows(): + window = Tk() + window.title('LogIn App') + window.geometry('415x180') + a = tk.PhotoImage(file=f'{path_take.main_path}/icon.png') + window.tk.call('wm', 'iconphoto', window._w, a) + # windows.window create + + entry_labels_etc.email_entry.grid(column=2, row=3) + entry_labels_etc.password_entry.grid(column=2, row=1) + entry_labels_etc.encrypting.grid(column=2, row=2) + entry_labels_etc.login_entry.grid(column=2,row=0) + # entry + entry_labels_etc.reate_account_button.grid(row=1, column=3) + entry_labels_etc.close.grid(column=3, row=3) + entry_labels_etc.orgot_but.grid(row=2, column=3) + entry_labels_etc.login_button.grid(row=0, column=3) + # buttons + entry_labels_etc.login_label.grid(column=1, row=0) + entry_labels_etc.password_label.grid(column=1, row=1) + entry_labels_etc.encrypt_code_label.grid(column=1, row=2) + entry_labels_etc.email_label.grid(column=1, row=3) + # labels + # grid for buttons and entry + window.mainloop() + # Thanks for watching my shit-code! + # If u seeked a bug, write me in Telegram: @bebra_yaflay or in VK: https://vk.com/bebra_yaflay +# windows() \ No newline at end of file diff --git a/login/icon.png b/login/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bbeccbe98a7409330014aa055b7bcbb30f7573f1 GIT binary patch literal 2133 zcmZ{lX*d*m8^-^WbtZd;k{V0)WK5O}PIgAfo{F(=Wf=@vBcX_~B|_Grkcg}e>_3?#}Z1!kR|f!}-X@wG2QY5`eD`0HCt~;K$`Qo2eZi zn4PZa>wu#_Drk9`eoUY^gPQ>WaD4bZK27JD0bGG5O zR|JF@B{j+p))k=|r}mCEj|fwPfD&O+BDPtcG?J{G%!FF_LPON(gVxSj-x zYswavm28|s3WLh9L|l&=Lc8y`YW94V@q zLcd4;syRx`#OD+NVolmf^^LL?BTz50z2umt&rA+Th>|rE$evA> zWBW0&{^H-ymk(d{OcP_add!Bqs)|tMo4ye|GNW1Ao83Ya{9UEnv@(cfXWSbk{Wd9_ zJ~VzMwA|N;Rlvobkd9W0>FqDr7{8#=DVX-?QMFv@lb<9JprL;|%6=8w*W8bs+3&f@ zaag&tA6)!kBvUL9&kE1H?0djM5oW0+-dBwg3``Kv_sbB5BD;Vmf9xfDRaqHFkp5annJjZAA)H--vnccm4(?RW>Y}P7!LhaFYb%kK| zXXLbwCWY+|H=`4lS|Z^BdGH53z$1D@&dznGm2LnX(mP2WI8ClCx-?rDW-Q7-jj3MW zrS9&Z8xyeB-OM#KqzL{KsHtO`FAjuv2UMZ=k8H0dA1%Tpu!15l0<-wvvNEZ&3bXFB zHQ&&04E9N6@a32rR~&ne#k<8bz9Q=QHX!--U~ciJ7)%Gbw`&hi1>9_{CMaK$xDq@E ziwyRODjd2fyUmwcjWHeh94y|o_*;Q&^a064^9mVqzlOx|wvQsmSvD07h5%)8XXQ1P z$LZIzCa+uAf%l?k2x?PZh3PG}U$1kUNZ%SDPL%I0XDD4w?i!47c(|g=Ukix_&@U8p zOynF;lmdV^>wJ>fcg?>VnqsLwJ|CXp4)!1%d293b&Qc=T{dT{F{KQna5V|MM8p*{` zxhR<)0mi_apz^OmmOvYe#&WjMd4z2zYk7?A~^!Pu9x5ex6>IZX{_^E#J$Qgsp$1Z;`!_z;sCS}C!T z_q{fExRzx_iE^D_N=MM&LN=jS+ssn%9?ER3KCw+y#KHtVp`+*Yy6dn@#=_fOR;7eT z+DW6(J~38UY8tPIDGErzyY!q$d}sB>8MPMZ1+M3xG@6rAFsW7vhZ|<0UODhmtGfO* z7k}d1ynMQQ^yACE7Hzf)E@3&GK*2xVEVQ zSZ8@_zeTl)lzP}WBR!ksL$!WdWIQbmxT;<9BI_5znHDbx^7U=Q)v##5q%6y7j`-2& zJx|Q0It+8O^Rl(M0#m#W!^P)I_ox(1otxj|F+G{1h_^MMKzP;h+oWED_eDtvt-cjH za=TGawkoy|x<(r{YKaVb!%WYKpfwkI4j&Y&0fN(E4KhEs1p8ypxDQ{?1Z$4m10a89 z_HILi#ZrzPmMh6-l{Q8gl(2ukP78g;CH^35R8my817mW;4X?G?1wZZBm0z3bY(7|1NpgzhOdJDUt>h zVOqd78P0W^MAya1?0HUA^?=5gIp{9!KxV6&^f+vRkAveknk9COHgb-L-P+hIqxS$$?L_^)}JOsMB9RR$zjdO z2*Cqo{?K$Qd0T*3fz|F*d|bxP*qA$7FRE)r*YZ2Bs^e3O2e#7R$~2HGrCe(0W0IV- zmXvzy$f1DyZV<2>-4K@U74ZXM`?V@j;