mirror of
https://github.com/Pardus-LiderAhenk/ahenk
synced 2024-12-25 08:32:21 +03:00
131 lines
6.8 KiB
Python
131 lines
6.8 KiB
Python
|
#!/usr/bin/python3
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
# Author:Mine DOGAN <mine.dogan@agem.com.tr>
|
|||
|
# Author:Tuncay ÇOLAK <tuncay.colak@tubitak.gov.tr>
|
|||
|
|
|||
|
import json
|
|||
|
from pathlib import Path
|
|||
|
|
|||
|
from base.plugin.abstract_plugin import AbstractPlugin
|
|||
|
|
|||
|
class GetUsers(AbstractPlugin):
|
|||
|
def __init__(self, task, context):
|
|||
|
super(GetUsers, self).__init__()
|
|||
|
self.task = task
|
|||
|
self.context = context
|
|||
|
self.logger = self.get_logger()
|
|||
|
self.message_code = self.get_message_code()
|
|||
|
self.script = '/bin/bash ' + self.Ahenk.plugins_path() + 'local-user/scripts/{0}'
|
|||
|
|
|||
|
self.command_users = 'awk -F: \'{print $1 ":" $6 ":" $7}\' /etc/passwd | grep /bin/bash'
|
|||
|
self.command_user_groups = 'groups {}'
|
|||
|
self.command_not_active = 'egrep \':\!\' /etc/shadow |awk -F: \'{print $1}\''
|
|||
|
self.command_get_groups = 'cut -d: -f1 /etc/group'
|
|||
|
self.xfce4_session = "/usr/bin/xfce4-session"
|
|||
|
self.gnome_session = "/usr/bin/gnome-session"
|
|||
|
self.desktop_env = None
|
|||
|
self.logger.debug('Parameters were initialized.')
|
|||
|
|
|||
|
def handle_task(self):
|
|||
|
|
|||
|
try:
|
|||
|
user_list = []
|
|||
|
result_code, p_out, p_err = self.execute(self.command_users)
|
|||
|
lines = p_out.split('\n')
|
|||
|
lines.pop()
|
|||
|
|
|||
|
self.desktop_env = self.get_desktop_env()
|
|||
|
self.logger.info("Get desktop environment is {0}".format(self.desktop_env))
|
|||
|
|
|||
|
for line in lines:
|
|||
|
detail = line.split(':')
|
|||
|
|
|||
|
result_code, p_out, p_err = self.execute(self.command_user_groups.format(str(detail[0]).strip()))
|
|||
|
groups = p_out.split(':')
|
|||
|
groups[1] = str(groups[1]).strip()
|
|||
|
groups[1] = groups[1].replace("'", "").replace(" ", ", ")
|
|||
|
is_active = 'true'
|
|||
|
result_code, p_out, p_err = self.execute(self.command_not_active)
|
|||
|
users = p_out.split('\n')
|
|||
|
|
|||
|
if str(detail[0]).strip() in users:
|
|||
|
is_active = 'false'
|
|||
|
|
|||
|
self.desktop_path = ''
|
|||
|
if self.is_exist("{0}/Masaüstü/".format(str(detail[1]).strip())):
|
|||
|
self.desktop_path = "{0}/Masaüstü/".format(str(detail[1]).strip())
|
|||
|
self.logger.debug("Desktop path for user '{0}' : {1}".format(str(detail[0]).strip(), self.desktop_path))
|
|||
|
elif self.is_exist("{0}/Desktop/".format(str(detail[1]).strip())):
|
|||
|
self.desktop_path = "{0}/Desktop/".format(str(detail[1]).strip())
|
|||
|
self.logger.debug("Desktop path for user '{0}' : {1}".format(str(detail[0]).strip(), self.desktop_path))
|
|||
|
else:
|
|||
|
self.logger.debug(
|
|||
|
'Desktop write permission could not get. Desktop path not found for user "{0}"'.format(
|
|||
|
str(detail[0]).strip()))
|
|||
|
|
|||
|
result_code, p_out, p_err = self.execute(' stat -c "%a %n" ' + self.desktop_path)
|
|||
|
self.logger.debug('sudo stat -c "%a %n" ' + self.desktop_path)
|
|||
|
is_desktop_write_permission_exists = 'false'
|
|||
|
if result_code == 0:
|
|||
|
permission_codes = p_out.split()
|
|||
|
self.logger.debug("permission codes : " + str(permission_codes))
|
|||
|
if len(permission_codes) > 0:
|
|||
|
permission_code = permission_codes[0].strip()
|
|||
|
self.logger.debug("permission code is : " + permission_code)
|
|||
|
if permission_code == "775":
|
|||
|
is_desktop_write_permission_exists = 'true'
|
|||
|
|
|||
|
if self.desktop_env == "xfce":
|
|||
|
is_kiosk_mode_on = 'false'
|
|||
|
self.logger.debug('Kiosk mode info will be taken')
|
|||
|
file_xfce4_panel = Path("/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml")
|
|||
|
if not file_xfce4_panel.exists():
|
|||
|
self.logger.error(
|
|||
|
'PANEL XML NOT FOUND COPY')
|
|||
|
source_path = "{0}local-user/panelconf/xfce4-panel.xml".format(self.Ahenk.plugins_path())
|
|||
|
self.logger.info("----->>>>" + source_path)
|
|||
|
self.copy_file(source_path, "/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml")
|
|||
|
self.logger.error(
|
|||
|
'FILE IS COPIED')
|
|||
|
result_code, p_out, p_err = self.execute(self.script.format('find_locked_users.sh'), result=True)
|
|||
|
if result_code != 0:
|
|||
|
self.logger.error(
|
|||
|
'Error occurred while finding locked users.')
|
|||
|
if p_out:
|
|||
|
self.logger.debug('locked users are {0}'.format(str(p_out)))
|
|||
|
locked_users = p_out.strip().split(';')
|
|||
|
# self.logger.debug("user is " + str(detail[0]).strip())
|
|||
|
# self.logger.debug("locked users are " + str(locked_users))
|
|||
|
if str(detail[0]).strip() in locked_users:
|
|||
|
is_kiosk_mode_on = 'true'
|
|||
|
self.logger.debug('Desktop environ is XFCE. Kiosk mode info is taken')
|
|||
|
else:
|
|||
|
is_kiosk_mode_on = "true"
|
|||
|
self.logger.info("Desktop environ is GNOME. Return kiok mode TRUE")
|
|||
|
|
|||
|
user = {'user': str(detail[0]).strip(), 'groups': groups[1], 'home': detail[1], 'is_active': is_active, 'is_desktop_write_permission_exists': is_desktop_write_permission_exists, 'is_kiosk_mode_on': is_kiosk_mode_on}
|
|||
|
user_list.append(user)
|
|||
|
self.logger.debug('user: {0}, groups: {1}, home: {2}, is_active: {3}'.format(str(detail[0]).strip(), groups[1], detail[1], is_active))
|
|||
|
self.logger.info('Local User task is handled successfully')
|
|||
|
#
|
|||
|
# get all groups
|
|||
|
#
|
|||
|
result_code, p_out, p_err = self.execute(self.command_get_groups)
|
|||
|
all_groups = p_out.split('\n')
|
|||
|
all_groups.pop()
|
|||
|
|
|||
|
self.context.create_response(code=self.message_code.TASK_PROCESSED.value,
|
|||
|
message='Kullanıcı listesi başarıyla getirildi.',
|
|||
|
data=json.dumps({'users': user_list, 'all_groups': all_groups}),
|
|||
|
content_type=self.get_content_type().APPLICATION_JSON.value)
|
|||
|
|
|||
|
except Exception as e:
|
|||
|
self.logger.error('A problem occurred while handling Local-User task: {0}'.format(str(e)))
|
|||
|
self.context.create_response(code=self.message_code.TASK_ERROR.value,
|
|||
|
message='Local-User görevi çalıştırılırken bir hata oluştu.')
|
|||
|
|
|||
|
|
|||
|
def handle_task(task, context):
|
|||
|
get_users = GetUsers(task, context)
|
|||
|
get_users.handle_task()
|