OpenSecurity/bin/opensecurity_tray.pyw
author om
Wed, 11 Dec 2013 14:42:55 +0100
changeset 42 e10a08095ccc
parent 38 560882d3d3c0
child 44 1d4afdfca7a9
permissions -rwxr-xr-x
more details on GUI parts
om@13
     1
#!/bin/env python
om@13
     2
# -*- coding: utf-8 -*-
om@13
     3
om@13
     4
# ------------------------------------------------------------
om@13
     5
# opensecurity-dialog
om@13
     6
# 
om@13
     7
# an opensecurity dialog
om@13
     8
#
om@13
     9
# Autor: Oliver Maurhart, <oliver.maurhart@ait.ac.at>
om@13
    10
#
om@13
    11
# Copyright (C) 2013 AIT Austrian Institute of Technology
om@13
    12
# AIT Austrian Institute of Technology GmbH
om@13
    13
# Donau-City-Strasse 1 | 1220 Vienna | Austria
om@13
    14
# http://www.ait.ac.at
om@13
    15
#
om@13
    16
# This program is free software; you can redistribute it and/or
om@13
    17
# modify it under the terms of the GNU General Public License
om@13
    18
# as published by the Free Software Foundation version 2.
om@13
    19
# 
om@13
    20
# This program is distributed in the hope that it will be useful,
om@13
    21
# but WITHOUT ANY WARRANTY; without even the implied warranty of
om@13
    22
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
om@13
    23
# GNU General Public License for more details.
om@13
    24
# 
om@13
    25
# You should have received a copy of the GNU General Public License
om@13
    26
# along with this program; if not, write to the Free Software
om@13
    27
# Foundation, Inc., 51 Franklin Street, Fifth Floor, 
om@13
    28
# Boston, MA  02110-1301, USA.
om@13
    29
# ------------------------------------------------------------
om@13
    30
om@13
    31
om@13
    32
# ------------------------------------------------------------
om@13
    33
# imports
om@13
    34
om@13
    35
import argparse
om@13
    36
import os
om@13
    37
import subprocess
om@13
    38
import sys
om@42
    39
import urllib2
om@13
    40
om@13
    41
from PyQt4 import QtCore
om@13
    42
from PyQt4 import QtGui
om@13
    43
om@13
    44
# local
om@13
    45
from about import About
om@13
    46
from environment import Environment
om@13
    47
om@13
    48
om@13
    49
# ------------------------------------------------------------
om@13
    50
# code
om@13
    51
om@13
    52
om@42
    53
class OpenSecurityWait(QtGui.QDialog):
om@42
    54
om@42
    55
    """OpenSecurity: please wait ..."""
om@42
    56
    
om@42
    57
    def __init__(self, parent = None, flags = QtCore.Qt.WindowFlags(0)):
om@42
    58
        super(OpenSecurityWait, self).__init__(parent, flags)
om@42
    59
        self.setWindowTitle('OpenSecurity')
om@42
    60
        self.setup_ui()
om@42
    61
        
om@42
    62
        
om@42
    63
    def setup_ui(self):
om@42
    64
        """Create the widgets."""
om@42
    65
        
om@42
    66
        lyMain = QtGui.QVBoxLayout(self)
om@42
    67
        lyMain.setContentsMargins(8, 8, 8, 8)
om@42
    68
        
om@42
    69
        # content area: left pixmap, right text
om@42
    70
        lbTitle = QtGui.QLabel('Creating secure subsystem. Please stand by ...')
om@42
    71
        lyMain.addWidget(lbTitle)
om@42
    72
        
om@42
    73
        self.setMinimumSize(400, 50)
om@42
    74
        self.resize(lyMain.minimumSize())
om@42
    75
om@42
    76
om@13
    77
class OpenSecurityTrayIcon(QtGui.QSystemTrayIcon):
om@13
    78
    
om@13
    79
    """This is the OpenSecuirty Tray Icon"""
om@13
    80
om@13
    81
    def __init__(self, icon, parent=None):
om@13
    82
        
om@13
    83
        super(OpenSecurityTrayIcon, self).__init__(icon, parent)
om@13
    84
        self.setup_ui()
om@13
    85
        
om@13
    86
        
om@13
    87
    def clicked_about(self):
om@13
    88
        """clicked about"""
om@13
    89
        dlgAbout = About()
om@13
    90
        dlgAbout.exec_()
om@13
    91
    
om@13
    92
om@37
    93
    def clicked_browser(self):
om@37
    94
        """wish for safe internet browsing"""
om@42
    95
        
om@42
    96
        # TODO: HARDCODED ADDRESS OF OPENSECURITYD
om@42
    97
        
om@42
    98
        # tell the user to wait
om@42
    99
        dlg = OpenSecurityWait()
om@42
   100
        dlg.show()
om@42
   101
        QtGui.QApplication.instance().processEvents()
om@42
   102
        
om@42
   103
        try:
om@42
   104
        
om@42
   105
            # get a proper browsing VM
om@42
   106
            browsing_vm = urllib2.urlopen('http://127.0.0.1:8080/browsing').readline()
om@42
   107
            dlg_launch_image = os.path.join(sys.path[0], 'launch.pyw')
om@42
   108
            process_command = [sys.executable, dlg_launch_image, browsing_vm, '/usr/bin/iceweasel']
om@42
   109
            print(process_command)
om@42
   110
            process = subprocess.Popen(process_command, shell = False)
om@42
   111
            process.communicate()
om@42
   112
            
om@42
   113
        except:
om@42
   114
            dlg.hide()
om@42
   115
            QtGui.QApplication.instance().processEvents()
om@42
   116
            QtGui.QMessageBox.critical(None, 'Failed to invoke Safe Internet Browsing', 'OpenSecurity Error')
om@42
   117
            
om@42
   118
        dlg.hide()
om@42
   119
        QtGui.QApplication.instance().processEvents()
om@37
   120
            
om@37
   121
            
om@13
   122
    def clicked_exit(self):
om@13
   123
        """clicked exit"""
om@13
   124
        sys.exit(0)
om@13
   125
    
om@13
   126
om@13
   127
    def clicked_launch_application(self):
om@13
   128
        """clicked the launch an application"""
om@13
   129
        dlg_launch_image = os.path.join(sys.path[0], 'launch.pyw')
om@13
   130
        process_command = [sys.executable, dlg_launch_image]
om@13
   131
        print(process_command)
om@13
   132
        process = subprocess.Popen(process_command, shell = False)
om@13
   133
        process.communicate()
om@13
   134
            
om@13
   135
            
om@13
   136
    def clicked_refresh(self):
om@13
   137
        """clicked refresh"""
om@13
   138
        self.setup_ui()
om@13
   139
om@13
   140
    
om@13
   141
    def setup_ui(self):
om@13
   142
        """create the user interface
om@13
   143
        As for the system tray this is 'just' the context menu.
om@13
   144
        """
om@13
   145
    
om@13
   146
        # define the tray icon menu
om@13
   147
        menu = QtGui.QMenu(self.parent())
om@13
   148
        self.setContextMenu(menu)
om@13
   149
        
om@13
   150
        # add known apps
om@37
   151
        cAcBrowser = menu.addAction(QtGui.QIcon(QtGui.QPixmapCache.find('opensecurity_icon_64')), 'Safe Internet Browsing')
om@37
   152
        menu.addSeparator()
om@13
   153
        
om@13
   154
        # add standard menu items
om@13
   155
        cAcLaunch = menu.addAction(QtGui.QIcon(QtGui.QPixmapCache.find('opensecurity_icon_64')), 'Lauch Application')
om@13
   156
        menu.addSeparator()
om@13
   157
        cAcRefresh = menu.addAction('Refresh')
om@13
   158
        cAcAbout = menu.addAction("About")
om@13
   159
        cAcExit = menu.addAction("Exit")
om@13
   160
        
om@37
   161
        cAcBrowser.triggered.connect(self.clicked_browser)
om@13
   162
        cAcLaunch.triggered.connect(self.clicked_launch_application)
om@13
   163
        cAcRefresh.triggered.connect(self.clicked_refresh)
om@13
   164
        cAcAbout.triggered.connect(self.clicked_about)
om@13
   165
        cAcExit.triggered.connect(self.clicked_exit)
om@13
   166
        
om@13
   167
        
om@13
   168
def main():
om@13
   169
    
om@13
   170
    app = QtGui.QApplication(sys.argv)
om@13
   171
om@13
   172
    # prebuild the pixmap cache: fetch all jpg, png and jpeg images and load them
om@13
   173
    image_path = os.path.join(Environment("OpenSecurity").data_path, '..', 'gfx')
om@13
   174
    for file in os.listdir(image_path):
om@13
   175
        if file.lower().rpartition('.')[2] in ('jpg', 'png', 'jpeg'):
om@13
   176
            QtGui.QPixmapCache.insert(file.lower().rpartition('.')[0], QtGui.QPixmap(os.path.join(image_path, file)))
om@13
   177
om@13
   178
    w = QtGui.QWidget()
om@13
   179
    trayIcon = OpenSecurityTrayIcon(QtGui.QIcon(QtGui.QPixmapCache.find('opensecurity_icon_64')), w)
om@13
   180
om@13
   181
    trayIcon.show()
om@38
   182
    app.setQuitOnLastWindowClosed(False)
om@13
   183
    sys.exit(app.exec_())
om@13
   184
   
om@13
   185
om@13
   186
# start
om@13
   187
if __name__ == "__main__":
om@13
   188
    main()
om@13
   189