@ -1,13 +1,11 @@
import asyncio
import functools
import gc
from concurrent . futures import ProcessPoolExecutor
import telebot
from sqlalchemy . future import Engine
from telebot . async_telebot import AsyncTeleBot
from . . import d b, encryption , generate_password
from . . import d ata base , encryption , generate_password
from . . account_checks import (
check_account ,
check_account_name ,
@ -20,6 +18,7 @@ from . import markups
from . helper_functions import (
base_handler ,
delete_message ,
escape ,
get_state ,
register_state ,
send_deleteable_message ,
@ -35,7 +34,7 @@ async def get_accounts(
mes : Message ,
) - > None :
await base_handler ( bot , mes )
accounts = d b. get . get_account _name s(
accounts = d ata base . get . get_account s(
engine ,
mes . from_user . id ,
to_sort = True ,
@ -72,8 +71,8 @@ async def _delete_all2(
await base_handler ( bot , mes , prev_mes )
text = mes . text . strip ( )
if text == " YES " :
d b. delete . purge_accounts ( engine , mes . from_user . id )
d b. delete . delete_master_pass ( engine , mes . from_user . id )
d ata base . delete . purge_accounts ( engine , mes . from_user . id )
d ata base . delete . delete_master_pass ( engine , mes . from_user . id )
await send_tmp_message (
bot ,
mes . chat . id ,
@ -94,7 +93,7 @@ async def set_master_password(
mes : Message ,
) - > None :
await base_handler ( bot , mes , None )
if d b. get . get_master_pass ( engine , mes . from_user . id ) is not None :
if d ata base . get . get_master_pass ( engine , mes . from_user . id ) is not None :
return await send_tmp_message (
bot ,
mes . chat . id ,
@ -119,7 +118,7 @@ async def _set_master_pass2(
mes . from_user . id ,
text ,
)
d b. add . add_master_pass ( engine , master_password )
d ata base . add . add_master_pass ( engine , master_password )
await send_tmp_message ( bot , mes . chat . id , " Успех " )
del mes , text
@ -133,7 +132,7 @@ async def reset_master_pass(
) - > None :
await base_handler ( bot , mes )
if d b. get . get_master_pass ( engine , mes . from_user . id ) is None :
if d ata base . get . get_master_pass ( engine , mes . from_user . id ) is None :
return await send_tmp_message (
bot ,
mes . chat . id ,
@ -164,8 +163,8 @@ async def _reset_master_pass2(
mes . from_user . id ,
text ,
)
d b. delete . purge_accounts ( engine , mes . from_user . id )
d b. change . change_master_pass ( engine , master_password )
d ata base . delete . purge_accounts ( engine , mes . from_user . id )
d ata base . change . change_master_pass ( engine , master_password )
await send_tmp_message (
bot , mes . chat . id , " В с е ваши аккаунты удалены, а мастер пароль изменён"
@ -177,7 +176,7 @@ async def _reset_master_pass2(
async def add_account ( bot : AsyncTeleBot , engine : Engine , mes : Message ) - > None :
await base_handler ( bot , mes )
master_password_from_db = d b. get . get_master_pass (
master_password_from_db = d ata base . get . get_master_pass (
engine ,
mes . from_user . id ,
)
@ -209,7 +208,7 @@ async def _add_account2(
mes . chat . id ,
" Н е корректное название аккаунта" ,
)
if text in d b. get . get_account _name s( engine , mes . from_user . id ) :
if text in d ata base . get . get_account s( engine , mes . from_user . id ) :
return await send_tmp_message (
bot , mes . chat . id , " Аккаунт с таким именем уже существует "
)
@ -290,7 +289,7 @@ async def _add_account5(
if text == " /cancel " :
return await send_tmp_message ( bot , mes . chat . id , " Успешная отмена " )
master_password = d b. get . get_master_pass ( engine , mes . from_user . id )
master_password = d ata base . get . get_master_pass ( engine , mes . from_user . id )
if not encryption . master_pass . check_master_pass ( text , master_password ) :
return await send_tmp_message (
bot ,
@ -306,9 +305,12 @@ async def _add_account5(
password = data [ " passwd " ] ,
)
encrypted_account = encryption . accounts . encrypt ( account , text )
encrypted_account = encryption . other_accounts . encrypt (
account ,
text ,
)
result = db . add . add_account (
result = d ata base . add . add_account (
engine ,
encrypted_account ,
)
@ -327,11 +329,11 @@ async def _add_account5(
async def get_account ( bot : AsyncTeleBot , engine : Engine , mes : Message ) - > None :
await base_handler ( bot , mes )
master_pass = d b. get . get_master_pass ( engine , mes . from_user . id )
master_pass = d ata base . get . get_master_pass ( engine , mes . from_user . id )
if master_pass is None :
return await send_tmp_message ( bot , mes . chat . id , " Нет мастер пароля " )
accounts = d b. get . get_account _name s(
accounts = d ata base . get . get_account s(
engine ,
mes . from_user . id ,
to_sort = True ,
@ -354,7 +356,7 @@ async def _get_account2(
if text == " /cancel " :
return await send_tmp_message ( bot , mes . chat . id , " Успешная отмена " )
if text not in d b. get . get_account _name s( engine , mes . from_user . id ) :
if text not in d ata base . get . get_account s( engine , mes . from_user . id ) :
return await send_tmp_message ( bot , mes . chat . id , " Нет такого аккаунта " )
bot_mes = await bot . send_message ( mes . chat . id , " Отправьте мастер пароль " )
@ -376,7 +378,7 @@ async def _get_account3(
if text == " /cancel " :
return await send_tmp_message ( bot , mes . chat . id , " Успешная отмена " )
master_password = d b. get . get_master_pass (
master_password = d ata base . get . get_master_pass (
engine ,
mes . from_user . id ,
)
@ -388,14 +390,17 @@ async def _get_account3(
" Н е подходит мастер пароль" ,
)
account = db . get . get_account_info ( engine , mes . from_user . id , name )
account = encryption . accounts . decrypt ( account , text )
account = database . get . get_account_info ( engine , mes . from_user . id , name )
account = encryption . other_accounts . decrypt (
account ,
text ,
)
await send_deleteable_message (
bot ,
mes . chat . id ,
f " Название: \n ` { account . name } ` \n "
f " Название: \n { escape ( account . name ) } \n "
f " Логин: \n ` { account . login } ` \n Пароль: \n ` { account . password } ` \n Нажмите "
" на название, логин или пароль, чтобы скопировать" ,
" на логин или пароль, чтобы скопировать" ,
)
del text , mes
@ -409,11 +414,11 @@ async def delete_account(
) - > None :
await base_handler ( bot , mes )
master_pass = d b. get . get_master_pass ( engine , mes . from_user . id )
master_pass = d ata base . get . get_master_pass ( engine , mes . from_user . id )
if master_pass is None :
return await send_tmp_message ( bot , mes . chat . id , " Нет мастер пароля " )
accounts = d b. get . get_account _name s(
accounts = d ata base . get . get_account s(
engine ,
mes . from_user . id ,
to_sort = True ,
@ -442,7 +447,7 @@ async def _delete_account2(
if text == " /cancel " :
return await send_tmp_message ( bot , mes . chat . id , " Успешная отмена " )
if text not in d b. get . get_account _name s( engine , mes . from_user . id ) :
if text not in d ata base . get . get_account s( engine , mes . from_user . id ) :
return await send_tmp_message ( bot , mes . chat . id , " Нет такого аккаунта " )
bot_mes = await bot . send_message (
@ -469,7 +474,7 @@ async def _delete_account3(
if text != " YES " :
return await send_tmp_message ( bot , mes . chat . id , " Успешная отмена " )
d b. delete . delete_account ( engine , mes . from_user . id , account_name )
d ata base . delete . delete_account ( engine , mes . from_user . id , account_name )
await send_tmp_message ( bot , mes . chat . id , " Аккаунт удалён " )
@ -493,7 +498,7 @@ async def help_command(bot: AsyncTeleBot, mes: Message) -> None:
async def export ( bot : AsyncTeleBot , engine : Engine , mes : Message ) - > None :
await base_handler ( bot , mes )
master_password_from_db = d b. get . get_master_pass (
master_password_from_db = d ata base . get . get_master_pass (
engine ,
mes . from_user . id ,
)
@ -501,7 +506,7 @@ async def export(bot: AsyncTeleBot, engine: Engine, mes: Message) -> None:
if master_password_from_db is None :
return await send_tmp_message ( bot , mes . chat . id , " Нет мастер пароля " )
if not d b. get . get_account _name s( engine , mes . from_user . id ) :
if not d ata base . get . get_account s( engine , mes . from_user . id ) :
return await send_tmp_message ( bot , mes . chat . id , " Нет аккаунтов " )
bot_mes = await bot . send_message ( mes . chat . id , " Отправьте мастер пароль " )
@ -517,7 +522,7 @@ async def _export2(
if text == " /cancel " :
return await send_tmp_message ( bot , mes . chat . id , " Успешная отмена " )
master_password = d b. get . get_master_pass (
master_password = d ata base . get . get_master_pass (
engine ,
mes . from_user . id ,
)
@ -528,19 +533,8 @@ async def _export2(
" Н е подходит мастер пароль" ,
)
accounts = db . get . get_accounts ( engine , mes . from_user . id )
with ProcessPoolExecutor ( ) as pool :
loop = asyncio . get_running_loop ( )
tasks = [ ]
for account in accounts :
function = functools . partial (
encryption . accounts . decrypt ,
account ,
text ,
)
tasks . append ( loop . run_in_executor ( pool , function ) )
accounts = await asyncio . gather ( * tasks )
accounts . sort ( key = lambda account : account . name )
accounts = database . get . get_all_accounts ( engine , mes . from_user . id )
accounts = encryption . other_accounts . decrypt_multiple ( accounts , text )
json_io = accounts_to_json ( accounts )
await bot . send_document (
mes . chat . id ,
@ -558,7 +552,7 @@ async def import_accounts(
mes : Message ,
) - > None :
await base_handler ( bot , mes )
master_password_from_db = d b. get . get_master_pass (
master_password_from_db = d ata base . get . get_master_pass (
engine ,
mes . from_user . id ,
)
@ -626,7 +620,7 @@ async def _import3(
if text == " /cancel " :
return await send_tmp_message ( bot , mes . chat . id , " Успешная отмена " )
master_password = d b. get . get_master_pass (
master_password = d ata base . get . get_master_pass (
engine ,
mes . from_user . id ,
)
@ -644,8 +638,11 @@ async def _import3(
if not check_account ( account ) :
failed . append ( account . name )
continue
account = encryption . accounts . encrypt ( account , text )
result = db . add . add_account ( engine , account )
account = encryption . other_accounts . encrypt (
account ,
text ,
)
result = database . add . add_account ( engine , account )
if not result :
failed . append ( account . name )