Настройки в ямл файл
This commit is contained in:
110
update_password.py
Normal file
110
update_password.py
Normal 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()
|
||||
Reference in New Issue
Block a user