Compare commits
	
		
			4 Commits
		
	
	
		
			21bd01c3ed
			...
			46a1fe59b2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 46a1fe59b2 | |||
| 9ee51dc19f | |||
| 2c07b3bed2 | |||
| b8113dc47b | 
@@ -23,6 +23,7 @@
 | 
				
			|||||||
- /help - помощь
 | 
					- /help - помощь
 | 
				
			||||||
- /export - получить пароли в json формате
 | 
					- /export - получить пароли в json формате
 | 
				
			||||||
- /import - импортировать пароли из json в файле в таком же формате, как из /export
 | 
					- /import - импортировать пароли из json в файле в таком же формате, как из /export
 | 
				
			||||||
 | 
					- /gen_password - создать 10 надёжных паролей
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Настройка
 | 
					### Настройка
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,4 +46,7 @@ def create_bot(token: str, engine: Engine) -> telebot.TeleBot:
 | 
				
			|||||||
    bot.register_message_handler(
 | 
					    bot.register_message_handler(
 | 
				
			||||||
        functools.partial(handlers.import_accounts, bot, engine), commands=["import"]
 | 
					        functools.partial(handlers.import_accounts, bot, engine), commands=["import"]
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					    bot.register_message_handler(
 | 
				
			||||||
 | 
					        functools.partial(handlers.gen_password, bot), commands=["gen_password"]
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
    return bot
 | 
					    return bot
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,7 @@ from .utils import (
 | 
				
			|||||||
    check_account_name,
 | 
					    check_account_name,
 | 
				
			||||||
    check_login,
 | 
					    check_login,
 | 
				
			||||||
    check_passwd,
 | 
					    check_passwd,
 | 
				
			||||||
 | 
					    gen_passwd,
 | 
				
			||||||
    get_all_accounts,
 | 
					    get_all_accounts,
 | 
				
			||||||
    json_to_accounts,
 | 
					    json_to_accounts,
 | 
				
			||||||
    send_tmp_message,
 | 
					    send_tmp_message,
 | 
				
			||||||
@@ -344,7 +345,8 @@ def help(bot: telebot.TeleBot, mes: telebot.types.Message) -> None:
 | 
				
			|||||||
/cancel - отмена текущего действия
 | 
					/cancel - отмена текущего действия
 | 
				
			||||||
/help - помощь
 | 
					/help - помощь
 | 
				
			||||||
/export - получить пароли в json формате
 | 
					/export - получить пароли в json формате
 | 
				
			||||||
/import - импортировать пароли из json в файле в таком же формате, как из /export"""
 | 
					/import - импортировать пароли из json в файле в таком же формате, как из /export
 | 
				
			||||||
 | 
					/gen_password - создать 10 надёжных паролей"""
 | 
				
			||||||
    bot.send_message(mes.chat.id, message)
 | 
					    bot.send_message(mes.chat.id, message)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -471,3 +473,15 @@ def _import3(
 | 
				
			|||||||
    send_tmp_message(bot, mes.chat.id, mes_text, 10)
 | 
					    send_tmp_message(bot, mes.chat.id, mes_text, 10)
 | 
				
			||||||
    del text, mes, accounts
 | 
					    del text, mes, accounts
 | 
				
			||||||
    gc.collect()
 | 
					    gc.collect()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def gen_password(bot: telebot.TeleBot, mes: Message) -> None:
 | 
				
			||||||
 | 
					    # Generate 10 passwords and put 'em in the backticks
 | 
				
			||||||
 | 
					    base_handler(bot, mes)
 | 
				
			||||||
 | 
					    passwords = (f"`{gen_passwd()}`" for _ in range(10))
 | 
				
			||||||
 | 
					    text = (
 | 
				
			||||||
 | 
					        "Пароли:\n"
 | 
				
			||||||
 | 
					        + "\n".join(passwords)
 | 
				
			||||||
 | 
					        + "\nНажмите на пароль, чтобы его скопировать"
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    send_tmp_message(bot, mes.chat.id, text)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,14 @@
 | 
				
			|||||||
import io
 | 
					import io
 | 
				
			||||||
 | 
					import string
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
 | 
					from random import SystemRandom
 | 
				
			||||||
from typing import Self, Type
 | 
					from typing import Self, Type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import pydantic
 | 
					import pydantic
 | 
				
			||||||
import telebot
 | 
					import telebot
 | 
				
			||||||
from sqlalchemy.future import Engine
 | 
					from sqlalchemy.future import Engine
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .. import database, cryptography
 | 
					from .. import cryptography, database
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Account(pydantic.BaseModel):
 | 
					class Account(pydantic.BaseModel):
 | 
				
			||||||
@@ -99,3 +101,22 @@ def check_passwd(passwd: str) -> bool:
 | 
				
			|||||||
def check_account(name: str, login: str, passwd: str) -> bool:
 | 
					def check_account(name: str, login: str, passwd: str) -> bool:
 | 
				
			||||||
    """Runs checks for account name, login and password"""
 | 
					    """Runs checks for account name, login and password"""
 | 
				
			||||||
    return check_account_name(name) and check_login(login) and check_passwd(passwd)
 | 
					    return check_account_name(name) and check_login(login) and check_passwd(passwd)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def gen_passwd() -> str:
 | 
				
			||||||
 | 
					    """Generates password of length 32"""
 | 
				
			||||||
 | 
					    choices = SystemRandom().choices
 | 
				
			||||||
 | 
					    chars = frozenset(string.ascii_letters + string.digits + string.punctuation)
 | 
				
			||||||
 | 
					    # Remove backtick and pipe characters and convert into tuple
 | 
				
			||||||
 | 
					    chars = tuple(chars.difference("`|"))
 | 
				
			||||||
 | 
					    while True:
 | 
				
			||||||
 | 
					        passwd = "".join(choices(chars, k=32))
 | 
				
			||||||
 | 
					        passwd_chars = frozenset(passwd)
 | 
				
			||||||
 | 
					        # If there is at least one lowercase character, uppercase character
 | 
				
			||||||
 | 
					        # and one punctuation character
 | 
				
			||||||
 | 
					        if (
 | 
				
			||||||
 | 
					            passwd_chars.intersection(string.ascii_lowercase)
 | 
				
			||||||
 | 
					            and passwd_chars.intersection(string.ascii_uppercase)
 | 
				
			||||||
 | 
					            and passwd_chars.intersection(string.punctuation)
 | 
				
			||||||
 | 
					        ):
 | 
				
			||||||
 | 
					            return passwd
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user