From 6636cbff81061bc270e4d21659fa3fba8eb3c87b Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Fri, 12 Apr 2013 18:44:55 +0200 Subject: Create installation script using distutils --- pylock/Main.py | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 pylock/Main.py (limited to 'pylock/Main.py') diff --git a/pylock/Main.py b/pylock/Main.py new file mode 100644 index 0000000..7a2cbb9 --- /dev/null +++ b/pylock/Main.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python3 + + +# Copyright (c) 2012, Matthias Schiffer +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# 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. + + +import signal +import sys +import os +import pwd +import locale +import configparser + +from gi.repository import Gtk, GLib + +from .Locker import Locker +from .LockWindow import LockWindow +from . import Selection +from . import pam + + +CONFIG_FILE = '/etc/pylock.conf' + + +_ = locale.gettext + + +def main(): + configParser = configparser.ConfigParser() + configParser.read_file(open(CONFIG_FILE)) + + config = configParser['pylock'] + username = pwd.getpwuid(os.getuid())[0] + + def signalHandler(signum, frame): + Gtk.main_quit() + + signal.signal(signal.SIGINT, signalHandler) + signal.signal(signal.SIGTERM, signalHandler) + signal.signal(signal.SIGQUIT, signalHandler) + + locale.setlocale(locale.LC_ALL, '') + locale.textdomain('pylock') + + if 'theme' in config: + Gtk.Settings.get_defalt().set_property('gtk-theme-name', config['theme']) + + def waitForSelection(): + if Selection.get() != 0: + return True + + Gtk.main_quit() + return False + + + if Selection.get() != 0: + GLib.timeout_add_seconds(1, waitForSelection) + Gtk.main() + sys.exit(0) + + window = LockWindow() + + if not Selection.acquire(window): + print('Unable to register pylock at X server', file=sys.stderr) + sys.exit(1) + + + def lock(timeLeft): + window.updateLockMessage(username, timeLeft) + return window.lock() + + def logout(): + try: + os.system(config['logout_command']) + except: + pass + + window.reset(False) + + def updateTimeout(timeLeft): + window.updateLockMessage(username, timeLeft) + + if not ('logout_timeout' in config and 'logout_command' in config): + locker = Locker(lock, window.unlock) + else: + locker = Locker(lock, window.unlock, int(config['logout_timeout']), logout, updateTimeout) + + pamAuth = pam.pam() + + def tryUnlock(w, password): + if pamAuth.authenticate(username, password): + locker.unlock() + Gtk.main_quit() + else: + window.reset() + window.setAuthMessage(pamAuth.reason) + + return True + + window.connect('logout', lambda w: locker.logout()) + window.connect('tryUnlock', tryUnlock) + + GLib.idle_add(lambda: locker.lock()) + + Gtk.main() -- cgit v1.2.3