You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
4.1 KiB
119 lines
4.1 KiB
"""
|
|
REST handler for `aicommander` command
|
|
"""
|
|
|
|
import traceback
|
|
|
|
import cexc
|
|
from ai_commander.ai_commander_util import AICommanderUtil
|
|
from ai_commander.constants import (
|
|
PAYLOAD,
|
|
STATUS,
|
|
AI_COMMANDER_EDIT_CONFIG_CAPABILITIES,
|
|
AI_COMMANDER_READ_CONFIG_CAPABILITIES,
|
|
)
|
|
from util.searchinfo_util import searchinfo_from_request
|
|
|
|
logger = cexc.get_logger(__name__)
|
|
|
|
|
|
class Aicommander(object):
|
|
@classmethod
|
|
def handle_post(cls, request: dict, path_parts: list) -> dict:
|
|
"""
|
|
Handles the POST request to update AICommander service settings.
|
|
|
|
Args:
|
|
request (dict):
|
|
The HTTP request containing the payload with updated configuration.
|
|
path_parts (list):
|
|
The list of path parts from the request URL.
|
|
|
|
Returns:
|
|
dict:
|
|
A response dictionary containing:
|
|
- 'payload': A message indicating success or failure.
|
|
- 'status': HTTP status code (200 for success, 403 for unauthorized access, 500 for errors).
|
|
"""
|
|
searchinfo = searchinfo_from_request(request)
|
|
is_user_eligible = AICommanderUtil(searchinfo=searchinfo).check_user_role_eligibility(
|
|
required_capabilities=AI_COMMANDER_EDIT_CONFIG_CAPABILITIES
|
|
)
|
|
if not is_user_eligible:
|
|
return {
|
|
PAYLOAD: {
|
|
'error_message': 'User is not eligible to update the AICommander Connection Management Settings'
|
|
},
|
|
STATUS: 403,
|
|
}
|
|
|
|
try:
|
|
updated_config = AICommanderUtil(searchinfo).update_conf_file(request[PAYLOAD])
|
|
|
|
return {
|
|
PAYLOAD: {
|
|
'message': 'Service settings updated successfully',
|
|
'updated_config': updated_config, # Return updated config
|
|
'status': 'success',
|
|
},
|
|
STATUS: 200,
|
|
}
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error updating configuration: {str(traceback.format_exc())}")
|
|
return {
|
|
PAYLOAD: {'error_message': "Failed to update service settings."},
|
|
STATUS: 500,
|
|
}
|
|
|
|
@classmethod
|
|
def handle_get(cls, request: dict, path_parts: list) -> dict:
|
|
"""
|
|
Handles the GET request to retrieve AICommander service settings.
|
|
|
|
Args:
|
|
request (dict):
|
|
The HTTP request object.
|
|
path_parts (list):
|
|
The list of path parts from the request URL.
|
|
|
|
Returns:
|
|
dict:
|
|
A response dictionary containing:
|
|
- 'payload': The AICommander configuration or an error message.
|
|
- 'status': HTTP status code (200 for success, 403 for unauthorized access).
|
|
"""
|
|
try:
|
|
searchinfo = searchinfo_from_request(request)
|
|
is_user_eligible = AICommanderUtil(
|
|
searchinfo=searchinfo
|
|
).check_user_role_eligibility(
|
|
required_capabilities=AI_COMMANDER_EDIT_CONFIG_CAPABILITIES
|
|
)
|
|
if is_user_eligible:
|
|
return {
|
|
PAYLOAD: AICommanderUtil(searchinfo).get_conf(is_token_required=False),
|
|
STATUS: 200,
|
|
}
|
|
|
|
elif AICommanderUtil(searchinfo=searchinfo).check_user_role_eligibility(
|
|
required_capabilities=AI_COMMANDER_READ_CONFIG_CAPABILITIES
|
|
):
|
|
return {
|
|
PAYLOAD: AICommanderUtil(searchinfo).get_conf(is_token_required=False),
|
|
STATUS: 200,
|
|
}
|
|
else:
|
|
return {
|
|
PAYLOAD: {
|
|
'error_message': 'User is not eligible to view the AICommander Connection Management Settings'
|
|
},
|
|
STATUS: 403,
|
|
}
|
|
except Exception as e:
|
|
logger.error(f"Error retrieving configuration: {str(traceback.format_exc())}")
|
|
return {
|
|
PAYLOAD: {'error_message': "Failed to retrieve service settings"},
|
|
STATUS: 500,
|
|
}
|