python3 flask 实现对config.yaml文件的内容的增删改查,并重启服务

 config.yaml配置文件内容

功能就是userpass下的用户名和密码做增删改查,并重启hy2服务

auth:
  type: userpass
  userpass:
    csdn: csdn

listen: :443
masquerade:
  proxy:
    rewriteHost: true
    url: https://www.bing.com/
  type: proxy
tls:
  cert: /root/hyst*****马赛克******eria2/csdn.crt
  key: /root/hyst*****马赛克******eria2/csdn.key

直接上代码

from flask import Flask, request, jsonify
import yaml
import subprocess
import os

app = Flask(__name__)
CONFIG_FILE = '/root/hyst*******马赛克******eria2/config.yaml'
API_KEY = '123456789'

def read_config():
    with open(CONFIG_FILE, 'r') as file:
        return yaml.safe_load(file)

def write_config(config):
    with open(CONFIG_FILE, 'w') as file:
        yaml.safe_dump(config, file)

def restart_service(service_name):
    try:
        subprocess.run(['sudo', 'systemctl', 'restart', service_name], check=True)
        return True
    except subprocess.CalledProcessError:
        return False

def check_service_status(service_name):
    try:
        result = subprocess.run(['sudo', 'systemctl', 'is-active', service_name], check=True, stdout=subprocess.PIPE)
        if result.stdout.decode('utf-8').strip() == 'active':
            return True
        else:
            return False
    except subprocess.CalledProcessError:
        return False

@app.route('/api', methods=['POST'])
def manage_user():
    # 验证API Key
    api_key = request.headers.get('Authorization')
    if api_key != API_KEY:
        return jsonify({'error': 'Unauthorized'}), 401

    # 解析请求数据
    data = request.json
    if not data or 'username' not in data or 'action' not in data:
        return jsonify({'error': 'Bad Request'}), 400
    
    username = data['username']
    action = data['action'].lower()

    # 读取配置文件
    config = read_config()
    userpass = config.get('auth', {}).get('userpass', {})

    service_name = 'hyst*******马赛克******eria2' # 服务名称
    need_restart = False

    if action == 'add':
        if 'password' not in data:
            return jsonify({'error': 'Missing password for add action'}), 400
        password = data['password']
        userpass[username] = password
        need_restart = True
    elif action == 'delete':
        if username in userpass:
            userpass.pop(username, None)
            need_restart = True
        else:
            return jsonify({'error': 'User not found'}), 404
    elif action == 'query':
        password = userpass.get(username)
        if password is not None:
            return jsonify({username: password})
        else:
            return jsonify({'error': 'User not found'}), 404
    else:
        return jsonify({'error': 'Invalid action'}), 400

    # 对于非查询动作,更新配置文件并重启服务
    if need_restart:
        config['auth']['userpass'] = userpass
        write_config(config)
        if restart_service(service_name):
            if check_service_status(service_name):
                return jsonify({'success': True, 'message': 'Service restarted and running'})
            else:
                return jsonify({'error': 'Service restarted but not running'}), 500
        else:
            return jsonify({'error': 'Failed to restart service'}), 500

    return jsonify({'success': True})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

add功能,带验证

del功能

 

查询功能 

代码完成:chatgpt4 

相关推荐

  1. pythonaccess数据库增删

    2024-02-21 18:34:03       52 阅读
  2. vue3+ts实现表格增删(一)

    2024-02-21 18:34:03       49 阅读
  3. sqlite3 数据库增删

    2024-02-21 18:34:03       39 阅读
  4. FastAPI使用异步motor实现mongodb增删

    2024-02-21 18:34:03       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-21 18:34:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-21 18:34:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-21 18:34:03       82 阅读
  4. Python语言-面向对象

    2024-02-21 18:34:03       91 阅读

热门阅读

  1. 【达梦数据库】通过系统函数来配置sqllog

    2024-02-21 18:34:03       46 阅读
  2. 设计模式的另一种有趣理解

    2024-02-21 18:34:03       38 阅读
  3. HTTP常见状态码(持续更新中~~)

    2024-02-21 18:34:03       49 阅读
  4. 强化学习入门(Matlab2021b)-创建环境【3】

    2024-02-21 18:34:03       52 阅读
  5. 【c++入门】算得分

    2024-02-21 18:34:03       61 阅读
  6. 一起不能上某几个网站的事件处理

    2024-02-21 18:34:03       53 阅读
  7. 聊聊arthas的spring-boot-starter

    2024-02-21 18:34:03       42 阅读
  8. 【算法学习】搜索算法之深度优先搜索

    2024-02-21 18:34:03       46 阅读