def handle_remote_response(self, same_secrets=False): if not same_secrets: self.statusText.setTextColor_(NSColor.redColor()) self.statusText.setStringValue_(NSLocalizedString("Identity verification failed. Try again later.", "Label")) result = False else: self.stream.encryption.verified = True self.statusText.setTextColor_(NSColor.greenColor()) self.statusText.setStringValue_(NSLocalizedString("Identity verification succeeded", "Label")) self.controller.revalidateToolbar() self.controller.updateEncryptionWidgets() result = True self._finish(result) return result
def __init__(self, sessionController): self.notification_center = NotificationCenter() self.sessionController = None self.audio_stream = None self.chat_stream = None self.add_session(sessionController) self.add_audio_stream() self.add_chat_stream() self.timer = NSTimer.timerWithTimeInterval_target_selector_userInfo_repeats_(1.0, self, "updateTimer:", None, True) NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSModalPanelRunLoopMode) NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSDefaultRunLoopMode) NSBundle.loadNibNamed_owner_("SessionInfoPanel", self) sessionBoxTitle = NSAttributedString.alloc().initWithString_attributes_("SIP Session", NSDictionary.dictionaryWithObject_forKey_(NSColor.orangeColor(), NSForegroundColorAttributeName)) self.sessionBox.setTitle_(sessionBoxTitle) audioBoxTitle = NSAttributedString.alloc().initWithString_attributes_("Audio Stream", NSDictionary.dictionaryWithObject_forKey_(NSColor.orangeColor(), NSForegroundColorAttributeName)) self.audioBox.setTitle_(audioBoxTitle) chatBoxTitle = NSAttributedString.alloc().initWithString_attributes_("Chat Stream", NSDictionary.dictionaryWithObject_forKey_(NSColor.orangeColor(), NSForegroundColorAttributeName)) self.chatBox.setTitle_(chatBoxTitle) self.audio_rtt_graph.setLineWidth_(1.0) self.audio_rtt_graph.setLineSpacing_(1.0) self.audio_rtt_graph.setAboveLimit_(200) # if higher than 200 ms show red color self.audio_rtt_graph.setMinimumHeigth_(200) self.audio_packet_loss_graph.setLineWidth_(1.0) self.audio_packet_loss_graph.setLineSpacing_(1.0) self.audio_packet_loss_graph.setAboveLimit_(3) # if higher than 3% show red color self.audio_packet_loss_graph.setLineColor_(NSColor.greenColor()) self.audio_packet_loss_graph.setMinimumHeigth_(5) self.resetSession() self.updatePanelValues()
def importButtonClicked_(self, sender): BlinkLogger().log_info("Import private key") pincode = str(self.pincode.stringValue()).strip() data = self.encryptedKeyPair.decode() keyPair = self.decrypt(data, pincode) try: keyPair = keyPair.decode() except UnicodeDecodeError as e: self.status.setTextColor_(NSColor.redColor()) BlinkLogger().log_error("Import private key failed: %s" % str(e)) self.status.setStringValue_( NSLocalizedString("Key import failed", "status label")) else: public_key_checksum_match = re.findall( r"--PUBLIC KEY SHA1 CHECKSUM--(\w+)--", keyPair) private_key_checksum_match = re.findall( r"--PRIVATE KEY SHA1 CHECKSUM--(\w+)--", keyPair) if (public_key_checksum_match): public_key_checksum = public_key_checksum_match[0] else: public_key_checksum = None if (private_key_checksum_match): private_key_checksum = private_key_checksum_match[0] else: private_key_checksum = None public_key = '' private_key = '' start_public = False start_private = False for l in keyPair.split("\n"): if l == "-----BEGIN RSA PUBLIC KEY-----": start_public = True start_private = False if l == "-----END RSA PUBLIC KEY-----": public_key = public_key + l start_public = False start_private = False if l == "-----BEGIN RSA PRIVATE KEY-----": start_public = False start_private = True if l == "-----END RSA PRIVATE KEY-----": private_key = private_key + l start_public = False start_private = False if start_public: public_key = public_key + l + '\n' if start_private: private_key = private_key + l + '\n' if (public_key and private_key and public_key_checksum): self.importButton.setEnabled_(False) BlinkLogger().log_info("Key imported sucessfully") self.status.setTextColor_(NSColor.greenColor()) self.status.setStringValue_( NSLocalizedString("Key imported sucessfully", "status label")) self.checksum.setStringValue_(public_key_checksum) self.account.sms.private_key = private_key self.account.sms.public_key = public_key self.account.sms.public_key_checksum = public_key_checksum self.account.save() if self.dealloc_timer is None: self.dealloc_timer = NSTimer.timerWithTimeInterval_target_selector_userInfo_repeats_( 6.0, self, "deallocTimer:", None, True) NSRunLoop.currentRunLoop().addTimer_forMode_( self.dealloc_timer, NSRunLoopCommonModes) NSRunLoop.currentRunLoop().addTimer_forMode_( self.dealloc_timer, NSEventTrackingRunLoopMode) else: BlinkLogger().log_error("Key import failed") self.status.setStringValue_( NSLocalizedString("Key import failed", "status label")) self.status.setTextColor_(NSColor.redColor())
def handle_tlv(self, tlvs): self.statusText.setTextColor_(NSColor.blackColor()) if tlvs: fingerprint = self.ctx.getCurrentKey() is1qtlv = self.get_tlv(tlvs, potr.proto.SMP1QTLV) # check for TLV_SMP_ABORT or state = CHEATED if self.smp_running and not self.ctx.smpIsValid(): self.statusText.setTextColor_(NSColor.redColor()) self.statusText.setStringValue_('Verification failed. You may try again later.') self._finish() # check for TLV_SMP1 elif self.get_tlv(tlvs, potr.proto.SMP1TLV): self.statusText.setStringValue_('Verification request received') self.smp_running = True self.question = None self.show(True) self.progressBar.setIndeterminate_(False) self.progressBar.setDoubleValue_(3) # check for TLV_SMP1Q elif is1qtlv: self.smp_running = True self.question = is1qtlv.msg self.show(True) self.progressBar.setIndeterminate_(False) self.progressBar.setDoubleValue_(3) # check for TLV_SMP2 elif self.get_tlv(tlvs, potr.proto.SMP2TLV): self.progressBar.setIndeterminate_(False) self.progressBar.setDoubleValue_(6) self.statusText.setStringValue_('Verification in progress...') # check for TLV_SMP3 elif self.get_tlv(tlvs, potr.proto.SMP3TLV): if self.ctx.smpIsSuccess(): self.statusText.setTextColor_(NSColor.greenColor()) self.statusText.setStringValue_('Verification succeeded') if fingerprint: self.chatController.otr_account.setTrust(self.chatController.sessionController.remoteSIPAddress, str(fingerprint), 'verified') self.chatController.chatWindowController.revalidateToolbar() self.chatController.updateEncryptionWidgets() self._finish() else: self.statusText.setTextColor_(NSColor.redColor()) self.statusText.setStringValue_('Verification failed. You may try again later.') self._finish() # check for TLV_SMP4 elif self.get_tlv(tlvs, potr.proto.SMP4TLV): if self.ctx.smpIsSuccess(): self.statusText.setTextColor_(NSColor.greenColor()) self.statusText.setStringValue_('Verification succeeded') if fingerprint: self.chatController.otr_account.setTrust(self.chatController.sessionController.remoteSIPAddress, str(fingerprint), 'verified') self.chatController.chatWindowController.revalidateToolbar() self.chatController.updateEncryptionWidgets() self._finish() else: self.statusText.setTextColor_(NSColor.redColor()) self.statusText.setStringValue_('Verification failed. You may try again later.') self._finish()
def drawPresenceIcon(self): status = 'offline' if type(self.contact) is BlinkMyselfConferenceContact: account = self.contact.account if account.enabled and account.presence.enabled: settings = SIPSimpleSettings() status = settings.presence_state.status.lower() elif type(self.contact) is BlinkConferenceContact: blink_contact = self.contact.presence_contact if type(blink_contact) is not BlinkPresenceContact: return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is BlinkHistoryViewerContact: blink_contact = self.contact.presence_contact if type(blink_contact) is not BlinkPresenceContact: return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is HistoryBlinkContact: blink_contact = self.contact.contact if type(blink_contact) is not BlinkPresenceContact: return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif isinstance(self.contact, BlinkPresenceContact): blink_contact = self.contact if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is BonjourBlinkContact: account = BonjourAccount() if not account.presence.enabled: return blink_contact = self.contact status = presence_status_for_contact(blink_contact) elif type(self.contact) is SystemAddressBookBlinkContact: return elif type(self.contact) is LdapSearchResultContact: return elif type(self.contact) is SearchResultContact: return if not status: return try: icon = presence_status_icons[status] except KeyError: pass has_locations = None if type(self.contact) is BlinkPresenceContact: try: has_locations = any(device['location'] for device in self.contact.presence_state['devices'].values() if device['location'] is not None) except KeyError: pass frame = self.frame frame.origin.y -= 17 if has_locations: left = self.view.frame().size.width - 22 self.drawIcon(self.locationIcon, left, self.frame.origin.y +14, 16, 16) # presence bar frame.size.width = 5 if type(self.contact) in (BlinkConferenceContact, BlinkMyselfConferenceContact): frame.size.height = 14 frame.origin.y += 15 frame.origin.x = self.view.frame().size.width - 6 rect = NSInsetRect(frame, 0, 0) if status == 'available': NSColor.greenColor().set() elif status == 'away': NSColor.yellowColor().set() elif status == 'busy': NSColor.redColor().set() else: NSColor.whiteColor().set() border = NSBezierPath.bezierPathWithRoundedRect_xRadius_yRadius_(rect, 2.0, 2.0) border.setLineWidth_(0.08) border.fill() NSColor.blackColor().set() border.stroke()
def drawPresenceIcon(self): status = 'offline' if type(self.contact) is BlinkMyselfConferenceContact: account = self.contact.account if account.enabled and account.presence.enabled: settings = SIPSimpleSettings() status = settings.presence_state.status.lower() elif type(self.contact) is BlinkConferenceContact: blink_contact = self.contact.presence_contact if not isinstance(blink_contact, BlinkPresenceContact): return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is BlinkHistoryViewerContact: blink_contact = self.contact.presence_contact if not isinstance(blink_contact, BlinkPresenceContact): return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is HistoryBlinkContact: blink_contact = self.contact.contact if not isinstance(blink_contact, BlinkPresenceContact): return if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif isinstance(self.contact, BlinkPresenceContact): blink_contact = self.contact if not blink_contact.contact.presence.subscribe: return status = presence_status_for_contact(blink_contact) elif type(self.contact) is BonjourBlinkContact: account = BonjourAccount() if not account.presence.enabled: return blink_contact = self.contact status = presence_status_for_contact(blink_contact) elif type(self.contact) is SystemAddressBookBlinkContact: return elif type(self.contact) is LdapSearchResultContact: return elif type(self.contact) is SearchResultContact: return if not status: return try: icon = presence_status_icons[status] except KeyError: pass has_locations = None if isinstance(self.contact, (BlinkOnlineContact, BlinkPresenceContact)): try: has_locations = any(device['location'] for device in list( self.contact.presence_state['devices'].values()) if device['location'] is not None) except KeyError: pass frame = self.frame frame.origin.y -= 17 #if has_locations: # left = self.view.frame().size.width - 22 # self.drawIcon(self.locationIcon, left, self.frame.origin.y +14, 16, 16) # presence bar frame.size.width = 5 if type(self.contact) in (BlinkConferenceContact, BlinkMyselfConferenceContact): frame.size.height = 14 frame.origin.y += 15 frame.origin.x = self.view.frame().size.width - 6 rect = NSInsetRect(frame, 0, 0) if status == 'available': NSColor.greenColor().set() elif status == 'away': NSColor.yellowColor().set() elif status == 'busy': NSColor.redColor().set() else: NSColor.whiteColor().set() border = NSBezierPath.bezierPathWithRoundedRect_xRadius_yRadius_( rect, 2.0, 2.0) border.setLineWidth_(0.08) border.fill() NSColor.blackColor().set() border.stroke() # sleep icon if isinstance(self.contact, (BlinkOnlineContact, BlinkPresenceContact)): if self.contact.presence_state['time_offset'] is not None: ctime = datetime.datetime.utcnow( ) + self.contact.presence_state['time_offset'] hour = int(ctime.strftime("%H")) if hour > 21 or hour < 7: left = self.view.frame().size.width - 26 self.drawIcon(self.nightIcon, left, self.frame.origin.y + 14, 16, 16)
def __init__(self, sessionController): self.notification_center = NotificationCenter() self.notification_center.add_observer( self, name='CFGSettingsObjectDidChange') self.sessionController = None self.audio_stream = None self.video_stream = None self.chat_stream = None self.add_session(sessionController) self.add_audio_stream() self.add_video_stream() self.add_chat_stream() self.timer = NSTimer.timerWithTimeInterval_target_selector_userInfo_repeats_( 1.0, self, "updateTimer:", None, True) NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSModalPanelRunLoopMode) NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSDefaultRunLoopMode) NSBundle.loadNibNamed_owner_("SessionInfoPanel", self) sessionBoxTitle = NSAttributedString.alloc( ).initWithString_attributes_( NSLocalizedString("SIP Session", "Label"), NSDictionary.dictionaryWithObject_forKey_( NSColor.orangeColor(), NSForegroundColorAttributeName)) self.sessionBox.setTitle_(sessionBoxTitle) audioBoxTitle = NSAttributedString.alloc().initWithString_attributes_( NSLocalizedString("Audio Stream", "Label"), NSDictionary.dictionaryWithObject_forKey_( NSColor.orangeColor(), NSForegroundColorAttributeName)) self.audioBox.setTitle_(audioBoxTitle) videoBoxTitle = NSAttributedString.alloc().initWithString_attributes_( NSLocalizedString("Video Stream", "Label"), NSDictionary.dictionaryWithObject_forKey_( NSColor.orangeColor(), NSForegroundColorAttributeName)) self.videoBox.setTitle_(videoBoxTitle) chatBoxTitle = NSAttributedString.alloc().initWithString_attributes_( NSLocalizedString("Chat Stream", "Label"), NSDictionary.dictionaryWithObject_forKey_( NSColor.orangeColor(), NSForegroundColorAttributeName)) self.chatBox.setTitle_(chatBoxTitle) settings = SIPSimpleSettings() self.audio_rtt_graph.setLineWidth_(1.0) self.audio_rtt_graph.setLineSpacing_(1.0) self.audio_rtt_graph.setAboveLimit_( settings.gui.rtt_threshold) # if higher show red color self.audio_rtt_graph.setMinimumHeigth_(settings.gui.rtt_threshold) self.audio_packet_loss_rx_graph.setLineWidth_(1.0) self.audio_packet_loss_rx_graph.setLineSpacing_(1.0) self.audio_packet_loss_rx_graph.setAboveLimit_( 3) # if higher than 3% show red color self.audio_packet_loss_rx_graph.setLineColor_(NSColor.greenColor()) self.audio_packet_loss_rx_graph.setMinimumHeigth_(5) self.audio_packet_loss_tx_graph.setLineWidth_(1.0) self.audio_packet_loss_tx_graph.setLineSpacing_(1.0) self.audio_packet_loss_tx_graph.setAboveLimit_( 3) # if higher than 3% show red color self.audio_packet_loss_tx_graph.setLineColor_(NSColor.greenColor()) self.audio_packet_loss_tx_graph.setMinimumHeigth_(5) self.rx_speed_graph.setLineWidth_(1.0) self.rx_speed_graph.setLineSpacing_(0.0) self.rx_speed_graph.setLineColor_(NSColor.greenColor()) self.rx_speed_graph.setMinimumHeigth_(100000) self.rx_speed_graph.setAboveLimit_(120000) self.tx_speed_graph.setLineWidth_(1.0) self.tx_speed_graph.setLineSpacing_(0.0) self.tx_speed_graph.setLineColor_(NSColor.blueColor()) self.tx_speed_graph.setMinimumHeigth_(100000) self.tx_speed_graph.setAboveLimit_(120000) self.video_rx_speed_graph.setLineWidth_(1.0) self.video_rx_speed_graph.setLineSpacing_(0.0) self.video_rx_speed_graph.setLineColor_(NSColor.greenColor()) self.video_rx_speed_graph.setMinimumHeigth_(100000) self.video_rx_speed_graph.setAboveLimit_(99999999) self.video_tx_speed_graph.setLineWidth_(1.0) self.video_tx_speed_graph.setLineSpacing_(0.0) self.video_tx_speed_graph.setLineColor_(NSColor.blueColor()) self.video_tx_speed_graph.setMinimumHeigth_(100000) self.video_tx_speed_graph.setAboveLimit_(99999999) self.resetSession() self.updatePanelValues()