|
|
|
from typing import Optional
|
|
|
|
|
|
|
|
from flask.views import MethodView
|
|
|
|
from flask_pydantic import validate
|
|
|
|
from flask import jsonify
|
|
|
|
from playhouse.shortcuts import model_to_dict
|
|
|
|
from flask_jwt_extended import jwt_required
|
|
|
|
|
|
|
|
import app.modules.db.sql as sql
|
|
|
|
import app.modules.roxywi.roxy as roxy
|
|
|
|
import app.modules.roxywi.common as roxywi_common
|
|
|
|
import app.modules.tools.smon as smon_mod
|
|
|
|
from app.middleware import get_user_params, page_for_admin, check_group
|
|
|
|
from app.modules.roxywi.class_models import (
|
|
|
|
BaseResponse, GroupQuery, SettingsRequest
|
|
|
|
)
|
|
|
|
from app.modules.common.common_classes import SupportClass
|
|
|
|
|
|
|
|
|
|
|
|
class SettingsView(MethodView):
|
|
|
|
methods = ['GET', 'POST']
|
|
|
|
decorators = [jwt_required(), get_user_params(), page_for_admin(level=2), check_group()]
|
|
|
|
|
|
|
|
@validate(query=GroupQuery)
|
|
|
|
def get(self, section: Optional[str], query: GroupQuery):
|
|
|
|
"""
|
|
|
|
Get Settings
|
|
|
|
---
|
|
|
|
tags:
|
|
|
|
- Settings
|
|
|
|
summary: Get settings of the application.
|
|
|
|
description: Returns either all settings or settings from the specified section.
|
|
|
|
parameters:
|
|
|
|
- name: section
|
|
|
|
in: path
|
|
|
|
description: The name of the settings section. Only 'main', 'smon', 'rabbitmq', 'ldap', 'monitoring', 'logs', 'haproxy', 'nginx', 'apache', 'keepalived' are allowed. If none get all settings.
|
|
|
|
required: true
|
|
|
|
type: string
|
|
|
|
enum: ['main', 'smon', 'rabbitmq', 'ldap', 'monitoring', 'logs', 'haproxy', 'nginx', 'apache', 'keepalived']
|
|
|
|
- name: group_id
|
|
|
|
in: query
|
|
|
|
description: This parameter is used only for the superAdmin role.
|
|
|
|
required: false
|
|
|
|
type: integer
|
|
|
|
produces:
|
|
|
|
- application/json
|
|
|
|
responses:
|
|
|
|
200:
|
|
|
|
description: OK
|
|
|
|
schema:
|
|
|
|
type: array
|
|
|
|
items:
|
|
|
|
type: object
|
|
|
|
properties:
|
|
|
|
desc:
|
|
|
|
type: string
|
|
|
|
description: The description of the setting.
|
|
|
|
example: "The path for NGINX logs"
|
|
|
|
group:
|
|
|
|
type: integer
|
|
|
|
description: The group number of the setting.
|
|
|
|
example: 1
|
|
|
|
param:
|
|
|
|
type: string
|
|
|
|
description: The parameter name of the setting.
|
|
|
|
example: "nginx_path_logs"
|
|
|
|
section:
|
|
|
|
type: string
|
|
|
|
description: The section name of the setting.
|
|
|
|
example: "nginx"
|
|
|
|
value:
|
|
|
|
type: string
|
|
|
|
description: The value of the setting.
|
|
|
|
example: "/var/log/nginx/"
|
|
|
|
"""
|
|
|
|
try:
|
|
|
|
group_id = SupportClass.return_group_id(query)
|
|
|
|
except Exception as e:
|
|
|
|
return roxywi_common.handle_json_exceptions(e, 'Cannot get Settings')
|
|
|
|
|
|
|
|
settings = sql.get_setting('', group_id=group_id, section=section, all=1)
|
|
|
|
|
|
|
|
return jsonify([model_to_dict(setting) for setting in settings])
|
|
|
|
|
|
|
|
@validate(body=SettingsRequest, query=GroupQuery)
|
|
|
|
def post(self, section: str, body: SettingsRequest, query: GroupQuery):
|
|
|
|
"""
|
|
|
|
Update settings
|
|
|
|
---
|
|
|
|
tags:
|
|
|
|
- Settings
|
|
|
|
summary: Create or update a setting.
|
|
|
|
description: Can be used to create a new setting or update an existing one in the specified section.
|
|
|
|
parameters:
|
|
|
|
- name: section
|
|
|
|
in: path
|
|
|
|
description: The name of the settings section. Only 'main', 'smon', 'rabbitmq', 'ldap', 'monitoring', 'logs', 'haproxy', 'nginx', 'apache', 'keepalived' are allowed. If none get all settings.
|
|
|
|
required: true
|
|
|
|
type: string
|
|
|
|
enum: ['main', 'smon', 'rabbitmq', 'ldap', 'monitoring', 'logs', 'haproxy', 'nginx', 'apache', 'keepalived']
|
|
|
|
- name: group_id
|
|
|
|
in: query
|
|
|
|
description: The parameter is used only for the superAdmin role.
|
|
|
|
required: false
|
|
|
|
type: integer
|
|
|
|
- name: body
|
|
|
|
in: body
|
|
|
|
description: Updated settings values.
|
|
|
|
required: true
|
|
|
|
schema:
|
|
|
|
type: object
|
|
|
|
properties:
|
|
|
|
param:
|
|
|
|
type: string
|
|
|
|
description: The parameter name of the setting.
|
|
|
|
value:
|
|
|
|
type: string
|
|
|
|
description: The new value for the setting.
|
|
|
|
example:
|
|
|
|
param: "some_param"
|
|
|
|
value: "some_value"
|
|
|
|
produces:
|
|
|
|
- application/json
|
|
|
|
responses:
|
|
|
|
201:
|
|
|
|
description: OK
|
|
|
|
"""
|
|
|
|
try:
|
|
|
|
val = body.value.replace('92', '/')
|
|
|
|
except Exception:
|
|
|
|
val = body.value
|
|
|
|
try:
|
|
|
|
group_id = SupportClass.return_group_id(query)
|
|
|
|
except Exception as e:
|
|
|
|
return roxywi_common.handle_json_exceptions(e, 'Cannot get Settings')
|
|
|
|
try:
|
|
|
|
sql.update_setting(body.param, val, group_id)
|
|
|
|
except Exception as e:
|
|
|
|
roxywi_common.handle_json_exceptions(e, 'Cannot update settings')
|
|
|
|
roxywi_common.logging('Roxy-WI server', f'The {body.param} setting has been changed to: {val}', roxywi=1, login=1)
|
|
|
|
|
|
|
|
if body.param == 'master_port':
|
|
|
|
try:
|
|
|
|
smon_mod.change_smon_port(int(val))
|
|
|
|
except Exception as e:
|
|
|
|
return f'{e}'
|
|
|
|
if body.param == 'license':
|
|
|
|
roxy.update_plan()
|
|
|
|
return BaseResponse().model_dump(mode='json'), 201
|