mirror of
https://github.com/Pardus-LiderAhenk/ahenk
synced 2024-12-23 22:42:17 +03:00
get active policies from db and process them
This commit is contained in:
parent
550cad1804
commit
75d818b6a1
8 changed files with 248 additions and 20 deletions
|
@ -92,7 +92,6 @@ class AhenkDbService(object):
|
||||||
sql += orderby
|
sql += orderby
|
||||||
|
|
||||||
self.cursor.execute(sql)
|
self.cursor.execute(sql)
|
||||||
|
|
||||||
rows = self.cursor.fetchall()
|
rows = self.cursor.fetchall()
|
||||||
return rows
|
return rows
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
|
@ -11,6 +11,8 @@ import subprocess
|
||||||
|
|
||||||
from base.Scope import Scope
|
from base.Scope import Scope
|
||||||
from base.model.Policy import Policy
|
from base.model.Policy import Policy
|
||||||
|
from base.model.PolicyBean import PolicyBean
|
||||||
|
from base.model.ProfileBean import ProfileBean
|
||||||
from base.model.Task import Task
|
from base.model.Task import Task
|
||||||
from base.model.MessageType import MessageType
|
from base.model.MessageType import MessageType
|
||||||
|
|
||||||
|
@ -29,7 +31,7 @@ class ExecutionManager(object):
|
||||||
self.logger = scope.getLogger()
|
self.logger = scope.getLogger()
|
||||||
self.db_service = scope.getDbService()
|
self.db_service = scope.getDbService()
|
||||||
|
|
||||||
#TODO DEBUG
|
# TODO DEBUG
|
||||||
self.event_manager.register_event(str(MessageType.EXECUTE_SCRIPT), self.execute_script)
|
self.event_manager.register_event(str(MessageType.EXECUTE_SCRIPT), self.execute_script)
|
||||||
self.event_manager.register_event(str(MessageType.REQUEST_FILE), self.request_file)
|
self.event_manager.register_event(str(MessageType.REQUEST_FILE), self.request_file)
|
||||||
self.event_manager.register_event(str(MessageType.MOVE_FILE), self.move_file)
|
self.event_manager.register_event(str(MessageType.MOVE_FILE), self.move_file)
|
||||||
|
@ -41,7 +43,7 @@ class ExecutionManager(object):
|
||||||
|
|
||||||
policy = Policy(json.loads(arg))
|
policy = Policy(json.loads(arg))
|
||||||
# TODO get username and machine uid
|
# TODO get username and machine uid
|
||||||
username = 'lider'
|
username = policy.username
|
||||||
machine_uid = self.db_service.select_one_result('registration', 'jid', 'registered=1')
|
machine_uid = self.db_service.select_one_result('registration', 'jid', 'registered=1')
|
||||||
|
|
||||||
ahenk_policy_ver = self.db_service.select_one_result('policy', 'version', 'type = \'A\'')
|
ahenk_policy_ver = self.db_service.select_one_result('policy', 'version', 'type = \'A\'')
|
||||||
|
@ -90,7 +92,52 @@ class ExecutionManager(object):
|
||||||
# TODO check plugins
|
# TODO check plugins
|
||||||
print("but first need these plugins:" + str(missing_plugins))
|
print("but first need these plugins:" + str(missing_plugins))
|
||||||
|
|
||||||
self.task_manager.addPolicy(policy)
|
self.task_manager.addPolicy(self.get_active_policies(username))
|
||||||
|
|
||||||
|
def get_active_policies(self, username):
|
||||||
|
|
||||||
|
"""
|
||||||
|
self.ahenk_policy_version = ahenk_policy_version
|
||||||
|
self.user_policy_version = user_policy_version
|
||||||
|
self.ahenk_profiles = ahenk_profiles
|
||||||
|
self.user_profiles = user_profiles
|
||||||
|
self.timestamp = timestamp
|
||||||
|
self.username = username
|
||||||
|
|
||||||
|
|
||||||
|
self.ahenk_execution_id = ahenk_execution_id
|
||||||
|
self.user_execution_id = user_execution_id
|
||||||
|
"""
|
||||||
|
|
||||||
|
user_policy = self.db_service.select('policy', ['id', 'version', 'name'], ' type=\'U\' and name=\'' + username + '\'')
|
||||||
|
ahenk_policy = self.db_service.select('policy', ['id', 'version'], ' type=\'A\' ')
|
||||||
|
|
||||||
|
policy = PolicyBean(username=username)
|
||||||
|
|
||||||
|
if len(user_policy) > 0:
|
||||||
|
user_policy_version = user_policy[0][0]
|
||||||
|
policy.set_user_policy_version(user_policy_version)
|
||||||
|
user_profiles = self.db_service.select('profile', ['id', 'create_date', 'label', 'description', 'overridable', 'active', 'deleted', 'profile_data', 'modify_date', 'plugin'], ' id=' + str(user_policy_version) + ' ')
|
||||||
|
|
||||||
|
arr_profiles = []
|
||||||
|
if len(user_profiles) > 0:
|
||||||
|
for profile in user_profiles:
|
||||||
|
arr_profiles.append(ProfileBean(profile[0], profile[1], profile[2], profile[3], profile[4], profile[5], profile[6], profile[7], profile[8], profile[9]))
|
||||||
|
policy.set_user_profiles(arr_profiles)
|
||||||
|
|
||||||
|
if len(ahenk_policy) > 0:
|
||||||
|
ahenk_policy_version = ahenk_policy[0][0]
|
||||||
|
policy.set_ahenk_policy_version(ahenk_policy_version)
|
||||||
|
ahenk_profiles = self.db_service.select('profile', ['id', 'create_date', 'label', 'description', 'overridable', 'active', 'deleted', 'profile_data', 'modify_date', 'plugin'], ' id=' + str(ahenk_policy_version) + ' ')
|
||||||
|
arr_profiles = []
|
||||||
|
if len(ahenk_profiles) > 0:
|
||||||
|
for profile in user_profiles:
|
||||||
|
arr_profiles.append(ProfileBean(profile[0], profile[1], profile[2], profile[3], profile[4], profile[5], profile[6], profile[7], profile[8], profile[9]))
|
||||||
|
policy.set_ahenk_profiles(arr_profiles)
|
||||||
|
|
||||||
|
print("")
|
||||||
|
return policy
|
||||||
|
|
||||||
|
|
||||||
def get_installed_plugins(self):
|
def get_installed_plugins(self):
|
||||||
plugins = self.db_service.select('plugin', ['name', 'version'])
|
plugins = self.db_service.select('plugin', ['name', 'version'])
|
||||||
|
|
|
@ -30,7 +30,7 @@ class Policy(object):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def timestamp(self):
|
def timestamp(self):
|
||||||
self.request['timestamp']
|
return self.policy['timestamp']
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def user_profiles(self):
|
def user_profiles(self):
|
||||||
|
@ -42,6 +42,11 @@ class Policy(object):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def username(self):
|
||||||
|
return self.policy['username']
|
||||||
|
|
||||||
|
# TODO result mesajı dönerken döndür
|
||||||
@property
|
@property
|
||||||
def ahenk_execution_id(self):
|
def ahenk_execution_id(self):
|
||||||
return self.policy['agentCommandExecutionId']
|
return self.policy['agentCommandExecutionId']
|
||||||
|
@ -50,7 +55,6 @@ class Policy(object):
|
||||||
def user_execution_id(self):
|
def user_execution_id(self):
|
||||||
return self.policy['userCommandExecutionId']
|
return self.policy['userCommandExecutionId']
|
||||||
|
|
||||||
|
|
||||||
def to_string(self):
|
def to_string(self):
|
||||||
return str(self.policy)
|
return str(self.policy)
|
||||||
|
|
||||||
|
|
63
opt/ahenk/base/model/PolicyBean.py
Normal file
63
opt/ahenk/base/model/PolicyBean.py
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Author: Volkan Şahin <volkansah.in> <bm.volkansahin@gmail.com>
|
||||||
|
|
||||||
|
|
||||||
|
class PolicyBean(object):
|
||||||
|
"""docstring for PolicyBean"""
|
||||||
|
|
||||||
|
def __init__(self, ahenk_policy_version=None, user_policy_version=None, ahenk_profiles=None, user_profiles=None, timestamp=None, username=None, ahenk_execution_id=None, user_execution_id=None):
|
||||||
|
|
||||||
|
self.ahenk_policy_version = ahenk_policy_version
|
||||||
|
self.user_policy_version = user_policy_version
|
||||||
|
self.ahenk_profiles = ahenk_profiles
|
||||||
|
self.user_profiles = user_profiles
|
||||||
|
self.timestamp = timestamp
|
||||||
|
self.username = username
|
||||||
|
self.ahenk_execution_id = ahenk_execution_id
|
||||||
|
self.user_execution_id = user_execution_id
|
||||||
|
|
||||||
|
def get_ahenk_policy_version(self):
|
||||||
|
return self.ahenk_policy_version
|
||||||
|
|
||||||
|
def set_ahenk_policy_version(self, ahenk_policy_version):
|
||||||
|
self.ahenk_policy_version = ahenk_policy_version
|
||||||
|
|
||||||
|
def get_user_policy_version(self):
|
||||||
|
return self.user_policy_version
|
||||||
|
|
||||||
|
def set_user_policy_version(self, user_policy_version):
|
||||||
|
self.user_policy_version = user_policy_version
|
||||||
|
|
||||||
|
def get_ahenk_profiles(self):
|
||||||
|
return self.ahenk_profiles
|
||||||
|
|
||||||
|
def set_ahenk_profiles(self, ahenk_profiles):
|
||||||
|
self.ahenk_profiles = ahenk_profiles
|
||||||
|
|
||||||
|
def get_user_profiles(self):
|
||||||
|
return self.user_profiles
|
||||||
|
|
||||||
|
def set_user_profiles(self, user_profiles):
|
||||||
|
self.user_profiles = user_profiles
|
||||||
|
|
||||||
|
def get_timestamp(self):
|
||||||
|
return self.timestamp
|
||||||
|
|
||||||
|
def set_timestamp(self, timestamp):
|
||||||
|
self.timestamp = timestamp
|
||||||
|
|
||||||
|
def get_username(self):
|
||||||
|
return self.username
|
||||||
|
|
||||||
|
def set_username(self, username):
|
||||||
|
self.username = username
|
||||||
|
|
||||||
|
def get_ahenk_execution_id(self):
|
||||||
|
return self.ahenk_execution_id
|
||||||
|
|
||||||
|
def set_ahenk_execution_id(self, ahenk_execution_id):
|
||||||
|
self.ahenk_execution_id = ahenk_execution_id
|
||||||
|
|
||||||
|
def set_user_execution_id(self, user_execution_id):
|
||||||
|
self.user_execution_id = user_execution_id
|
|
@ -11,6 +11,7 @@ class Profile(object):
|
||||||
|
|
||||||
def __init__(self, message):
|
def __init__(self, message):
|
||||||
self.profile = message
|
self.profile = message
|
||||||
|
self.username = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def id(self):
|
def id(self):
|
||||||
|
@ -61,3 +62,9 @@ class Profile(object):
|
||||||
@property
|
@property
|
||||||
def obj_name(self):
|
def obj_name(self):
|
||||||
return "PROFILE"
|
return "PROFILE"
|
||||||
|
|
||||||
|
def get_username(self):
|
||||||
|
return self.username
|
||||||
|
|
||||||
|
def set_username(self, username):
|
||||||
|
self.username = username
|
||||||
|
|
89
opt/ahenk/base/model/ProfileBean.py
Normal file
89
opt/ahenk/base/model/ProfileBean.py
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Author: Volkan Şahin <volkansah.in> <bm.volkansahin@gmail.com>
|
||||||
|
import json
|
||||||
|
|
||||||
|
from base.model.Plugin import Plugin
|
||||||
|
|
||||||
|
|
||||||
|
class ProfileBean(object):
|
||||||
|
"""docstring for Profile"""
|
||||||
|
|
||||||
|
def __init__(self, p_id, create_date, label, description, overridable, active, deleted, profile_data, modify_date, plugin, username=None):
|
||||||
|
self.id = p_id
|
||||||
|
self.create_date = create_date
|
||||||
|
self.modify_date = modify_date
|
||||||
|
self.label = label
|
||||||
|
self.description = description
|
||||||
|
self.overridable = overridable
|
||||||
|
self.active = active
|
||||||
|
self.deleted = deleted
|
||||||
|
self.profile_data = profile_data
|
||||||
|
self.plugin = Plugin(plugin)
|
||||||
|
self.username = username
|
||||||
|
|
||||||
|
def get_id(self):
|
||||||
|
return self.id
|
||||||
|
|
||||||
|
def set_id(self, p_id):
|
||||||
|
self.id = p_id
|
||||||
|
|
||||||
|
def get_create_date(self):
|
||||||
|
return self.create_date
|
||||||
|
|
||||||
|
def set_create_date(self, create_date):
|
||||||
|
self.create_date = create_date
|
||||||
|
|
||||||
|
def get_modify_dateself(self):
|
||||||
|
return self.modify_date
|
||||||
|
|
||||||
|
def set_modify_date(self, modify_date):
|
||||||
|
self.modify_date = modify_date
|
||||||
|
|
||||||
|
def get_label(self):
|
||||||
|
return self.label
|
||||||
|
|
||||||
|
def set_label(self, label):
|
||||||
|
self.label = label
|
||||||
|
|
||||||
|
def get_description(self):
|
||||||
|
return self.modify_date
|
||||||
|
|
||||||
|
def set_description(self, description):
|
||||||
|
self.description = description
|
||||||
|
|
||||||
|
def get_overridable(self):
|
||||||
|
return self.overridable
|
||||||
|
|
||||||
|
def set_overridable(self, overridable):
|
||||||
|
self.overridable = overridable
|
||||||
|
|
||||||
|
def get_active(self):
|
||||||
|
return self.active
|
||||||
|
|
||||||
|
def set_active(self, active):
|
||||||
|
self.active = active
|
||||||
|
|
||||||
|
def get_deleted(self):
|
||||||
|
return self.deleted
|
||||||
|
|
||||||
|
def set_deleted(self, deleted):
|
||||||
|
self.deleted = deleted
|
||||||
|
|
||||||
|
def get_profile_data(self):
|
||||||
|
return self.profile_data
|
||||||
|
|
||||||
|
def set_profile_data(self, profile_data):
|
||||||
|
self.profile_data = profile_data
|
||||||
|
|
||||||
|
def get_plugin(self):
|
||||||
|
return self.plugin
|
||||||
|
|
||||||
|
def set_plugin(self, plugin):
|
||||||
|
self.plugin = Plugin(plugin)
|
||||||
|
|
||||||
|
def get_username(self):
|
||||||
|
return self.username
|
||||||
|
|
||||||
|
def set_username(self, username):
|
||||||
|
self.username = username
|
|
@ -2,7 +2,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Author: İsmail BAŞARAN <ismail.basaran@tubitak.gov.tr> <basaran.ismaill@gmail.com>
|
# Author: İsmail BAŞARAN <ismail.basaran@tubitak.gov.tr> <basaran.ismaill@gmail.com>
|
||||||
import threading
|
import threading
|
||||||
|
import subprocess
|
||||||
from base.Scope import Scope
|
from base.Scope import Scope
|
||||||
from base.model.Response import Response
|
from base.model.Response import Response
|
||||||
from base.model.MessageType import MessageType
|
from base.model.MessageType import MessageType
|
||||||
|
@ -23,6 +23,9 @@ class Context(object):
|
||||||
def empty_data(self):
|
def empty_data(self):
|
||||||
self.data = {}
|
self.data = {}
|
||||||
|
|
||||||
|
def execute(self, command):
|
||||||
|
return subprocess.call(command, shell=True)
|
||||||
|
|
||||||
|
|
||||||
class Plugin(threading.Thread):
|
class Plugin(threading.Thread):
|
||||||
"""
|
"""
|
||||||
|
@ -70,10 +73,12 @@ class Plugin(threading.Thread):
|
||||||
profile_data = item_obj.profile_data
|
profile_data = item_obj.profile_data
|
||||||
policy_module = Scope.getInstance().getPluginManager().findPolicyModule(plugin_name)
|
policy_module = Scope.getInstance().getPluginManager().findPolicyModule(plugin_name)
|
||||||
|
|
||||||
|
self.context.put('username', item_obj.get_username())
|
||||||
|
|
||||||
policy_module.handle_policy(profile_data, self.context)
|
policy_module.handle_policy(profile_data, self.context)
|
||||||
|
|
||||||
#TODO Message Code keep
|
#TODO Message Code keep
|
||||||
response = Response(type=MessageType.POLICY_STATUS, id=item_obj.id, code=MessageCode.POLICY_PROCESSED, message='__message__', data=self.context.get('data'), content_type=self.context.get('content_type'), execution_id='get_execution_id')
|
response = Response(type=self.context.get('message_type'), id=item_obj.id, code=self.context.get('message_code'), message=self.context.get('message'), data=self.context.get('data'), content_type=self.context.get('content_type'), execution_id='get_execution_id')
|
||||||
#self.response_queue.put(self.messaging.response_msg(response)) #TODO DEBUG
|
#self.response_queue.put(self.messaging.response_msg(response)) #TODO DEBUG
|
||||||
Scope.getInstance().getMessager().send_direct_message(self.messaging.response_msg(response))#TODO REMOVE
|
Scope.getInstance().getMessager().send_direct_message(self.messaging.response_msg(response))#TODO REMOVE
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ class PluginManager(object):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error('[PluginManager] Exception occurred when reloading plugins ' + str(e))
|
self.logger.error('[PluginManager] Exception occurred when reloading plugins ' + str(e))
|
||||||
|
|
||||||
def findPolicyModule(self,plugin_name):
|
def findPolicyModule(self, plugin_name):
|
||||||
location = os.path.join(self.configManager.get("PLUGIN", "pluginFolderPath"), plugin_name)
|
location = os.path.join(self.configManager.get("PLUGIN", "pluginFolderPath"), plugin_name)
|
||||||
if os.path.isdir(location) and "policy.py" in os.listdir(location):
|
if os.path.isdir(location) and "policy.py" in os.listdir(location):
|
||||||
info = imp.find_module("policy", [location])
|
info = imp.find_module("policy", [location])
|
||||||
|
@ -92,17 +92,30 @@ class PluginManager(object):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def processPolicy(self, policy):
|
def processPolicy(self, policy):
|
||||||
#TODO user and ahenk
|
#TODO do you need username in profile?
|
||||||
user_profiles = policy.ahenk_profiles
|
|
||||||
for profile in user_profiles:
|
username = policy.username
|
||||||
try:
|
ahenk_profiles = policy.ahenk_profiles
|
||||||
plugin = profile.plugin
|
user_profiles = policy.user_profiles
|
||||||
plugin_name = plugin.name
|
|
||||||
if plugin_name in self.pluginQueueDict:
|
if ahenk_profiles is not None:
|
||||||
self.pluginQueueDict[plugin_name].put(profile, 1)
|
for profile in ahenk_profiles:
|
||||||
except Exception as e:
|
self.process_profile(profile)
|
||||||
print("Exception occured..")
|
|
||||||
self.logger.error("Policy profile not processed " + str(profile.plugin.name))
|
if user_profiles is not None:
|
||||||
|
for profile in user_profiles:
|
||||||
|
profile.set_username(username)
|
||||||
|
self.process_profile(profile)
|
||||||
|
|
||||||
|
def process_profile(self, profile):
|
||||||
|
try:
|
||||||
|
plugin = profile.get_plugin()
|
||||||
|
plugin_name = plugin.name
|
||||||
|
if plugin_name in self.pluginQueueDict:
|
||||||
|
self.pluginQueueDict[plugin_name].put(profile, 1)
|
||||||
|
except Exception as e:
|
||||||
|
print("Exception occured..")
|
||||||
|
self.logger.error("Policy profile not processed " + str(profile.plugin.name))
|
||||||
|
|
||||||
def checkPluginExists(self, plugin_name, version=None):
|
def checkPluginExists(self, plugin_name, version=None):
|
||||||
|
|
||||||
|
@ -127,3 +140,4 @@ class PluginManager(object):
|
||||||
|
|
||||||
def printQueueSize(self):
|
def printQueueSize(self):
|
||||||
print("size " + str(len(self.pluginQueueDict)))
|
print("size " + str(len(self.pluginQueueDict)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue