Compare commits
	
		
			5 Commits
		
	
	
		
			21bd01c3ed
			...
			18abdecb74
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 18abdecb74 | |||
| 46a1fe59b2 | |||
| 9ee51dc19f | |||
| 2c07b3bed2 | |||
| b8113dc47b | 
@@ -23,6 +23,7 @@
 | 
			
		||||
- /help - помощь
 | 
			
		||||
- /export - получить пароли в json формате
 | 
			
		||||
- /import - импортировать пароли из json в файле в таком же формате, как из /export
 | 
			
		||||
- /gen_password - создать 10 надёжных паролей
 | 
			
		||||
 | 
			
		||||
### Настройка
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -46,4 +46,7 @@ def create_bot(token: str, engine: Engine) -> telebot.TeleBot:
 | 
			
		||||
    bot.register_message_handler(
 | 
			
		||||
        functools.partial(handlers.import_accounts, bot, engine), commands=["import"]
 | 
			
		||||
    )
 | 
			
		||||
    bot.register_message_handler(
 | 
			
		||||
        functools.partial(handlers.gen_password, bot), commands=["gen_password"]
 | 
			
		||||
    )
 | 
			
		||||
    return bot
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@ from .utils import (
 | 
			
		||||
    check_account_name,
 | 
			
		||||
    check_login,
 | 
			
		||||
    check_passwd,
 | 
			
		||||
    gen_passwd,
 | 
			
		||||
    get_all_accounts,
 | 
			
		||||
    json_to_accounts,
 | 
			
		||||
    send_tmp_message,
 | 
			
		||||
@@ -344,7 +345,8 @@ def help(bot: telebot.TeleBot, mes: telebot.types.Message) -> None:
 | 
			
		||||
/cancel - отмена текущего действия
 | 
			
		||||
/help - помощь
 | 
			
		||||
/export - получить пароли в json формате
 | 
			
		||||
/import - импортировать пароли из json в файле в таком же формате, как из /export"""
 | 
			
		||||
/import - импортировать пароли из json в файле в таком же формате, как из /export
 | 
			
		||||
/gen_password - создать 10 надёжных паролей"""
 | 
			
		||||
    bot.send_message(mes.chat.id, message)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -471,3 +473,15 @@ def _import3(
 | 
			
		||||
    send_tmp_message(bot, mes.chat.id, mes_text, 10)
 | 
			
		||||
    del text, mes, accounts
 | 
			
		||||
    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, 15)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,14 @@
 | 
			
		||||
import io
 | 
			
		||||
import string
 | 
			
		||||
import time
 | 
			
		||||
from random import SystemRandom
 | 
			
		||||
from typing import Self, Type
 | 
			
		||||
 | 
			
		||||
import pydantic
 | 
			
		||||
import telebot
 | 
			
		||||
from sqlalchemy.future import Engine
 | 
			
		||||
 | 
			
		||||
from .. import database, cryptography
 | 
			
		||||
from .. import cryptography, database
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Account(pydantic.BaseModel):
 | 
			
		||||
@@ -99,3 +101,22 @@ def check_passwd(passwd: str) -> bool:
 | 
			
		||||
def check_account(name: str, login: str, passwd: str) -> bool:
 | 
			
		||||
    """Runs checks for account name, login and password"""
 | 
			
		||||
    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