Настройки в ямл файл

This commit is contained in:
Igor I
2024-12-25 17:24:24 +05:00
parent 00edb2c55c
commit 467c18221b
7 changed files with 185 additions and 19 deletions

110
update_password.py Normal file
View File

@ -0,0 +1,110 @@
import psycopg2
import re
import yaml
def generate_password(length=8):
# Определяем возможные символы для разных категорий
lower_case = string.ascii_lowercase
upper_case = string.ascii_uppercase
digits = string.digits
special_characters = string.punctuation
# Гарантируем, что в пароле будет хотя бы один символ каждого типа
password = [
secrets.choice(lower_case), # строчная буква
secrets.choice(upper_case), # заглавная буква
secrets.choice(digits), # цифра
secrets.choice(special_characters) # спецсимвол
]
# Заполняем оставшиеся символы случайными из всех категорий
all_characters = lower_case + upper_case + digits + special_characters
password += [secrets.choice(all_characters) for _ in range(length - 4)]
# Перемешиваем полученные символы
secrets.SystemRandom().shuffle(password)
# Собираем строку из символов и возвращаем
return ''.join(password)
# Функция для чтения конфигурации из YAML файла
def get_configurations(properties_file):
with open(properties_file, 'r') as file:
config = yaml.safe_load(file) # Чтение YAML файла
# Извлекаем данные из конфигурации
db_url = config.get('spring', {}).get('datasource', {}).get('url', '')
db_user = config.get('spring', {}).get('datasource', {}).get('username', '')
current_password = config.get('spring', {}).get('datasource', {}).get('password', '')
# Разбираем URL для получения host, port, и dbname
match = re.match(r'jdbc:postgresql://([^:]+):(\d+)/([^?]+)', db_url)
if match:
db_host = match.group(1)
db_port = match.group(2)
db_name = match.group(3)
else:
raise ValueError("Database URL is invalid in the properties file.")
return db_host, db_port, db_name, db_user, current_password
# Функция для обновления пароля в файле конфигурации
def update_password_in_file(properties_file, current_password, new_password):
with open(properties_file, 'r') as file:
content = file.read()
# Заменяем старый пароль на новый
updated_content = re.sub(rf'spring.datasource.password={current_password}', f'spring.datasource.password={new_password}', content)
with open(properties_file, 'w') as file:
file.write(updated_content)
# Основная функция для смены пароля в PostgreSQL
def change_postgresql_password(db_host, db_port, db_name, db_user, current_password, new_password):
try:
# Подключаемся к PostgreSQL с использованием старого пароля
conn = psycopg2.connect(
dbname=db_name,
user=db_user,
password=current_password,
host=db_host,
port=db_port
)
conn.autocommit = True
# Создаем курсор для выполнения SQL-запроса
cursor = conn.cursor()
# Запрос для изменения пароля пользователя
cursor.execute(f"ALTER USER {db_user} WITH PASSWORD '{new_password}';")
cursor.close()
conn.close()
print(f"Password for user {db_user} successfully changed.")
except Exception as e:
print(f"Error changing password in PostgreSQL: {e}")
return False
return True
# Главная логика скрипта
def main():
# Путь к файлу конфигурации Spring Boot
properties_file = "application.yml"
# Получаем данные из файла конфигурации
db_host, db_port, db_name, db_user, current_password = get_configurations(properties_file)
# Новый пароль
new_password = generate_password() # Укажите новый пароль здесь
# Меняем пароль в PostgreSQL
if change_postgresql_password(db_host, db_port, db_name, db_user, current_password, new_password):
# Обновляем пароль в файле конфигурации
update_password_in_file(properties_file, current_password, new_password)
print(f"Password updated successfully in {properties_file}.")
else:
print("Password change failed.")
if __name__ == "__main__":
main()