source: internals/2016/linuxloginsmartcardwizard/trunk/proto1/mainwin.py @ 16542

Last change on this file since 16542 was 16542, checked in by dcorreia, 4 years ago

Added control of subprocesses for the application.
Updated window and buttons design.

File size: 7.9 KB
Line 
1#!/usr/bin/python3
2from PyQt5 import QtCore, QtGui, QtWidgets
3from PyQt5.QtWidgets import QMessageBox
4
5import fileHelper
6import config
7import subprocess
8
9
10class MyMainWindow(QtWidgets.QMainWindow):
11    def __init__(self):
12        super(MyMainWindow, self).__init__()
13        self.setObjectName("MainWindow")
14        self.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
15        self.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
16        self.setEnabled(True)
17        self.resize(550, 480)
18        self.setAutoFillBackground(True)
19        self.centerOnScreen()
20       
21        self.centralwidget = QtWidgets.QWidget(self)
22       
23        self.title = QtWidgets.QLabel(self.centralwidget)
24        self.title.setGeometry(QtCore.QRect(0, 0, 550, 70))
25        self.title.setStyleSheet("border-bottom: 1px solid grey;\n"
26                                 "background-color: white;\n"
27                                 "font: bold 18pt \"Ubuntu\";\n")
28        self.title.setAlignment(QtCore.Qt.AlignCenter)
29       
30        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
31        self.layoutWidget.setGeometry(QtCore.QRect(75, 120, 400, 300))
32        self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
33        self.verticalLayout.setSpacing(40)
34        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
35        self.addUserButton = QtWidgets.QPushButton(self.layoutWidget)
36        self.addUserButton.setStyleSheet("border: 1px solid #8f8f91;\n"
37                                         "font: bold 16pt \"Ubuntu\";\ncolor: black;\n"
38                                         "border-radius: 10px;\n"
39                                         "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\n"
40                                         "stop: 0 #0FA620, stop: 1 #23CC36);\nmin-width: 80px;"
41                                         "min-height: 70px;")
42        self.verticalLayout.addWidget(self.addUserButton)
43       
44        self.listConfigButton = QtWidgets.QPushButton(self.layoutWidget)
45        self.listConfigButton.setStyleSheet("border: 1px solid #8f8f91;\n"
46                                            "font: bold 16pt \"Ubuntu\";\ncolor: black;\n"
47                                            "border-radius: 10px;\n"
48                                            "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\n"
49                                            "stop: 0 #7991db, stop: 1 #95A6DB);\n"
50                                            "min-width: 80px;min-height: 70px;")
51        self.verticalLayout.addWidget(self.listConfigButton)
52       
53        self.resetConfigButton = QtWidgets.QPushButton(self.layoutWidget)
54        self.resetConfigButton.setStyleSheet("border: 1px solid #8f8f91;\n"
55                                             "font: bold 16pt \"Ubuntu\";\ncolor: black;\n"
56                                             "border-radius: 10px;\n"
57                                             "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\n"
58                                             "stop: 0 #db181b, stop: 1 #e32d30);\n"
59                                             "min-width: 80px;min-height: 70px;")
60       
61        self.verticalLayout.addWidget(self.resetConfigButton)
62        self.setCentralWidget(self.centralwidget)
63
64        self.messageBox = QtWidgets.QMessageBox()
65
66        self.setWindowTitle("SmartCard Login")
67        self.title.setText("SmartCard Login Configuration")
68        self.addUserButton.setText("Add User Login")
69        self.listConfigButton.setText("List Local Configurations")
70        self.resetConfigButton.setText("Reset Login Configurations")
71
72        self.addUserButton.clicked.connect(self.openAddUserWizard)
73        self.listConfigButton.clicked.connect(self.listCurrentConfigs)
74        self.resetConfigButton.clicked.connect(self.resetLoginConfigs)
75
76        self.wizardProcess = None
77
78    def centerOnScreen(self):
79        resolution = QtWidgets.QDesktopWidget().screenGeometry()
80        self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
81                  (resolution.height() / 2) - (self.frameSize().height() / 2))
82
83    def openAddUserWizard(self):
84        if self.isWizardProcessActive():
85            self.messageBox.critical(self, "Title", "\nYou already have an add user login wizard open.\n\n"
86                                                    "Please finish or close the current wizard before\n"
87                                                    "trying to open a new add user login wizard.\n")
88        else:
89            self.wizardProcess = subprocess.Popen(["python3", "w4pages.py"])
90
91    def listCurrentConfigs(self):
92        print("List current login configurations")
93        message = "\nBI Number".ljust(25) + " Full Name".ljust(25) + "  Username".ljust(25) + "\n"
94        localCombos = config.listLocalCombos()
95        if localCombos is None:
96            message = "\nYou have no local configurations yet.\n\n"\
97                      "Please use the 'Add User Login' option to add \n"\
98                      "a new local configuration to your computer.\n"
99        else:
100            for combo in config.listLocalCombos():
101                message += combo[0].ljust(25) + combo[1].ljust(25) + combo[2].ljust(25) + "\n"
102        self.messageBox.information(self, "Title", message)
103
104    def resetLoginConfigs(self):
105        if self.isWizardProcessActive():
106            self.messageBox.critical(self, "Title", "\nPlease close the current add user login wizard\n"
107                                                    "before trying to reset the login configurations.\n\n")
108        else:
109            if self.checkResetPopup():
110                fileHelper.executeCommand("python3 main.py reset")
111                self.messageBox.information(self, "Finished reset",
112                                                  "Finished reset of smartcard login configurations.")
113
114    def checkResetPopup(self):
115        message = "\nYou're about to reset your smartcard login \n" \
116                  "configurations in this computer.\n\n" \
117                  "You will lose all current login configurations \n" \
118                  "and disable smartcard login in your computer.\n\n" \
119                  "Do you still want to reset your current \n" \
120                  "smartcard login configurations?\n"
121        reply = self.messageBox.warning(self, "Reset Login Configurations", message,
122                                        QMessageBox.No, QMessageBox.Yes)
123        return reply == QMessageBox.Yes
124
125    def isWizardProcessActive(self):
126        if self.wizardProcess is None:
127            return False
128        elif self.wizardProcess.poll() is not None:
129            return False
130        else:
131            return True
132
133    def closeEvent(self, QCloseEvent):
134        if self.isWizardProcessActive():
135            reply = self.messageBox.warning(self, "Title",  "\nYou have an add user login wizard open.\n\n"
136                                                            "Closing this window will also close the wizard \n"
137                                                            "and you will lose all progress on the wizard.\n\n"
138                                                            "Do you still want to close this window?\n",
139                                                            QMessageBox.No, QMessageBox.Yes)
140            if reply == QMessageBox.Yes:
141                self.wizardProcess.kill()
142                QCloseEvent.accept()
143            else:
144                QCloseEvent.ignore()
145        else:
146            # No wizard running so we can close the window
147            QCloseEvent.accept()
148
149if __name__ == "__main__":
150    import sys
151    import os
152    if os.geteuid() != 0:
153        print("Script not started as root. Running sudo...")
154        args = ["sudo", sys.executable] + sys.argv + [os.environ]
155        os.execlpe("gksudo", *args)
156    print("Running with euid ", os.geteuid())
157    app = QtWidgets.QApplication(sys.argv)
158    ui = MyMainWindow()
159    ui.show()
160    sys.exit(app.exec_())
Note: See TracBrowser for help on using the repository browser.