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 __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 )
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 )
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)