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.
calculate-utils-3-desktop/pym/desktop/utils/cl_desktop.py

104 lines
4.5 KiB

#-*- coding: utf-8 -*-
# Copyright 2010-2013 Calculate Ltd. http://www.calculate-linux.org
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
from os import path
from calculate.core.server.func import Action,Tasks
from calculate.lib.cl_lang import setLocalTranslate,getLazyLocalTranslate
from calculate.lib.utils.files import FilesError, isMount
from calculate.desktop.desktop import DesktopError
from calculate.lib.cl_template import TemplatesError
setLocalTranslate('cl_desktop3',sys.modules[__name__])
__ = getLazyLocalTranslate(_)
class ClDesktopLogoutAction(Action):
"""
Вывести пользователя из X сессии
"""
# ошибки, которые отображаются без подробностей
native_error = (FilesError,DesktopError,TemplatesError)
successMessage = __("The user logged out from the session!")
failedMessage = __("Unable to logout the user")
interruptMessage = __("Logout manually interrupted")
# список задач для действия
tasks = [
{'name':'user_logout',
'method':'Desktop.userLogout(cl_desktop_login)',
},
{'name':'wait_logout',
'message':__("Waiting for completion of the user logout"),
'method':'Desktop.waitLogout(cl_desktop_login,300)'}
]
class ClDesktopAction(Action):
"""
Настроить пользовательский профиль
"""
# ошибки, которые отображаются без подробностей
native_error = (FilesError,DesktopError,TemplatesError)
successMessage = __("User account {ur_login} is configured")
failedMessage = __("Failed to configure the user account")
interruptMessage = __("Configuration manually interrupted")
# список задач для действия
tasks = [
# создать домашниюю директорию
{'name':'create_home',
'message':__("Creating the home directory for {ur_login}"),
'method':'Desktop.createUserDir(ur_login,ur_uid,ur_gid,ur_home_path)',
'condition':lambda dv:not path.exists(dv.Get('ur_home_path'))
},
# используется ли шифрование
{'name':'crypt',
'condition':lambda dv:(not isMount(dv.Get('ur_home_path')) and \
dv.Get('ur_home_crypt_set') == 'on' and
(not dv.isModuleInstalled("install") or
dv.Get('install.cl_autologin') != dv.Get('ur_login')))
},
# подготовить шифрованный профиль пользователя для работы с .icon
{'name':'crypt:prepare_icon',
'method':'Desktop.prepareFace(ur_home_path)',
'condition':lambda Get:Get('ur_domain_set') == 'off'
},
# подключить шифрованные данные
{'name':'crypt:ecryptfs',
'message':__("Mounting encrypted data"),
'method':'Desktop.createCryptDir(ur_login,ur_uid,ur_gid,'
'ur_home_path,False)'
},
# настроить пользовательских профиль шаблонами
{'name':'user_profile',
'message':__("Setting up the user profile"),
'method':'Desktop.applyTemplates(None,False,'\
'False,None)',
'condition':lambda Get: Get('cl_desktop_force_setup_set') == 'on' or \
Get('cl_desktop_update_profile_set') == 'on'
},
# отключить ресурсы подключенные в каталоге пользователя
{'name':'umount_userres',
'message': _("Unmouning user resources"),
'method':'Desktop.umountUserRes(ur_mount_dirs)',
'condition': lambda dv:dv.Get('ur_mount_dirs'),
'depend': Tasks.failed()},
{'name':'ecryptfs:umount_homedir',
'method':'Desktop.umountUserRes(ur_home_path)',
'depend': Tasks.failed()}
]