108 lines
2.8 KiB
Python
108 lines
2.8 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
|
||
|
from os import path, chdir
|
||
|
from sys import platform
|
||
|
from getpass import getuser
|
||
|
from datetime import datetime
|
||
|
|
||
|
|
||
|
|
||
|
def addtolog(message: str) -> None:
|
||
|
"""
|
||
|
Simple logger
|
||
|
:param message: string for print to stdout and write to log
|
||
|
:return: None
|
||
|
"""
|
||
|
print(message)
|
||
|
if conf['logs']:
|
||
|
with open(conf['logs'], 'a') as file:
|
||
|
file.write(datetime.now().strftime("%Y.%m.%d-%H:%M:%S") + " " + message + "\n")
|
||
|
|
||
|
def execpause() -> None:
|
||
|
"""
|
||
|
Simple pause
|
||
|
:return: None
|
||
|
"""
|
||
|
input("Press [ENTER] to continue...")
|
||
|
|
||
|
def execquite(code: int) -> None:
|
||
|
"""
|
||
|
Exit handler
|
||
|
:param code: integer to exitcode
|
||
|
:return: None
|
||
|
"""
|
||
|
if args['show'] != 'qn':
|
||
|
execpause()
|
||
|
addtolog("execution time is " + str((datetime.now() - start).seconds) + " seconds, exit")
|
||
|
exit(code)
|
||
|
|
||
|
def execerror(message: str) -> None:
|
||
|
"""
|
||
|
Error handler
|
||
|
:param message: string for print to stdout and write to log
|
||
|
:return: None
|
||
|
"""
|
||
|
addtolog("error: " + message)
|
||
|
execquite(1)
|
||
|
|
||
|
def getconfig(config: str) -> dict:
|
||
|
"""
|
||
|
Simple config reader
|
||
|
:param config: path to configuration file
|
||
|
:return: dictionary as "key":"value"
|
||
|
"""
|
||
|
dictionary = {}
|
||
|
dictionary['logs'] = None
|
||
|
if path.exists(config):
|
||
|
with open(config) as file:
|
||
|
raw = file.read()
|
||
|
for line in raw.splitlines():
|
||
|
if "logs=" in line:
|
||
|
dictionary['logs'] = line.split('=')[1].strip()
|
||
|
return dictionary
|
||
|
|
||
|
def checkroot() -> bool:
|
||
|
"""
|
||
|
Crossplatform privileged rights checker
|
||
|
:return: "true" or "false"
|
||
|
"""
|
||
|
if platform.startswith('linux') or platform.startswith('darwin'):
|
||
|
from os import geteuid
|
||
|
if geteuid() != 0:
|
||
|
return False
|
||
|
else:
|
||
|
return True
|
||
|
elif platform.startswith('win32'):
|
||
|
import ctypes
|
||
|
return ctypes.windll.shell32.IsUserAnAdmin()
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
from argparse import ArgumentParser
|
||
|
|
||
|
args = ArgumentParser(
|
||
|
prog='script',
|
||
|
description='Checking privileged rights',
|
||
|
epilog='Dependencies: '
|
||
|
'Python 3 (tested version 3.9.5)'
|
||
|
)
|
||
|
args.add_argument('-s', '--show', type=str, default=None, required=False,
|
||
|
help='qn - execution without pauses')
|
||
|
args.add_argument('-c', '--conf', type=str, default=None, required=False,
|
||
|
help='path to configuration file')
|
||
|
args = vars(args.parse_args())
|
||
|
if not args['conf']:
|
||
|
conf = path.abspath(__file__).replace('.py', '.conf')
|
||
|
else:
|
||
|
conf = args['conf']
|
||
|
conf = getconfig(conf)
|
||
|
|
||
|
start = datetime.now()
|
||
|
chdir(path.split(path.abspath(__file__))[0])
|
||
|
if checkroot():
|
||
|
print('Running as', getuser())
|
||
|
execquite(0)
|
||
|
else:
|
||
|
execerror("Restart this as root!")
|