コード例 #1
0
ファイル: dialogs.py プロジェクト: hj91/cspace
 def __init__(self, parent, reactor):
     QDialog.__init__(self, parent)
     self.ui = Ui_CreateKeyDialog()
     self.ui.setupUi(self)
     self.reactor = reactor
     self.registerOp = None
     self.ui.stack.setCurrentWidget(self.ui.inputPage)
コード例 #2
0
ファイル: dialogs.py プロジェクト: AchillesA/cspace
 def __init__( self, parent, reactor ) :
     QDialog.__init__( self, parent )
     self.ui = Ui_CreateKeyDialog()
     self.ui.setupUi( self )
     self.reactor = reactor
     self.registerOp = None
     self.ui.stack.setCurrentWidget( self.ui.inputPage )
コード例 #3
0
ファイル: dialogs.py プロジェクト: AchillesA/cspace
class CreateKeyDialog( QDialog ) :
    def __init__( self, parent, reactor ) :
        QDialog.__init__( self, parent )
        self.ui = Ui_CreateKeyDialog()
        self.ui.setupUi( self )
        self.reactor = reactor
        self.registerOp = None
        self.ui.stack.setCurrentWidget( self.ui.inputPage )

    def _showError( self, msg ) :
        QMessageBox.critical( self, 'Error', msg )
    
    @pyqtSignature('')
    def on_createKeyButton_clicked( self ) :
        password = unicode(self.ui.password.text()).encode('utf8')
        if not password :
            self._showError( 'Please enter a password.' )
            self.ui.password.setFocus()
            self.ui.password.selectAll()
            return
        password2 = unicode(self.ui.password2.text()).encode('utf8')
        if password != password2 :
            self._showError( 'Re-entered password does not match.' )
            self.ui.password2.setFocus()
            self.ui.password2.selectAll()
            return
        userName = unicode(self.ui.userName.text()).encode('utf8')
        if not userName :
            self._showError( 'Please enter a username.' )
            self.ui.userName.setFocus()
            self.ui.userName.selectAll()
            return
        if not isValidUserName(userName) :
            self._showError( 'Only lowercase alphabets(a-z), ' +
                    'digits(0-9), and underscore(\'_\') are allowed ' +
                    'in the username.' )
            self.ui.userName.setFocus()
            self.ui.userName.selectAll()
            return
        self.userName = userName
        self.password = password
        self._doCreateKey()

    def _doCreateKey( self ) :
        self.ui.stack.setCurrentWidget( self.ui.progressPage )
        self.ui.msgLabel.setText( 'Creating RSA Key...' )
        self.repaint()
        self.rsaKey = RSAKey()
        self.rsaKey.generate( bits=2048 )
        self._doRegisterKey()

    def _registerKey( self, callback=None ) :
        data = 'username:%s' % self.userName
        digestType = DigestType( 'SHA1' )
        digest = Digest(digestType).digest( data )
        signature = self.rsaKey.sign( digest, digestType )

        form = dict( username=self.userName,
                public_key=self.rsaKey.toDER_PublicKey(),
                signature=signature )
        postData = urllib.urlencode( form )

        request = HttpRequest( self.reactor )
        def onResponse( returnCode, data ) :
            if returnCode != 200 :
                op.notify( -1 )
                return
            try :
                keyId = int(data)
                op.notify( keyId )
            except ValueError :
                op.notify( -1 )
        httpOp = request.post( 'http://cspace.in/addkey', postData, onResponse )
        op = AsyncOp( callback, httpOp.cancel )
        return op

    def _doRegisterKey( self ) :
        self.ui.stack.setCurrentWidget( self.ui.progressPage )
        self.ui.msgLabel.setText( 'Registering Public Key...' )
        self.registerOp = self._registerKey( self._onRegister )

    def _onRegister( self, keyId ) :
        self.registerOp = None
        if keyId < 0 :
            self.ui.stack.setCurrentWidget( self.ui.errorPage )
            return
        self.keyId = str(keyId)
        self.accept()

    @pyqtSignature('')
    def on_tryAgainButton_clicked( self ) :
        self._doRegisterKey()

    def done( self, r ) :
        QDialog.done( self, r )
        self.close()

    def closeEvent( self, ev ) :
        if self.registerOp :
            self.registerOp.cancel()
            self.registerOp = None
        delaygc( self )
        QDialog.closeEvent( self, ev )
コード例 #4
0
ファイル: dialogs.py プロジェクト: hj91/cspace
class CreateKeyDialog(QDialog):
    def __init__(self, parent, reactor):
        QDialog.__init__(self, parent)
        self.ui = Ui_CreateKeyDialog()
        self.ui.setupUi(self)
        self.reactor = reactor
        self.registerOp = None
        self.ui.stack.setCurrentWidget(self.ui.inputPage)

    def _showError(self, msg):
        QMessageBox.critical(self, 'Error', msg)

    @pyqtSignature('')
    def on_createKeyButton_clicked(self):
        password = unicode(self.ui.password.text()).encode('utf8')
        if not password:
            self._showError('Please enter a password.')
            self.ui.password.setFocus()
            self.ui.password.selectAll()
            return
        password2 = unicode(self.ui.password2.text()).encode('utf8')
        if password != password2:
            self._showError('Re-entered password does not match.')
            self.ui.password2.setFocus()
            self.ui.password2.selectAll()
            return
        userName = unicode(self.ui.userName.text()).encode('utf8')
        if not userName:
            self._showError('Please enter a username.')
            self.ui.userName.setFocus()
            self.ui.userName.selectAll()
            return
        if not isValidUserName(userName):
            self._showError('Only lowercase alphabets(a-z), ' +
                            'digits(0-9), and underscore(\'_\') are allowed ' +
                            'in the username.')
            self.ui.userName.setFocus()
            self.ui.userName.selectAll()
            return
        self.userName = userName
        self.password = password
        self._doCreateKey()

    def _doCreateKey(self):
        self.ui.stack.setCurrentWidget(self.ui.progressPage)
        self.ui.msgLabel.setText('Creating RSA Key...')
        self.repaint()
        self.rsaKey = RSAKey()
        self.rsaKey.generate(bits=2048)
        self._doRegisterKey()

    def _registerKey(self, callback=None):
        data = 'username:%s' % self.userName
        digestType = DigestType('SHA1')
        digest = Digest(digestType).digest(data)
        signature = self.rsaKey.sign(digest, digestType)

        form = dict(username=self.userName,
                    public_key=self.rsaKey.toDER_PublicKey(),
                    signature=signature)
        postData = urllib.urlencode(form)

        request = HttpRequest(self.reactor)

        def onResponse(returnCode, data):
            if returnCode != 200:
                op.notify(-1)
                return
            try:
                keyId = int(data)
                op.notify(keyId)
            except ValueError:
                op.notify(-1)

        httpOp = request.post('http://cspace.in/addkey', postData, onResponse)
        op = AsyncOp(callback, httpOp.cancel)
        return op

    def _doRegisterKey(self):
        self.ui.stack.setCurrentWidget(self.ui.progressPage)
        self.ui.msgLabel.setText('Registering Public Key...')
        self.registerOp = self._registerKey(self._onRegister)

    def _onRegister(self, keyId):
        self.registerOp = None
        if keyId < 0:
            self.ui.stack.setCurrentWidget(self.ui.errorPage)
            return
        self.keyId = str(keyId)
        self.accept()

    @pyqtSignature('')
    def on_tryAgainButton_clicked(self):
        self._doRegisterKey()

    def done(self, r):
        QDialog.done(self, r)
        self.close()

    def closeEvent(self, ev):
        if self.registerOp:
            self.registerOp.cancel()
            self.registerOp = None
        delaygc(self)
        QDialog.closeEvent(self, ev)