#750: Using PEP 8 Style Guide for Python in new module; implementing basic {{{getconfig}}} operation.

oglive^2^2
Ramón M. Gómez 2018-06-18 20:47:35 +02:00
parent 88d3c4642b
commit 81a9b65d79
5 changed files with 102 additions and 114 deletions

View File

@ -0,0 +1,7 @@
#!/bin/bash
cd $(dirname "$0")
# Build package
dpkg-buildpackage -b -d

View File

@ -1,11 +0,0 @@
#!/bin/bash
cd $(dirname "$0")
top=`pwd`
[ -r ../src/VERSION ] && VERSION="$(cat ../src/VERSION)" || VERSION="1.1.0"
RELEASE="1"
# Debian based
dpkg-buildpackage -b -d

View File

@ -30,20 +30,20 @@
""" """
from __future__ import unicode_literals from __future__ import unicode_literals
import threading
import os import os
import platform
import time
import random import random
import shutil import shutil
import string import string
import threading
import time
import urllib import urllib
from opengnsys.workers import ServerWorker from opengnsys import REST
from opengnsys import REST, RESTError
from opengnsys import operations from opengnsys import operations
from opengnsys.log import logger from opengnsys.log import logger
from opengnsys.scriptThread import ScriptExecutorThread from opengnsys.scriptThread import ScriptExecutorThread
from opengnsys.workers import ServerWorker
# Check authorization header decorator # Check authorization header decorator
@ -76,12 +76,38 @@ def catch_background_error(fnc):
return wrapper return wrapper
def check_locked_partition(sync=False):
"""
Decorator to check if a partition is locked
"""
def outer(fnc):
def wrapper(*args, **kwargs):
part_id = 'None'
try:
this, path, get_params, post_params = args # @UnusedVariable
part_id = post_params['disk'] + post_params['part']
if this.locked.get(part_id, False):
this.locked[part_id] = True
fnc(*args, **kwargs)
else:
return 'partition locked'
except Exception as e:
this.locked[part_id] = False
return 'error {}'.format(e)
finally:
if sync is True:
this.locked[part_id] = False
logger.debug('Lock status: {} {}'.format(fnc, this.locked))
return wrapper
return outer
class OpenGnSysWorker(ServerWorker): class OpenGnSysWorker(ServerWorker):
name = 'opengnsys' name = 'opengnsys'
interface = None # Bound interface for OpenGnsys interface = None # Bound interface for OpenGnsys
REST = None # REST object REST = None # REST object
logged_in = False # User session flag logged_in = False # User session flag
locked = {} locked = {} # Locked partitions
random = None # Random string for secure connections random = None # Random string for secure connections
length = 32 # Random string length length = 32 # Random string length
@ -92,6 +118,7 @@ class OpenGnSysWorker(ServerWorker):
t = 0 t = 0
# Generate random secret to send on activation # Generate random secret to send on activation
self.random = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(self.length)) self.random = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(self.length))
self.cmd = None
# Ensure cfg has required configuration variables or an exception will be thrown # Ensure cfg has required configuration variables or an exception will be thrown
url = self.service.config.get('opengnsys', 'remote') url = self.service.config.get('opengnsys', 'remote')
self.REST = REST(url) self.REST = REST(url)
@ -213,23 +240,15 @@ class OpenGnSysWorker(ServerWorker):
:param server: :param server:
:return: JSON object {"status": "status_code", "loggedin": boolean} :return: JSON object {"status": "status_code", "loggedin": boolean}
""" """
res = {'status': '', 'loggedin': self.logged_in} st = {'linux': 'LNX', 'macos': 'OSX', 'oglive': 'OPG', 'windows': 'WIN'}
if platform.system() == 'Linux': # GNU/Linux res = {'loggedin': self.loggedin}
# Check if it's OpenGnsys Client. try:
if os.path.exists('/scripts/oginit'): res['status'] = st[operations.os_type.lower()]
# Check if OpenGnsys Client is busy. except KeyError:
if self.locked: res['status'] = ''
res['status'] = 'BSY' # Check if OpenGnsys Client is busy
else: if res['status'] == 'OPG' and self.locked:
res['status'] = 'OPG' res['status'] = 'BSY'
else:
# Check if there is an active session.
res['status'] = 'LNX'
elif platform.system() == 'Windows': # Windows
# Check if there is an active session.
res['status'] = 'WIN'
elif platform.system() == 'Darwin': # Mac OS X ??
res['status'] = 'OSX'
return res return res
@check_secret @check_secret
@ -313,3 +332,17 @@ class OpenGnSysWorker(ServerWorker):
def process_client_popup(self, params): def process_client_popup(self, params):
self.REST.sendMessage('popup_done', params) self.REST.sendMessage('popup_done', params)
def process_getconfig(self, path, get_params, post_params, server):
"""
Returns client configuration
:param path:
:param get_params:
:param post_params:
:param server:
:return: object
"""
logger.debug('Recieved getconfig operation')
self.checkSecret(server)
# Returns raw data
return {'config': operations.get_disk_config()}

View File

@ -26,17 +26,14 @@
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
''' """
@author: Ramón M. Gómez, ramongomez at us dot es @author: Ramón M. Gómez, ramongomez at us dot es
''' """
from __future__ import unicode_literals from __future__ import unicode_literals
import socket import socket
import platform import platform
import fcntl import fcntl
import os
import ctypes # @UnusedImport
import ctypes.util
import subprocess import subprocess
import struct import struct
import array import array
@ -44,37 +41,11 @@ import six
from opengnsys import utils from opengnsys import utils
def checkLockedPartition(sync=False):
'''
Decorator to check if a partition is locked
'''
def outer(fnc):
def wrapper(*args, **kwargs):
partId = 'None'
try:
this, path, getParams, postParams = args # @UnusedVariable
partId = postParams['disk'] + postParams['part']
if this.locked.get(partId, False):
this.locked[partId] = True
fnc(*args, **kwargs)
else:
return 'partition locked'
except Exception as e:
this.locked[partId] = False
return 'error {}'.format(e)
finally:
if sync is True:
this.locked[partId] = False
logger.debug('Lock status: {} {}'.format(fnc, this.locked))
return wrapper
return outer
def _getMacAddr(ifname): def _getMacAddr(ifname):
''' """
Returns the mac address of an interface Returns the mac address of an interface
Mac is returned as unicode utf-8 encoded Mac is returned as unicode utf-8 encoded
''' """
if isinstance(ifname, list): if isinstance(ifname, list):
return dict([(name, _getMacAddr(name)) for name in ifname]) return dict([(name, _getMacAddr(name)) for name in ifname])
if isinstance(ifname, six.text_type): if isinstance(ifname, six.text_type):
@ -88,10 +59,10 @@ def _getMacAddr(ifname):
def _getIpAddr(ifname): def _getIpAddr(ifname):
''' """
Returns the ip address of an interface Returns the ip address of an interface
Ip is returned as unicode utf-8 encoded Ip is returned as unicode utf-8 encoded
''' """
if isinstance(ifname, list): if isinstance(ifname, list):
return dict([(name, _getIpAddr(name)) for name in ifname]) return dict([(name, _getIpAddr(name)) for name in ifname])
if isinstance(ifname, six.text_type): if isinstance(ifname, six.text_type):
@ -108,9 +79,9 @@ def _getIpAddr(ifname):
def _getInterfaces(): def _getInterfaces():
''' """
Returns a list of interfaces names coded in utf-8 Returns a list of interfaces names coded in utf-8
''' """
max_possible = 128 # arbitrary. raise if needed. max_possible = 128 # arbitrary. raise if needed.
space = max_possible * 16 space = max_possible * 16
if platform.architecture()[0] == '32bit': if platform.architecture()[0] == '32bit':
@ -134,32 +105,32 @@ def _getInterfaces():
def _getIpAndMac(ifname): def _getIpAndMac(ifname):
ip, mac = _getIpAddr(ifname), _getMacAddr(ifname) ip, mac = _getIpAddr(ifname), _getMacAddr(ifname)
return (ip, mac) return ip, mac
def _exec_ogcommand(self, ogcmd): def _exec_ogcommand(ogcmd):
''' """
Loads OpenGnsys environment variables, executes the command and returns the result Loads OpenGnsys environment variables, executes the command and returns the result
''' """
ret = subprocess.check_output('source /opt/opengnsys/etc/preinit/loadenviron.sh >/dev/null; {}'.format(ogcmd), shell=True) ret = subprocess.check_output(ogcmd, shell=True)
return ret return ret
def getComputerName(): def getComputerName():
''' """
Returns computer name, with no domain Returns computer name, with no domain
''' """
return socket.gethostname().split('.')[0] return socket.gethostname().split('.')[0]
def getNetworkInfo(): def getNetworkInfo():
''' """
Obtains a list of network interfaces Obtains a list of network interfaces
@return: A "generator" of elements, that are dict-as-object, with this elements: :return: A "generator" of elements, that are dict-as-object, with this elements:
name: Name of the interface name: Name of the interface
mac: mac of the interface mac: mac of the interface
ip: ip of the interface ip: ip of the interface
''' """
for ifname in _getInterfaces(): for ifname in _getInterfaces():
ip, mac = _getIpAndMac(ifname) ip, mac = _getIpAndMac(ifname)
if mac != '00:00:00:00:00:00': # Skips local interfaces if mac != '00:00:00:00:00:00': # Skips local interfaces
@ -170,56 +141,44 @@ def getDomainName():
return '' return ''
def getOgliveVersion(): def get_oglive_version():
lv = platform.linux_distribution() """
return lv[0] + ', ' + lv[1] Returns ogLive Kernel version and architecture
:return: kernel version
"""
kv = platform.os.uname()
return kv[2] + ', ' + kv[4]
def reboot(): def reboot():
''' """
Simple reboot using OpenGnsys script Simple reboot using OpenGnsys script
''' """
# Workaround for dummy thread # Workaround for dummy thread
if six.PY3 is False: if six.PY3 is False:
import threading import threading
threading._DummyThread._Thread__stop = lambda x: 42 threading._DummyThread._Thread__stop = lambda x: 42
_exec_ogcommand('/opt/opengnsys/scripts/reboot', shell=True) _exec_ogcommand('/opt/opengnsys/scripts/reboot')
def poweroff(): def poweroff():
''' """
Simple poweroff using OpenGnsys script Simple poweroff using OpenGnsys script
''' """
# Workaround for dummy thread # Workaround for dummy thread
if six.PY3 is False: if six.PY3 is False:
import threading import threading
threading._DummyThread._Thread__stop = lambda x: 42 threading._DummyThread._Thread__stop = lambda x: 42
_exec_ogcommand('/opt/opengnsys/scripts/poweroff', shell=True) _exec_ogcommand('/opt/opengnsys/scripts/poweroff')
def logoff(): def get_disk_config():
pass """
Returns disk configuration
Warning: this operation may take some time
def renameComputer(newName): """
pass
def joinDomain(domain, ou, account, password, executeInOneStep=False):
pass
def changeUserPassword(user, oldPassword, newPassword):
pass
def diskconfig():
'''
Returns disk configuration.
Warning: this operation may take some time.
'''
try: try:
_exec_ogcommand('/opt/opengnsys/interfaceAdm/getConfiguration') _exec_ogcommand('/opt/opengnsys/interfaceAdm/getConfiguration')
# Returns content of configuration file. # Returns content of configuration file.

View File

@ -27,7 +27,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
""" """
@author: Adolfo Gómez, dkmaster at dkmon dot com @author: Ramón M. Gómez, ramongomez at us dot es
""" """
# pylint: disable=unused-wildcard-import,wildcard-import # pylint: disable=unused-wildcard-import,wildcard-import
@ -48,8 +48,8 @@ else:
else: else:
if os.path.exists('/scripts/oginit'): if os.path.exists('/scripts/oginit'):
from .oglive.operations import * # @UnusedWildImport from .oglive.operations import * # @UnusedWildImport
osType = 'ogLive' os_type = 'ogLive'
os_version = getOgliveVersion().replace(',','') os_version = get_oglive_version()
else: else:
from .linux.operations import * # @UnusedWildImport from .linux.operations import * # @UnusedWildImport
os_type = 'Linux' os_type = 'Linux'