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

news2025/1/11 2:55:00

 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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1459964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

先进电机技术——步进电机与伺服电机

一、步进电机 步进电机是一种特殊类型的电动机,它的工作方式是将输入的电脉冲信号转换成精确的机械运动——通常是转子的角位移或直线移动。每接收到一个电脉冲信号,步进电机内部的定子绕组按顺序通电,产生磁场变化,使得与之相互…

基于物联网智慧公厕的多功能城市智慧驿站

在现代城市发展中,智慧化已经成为了一个不可或缺的趋势。而多功能城市智慧驿站,作为智慧城市建设的一部分,以物联网智慧公厕为基础,集合了诸多功能于一身,成为了城市中不容忽视的存在。多功能城市智慧驿站也称为轻松的…

复高斯分布的随机变量的模方的分布

文章目录 复高斯分布的随机变量的模方的分布问题的源头矩阵服从复高斯分布向量服从复高斯分布 复高斯分布的随机变量的模方的分布 已知 X ∼ C N ( μ , Σ ) X \sim \mathcal{C N}(\boldsymbol{\mu}, \boldsymbol{\Sigma}) X∼CN(μ,Σ) 则 ∥ X ∥ 2 \|X\|^2 ∥X∥2的分布为…

c编译器学习04:chibicc的commits记录说明及所有代码的压缩包

整理commits记录的出发点 似乎没有更好的方法去学习代码。 最终决定听作者的建议,按照commits记录去看代码。 https://github.com/rui314/chibicc 页面316个commits实际对应295个版本,估计是有几个含有多次bug修正。 commits记录表格(图) commits记录…

Global Gamers Challenge | 与 Flutter 一起保护地球

作者 / Kelvin Boateng 我们知道 Flutter 开发者热爱挑战,因此我们很高兴地宣布,新一轮的 Flutter 挑战赛来了! 挑战https://flutter.cn/events/puzzle-hack Global Gamers Challenge 是一项为期 8 周的比赛,参赛者需要设计、构建…

搭建SVN服务端和客户端

参考博客: https://zhuanlan.zhihu.com/p/428552058 先下载这两个文件: 链接: 链接:https://pan.baidu.com/s/1_1v_jKm3h7ZDSYEsgYyovA?pwd11ku 提取码:11ku –来自百度网盘超级会员V5的分享 第一个压缩包里有客户端…

Idea中使用git将多次提交记录合并成一次提交记录

一、查看Idea中的提交记录 查看Idea中的提交记录,我们希望将新增了bbb.txt、新增了ccc.txt、新增了ddd.txt,这三次提交记录合并成一次提交记录。 二、使用Interactively Rebase from Here进行合并 2.1、把鼠标放在新增了bbb.txt这次提交记录上并右键单击 把鼠标放…

一次平平无奇的 Oracle 注入

在某次项目中,首先是发现注入点,数据库是Oracle,利用方式是时间盲注: 因为需要具体数据,所以要深入利用,手工肯定不方便,所以直接上 Sqlmap: Sqlmap也可以扫出该注入点,但想要进一步…

Python开发户型图编辑器-2D/3D户型图展示

在现代家居设计中,户型图是不可或缺的工具,它为设计师和业主提供了一个直观的展示和规划空间的方式。然而,传统的户型图编辑软件往往复杂难用,限制了设计师的创作灵感。我们为您带来了一款全新的Python开发的户型图编辑器&#xf…

线上剧本杀APP小程序开发:开启全新的推理娱乐体验

随着数字化时代的到来,移动应用程序已经成为人们日常生活中不可或缺的一部分。在这个背景下,线上剧本杀APP小程序开发应运而生,为推理爱好者们提供了一种全新的娱乐方式。作为一家软件开发公司,我们很高兴为项目方提供有关线上剧本…

说一下 JVM 运行时数据区 ?

目录 一、程序计数器(Program Counter Register) 二、Java 虚拟机栈(Java Virtual Machine Stacks) 三、本地方法栈(Native Method Stack) 四、Java 堆(Java Heap) 五、方法区&…

maven插件exec-maven-plugin、maven-antrun-plugin使用详解

文章目录 前言一、exec-maven-plugin使用exec:java的使用idgoalsphaseconfigurationexec:exec的使用使用exec-maven-plugin来构建前端项目直接用mvn命令来使用exec-maven-plugin插件 二、maven-antrun-plugin使用echo打印功能拷贝文件拷贝文件夹ftp/scp/sshexec 总结 前言 在使…

数据结构链表力扣例题AC(3)——代码以及思路记录

160. 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 AC写法一 struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {//思…

http前生今世

HTTP/0.9,仅支持GET方法,并且响应中没有HTTP头信息,只有文档内容。 HTTP/1.0增加了对POST方法、状态码、HTTP头信息等的支持,这一版本也是广泛应用的历史性版本。 HTTP/1.1引入了持久连接(Persistent Connections&…

信号系统之连续信号处理

1 Delta 函数 连续信号可以分解为缩放和移位的增量函数,就像处理离散信号一样。不同之处在于,连续 delta 函数比其离散函数复杂得多,在数学上也抽象得多。我们不是用它是什么来定义连续 delta 函数,而是用它所具有的特征来定义它…

Python Web开发记录 Day1:HTML

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、HTML1、前端引入和HTML标签①前端引入②浏览…

公网对讲机可以和专网对讲机互通吗?

公网对讲机借助现有的4G/5G公网环境,能够承载更为丰富的宽带对讲功能,因而广受用户喜爱,其应用场景十分广泛。但在许多行业中,专网对讲机因其不可替代性,被视为关键通信应用,许多用户无法将其替换为公网对讲…

基于Web的网文管理系统

项目:基于Web的网文管理系统 伴随着时代的更替,我国人民的生活水平在不断提高,同时对生活娱乐的需求也在不断加大,我们在日常生活中通常会以多种方式娱乐自己,而阅读网络小说就是其中一种方式。随着计算机技术的成熟&a…

合金电阻与普通低阻值电阻的区别有什么区别

合金电阻与普通低阻值电阻的主要区别有以下几个方面: 1. 材料不同:合金电阻中使用的材料一般是金属合金,如尼龙合金、镍铬合金、钨合金等,而普通低阻值电阻使用的材料一般是金属或碳材料。 2. 特性不同:合金电阻具有较…

09MARL深度强化学习policy gradient

文章目录 前言1、Multi-Agent Policy Gradient Theorem2、Centralised State-Value Critics2、Centralised Action-Value Critics 前言 Independent learning算法当中每个智能体看待其他智能体为环境的一部分,加剧了环境非平稳性,而CTDE框架的算法能够降…