|
Packit Service |
8ebd8e |
# -*- coding: utf-8 -*-
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
'''fprintd mock template
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
This creates the expected methods and properties of the
|
|
Packit Service |
8ebd8e |
net.reactivated.Fprint.Manager object (/net/reactivated/Fprint/Manager)
|
|
Packit Service |
8ebd8e |
but no devices.
|
|
Packit Service |
8ebd8e |
'''
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
# This program is free software; you can redistribute it and/or modify it under
|
|
Packit Service |
8ebd8e |
# the terms of the GNU Lesser General Public License as published by the Free
|
|
Packit Service |
8ebd8e |
# Software Foundation; either version 3 of the License, or (at your option) any
|
|
Packit Service |
8ebd8e |
# later version. See http://www.gnu.org/copyleft/lgpl.html for the full text
|
|
Packit Service |
8ebd8e |
# of the license.
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
__author__ = 'Bastien Nocera'
|
|
Packit Service |
8ebd8e |
__email__ = 'hadess@hadess.net'
|
|
Packit Service |
8ebd8e |
__copyright__ = '(c) 2020 Red Hat Inc.'
|
|
Packit Service |
8ebd8e |
__license__ = 'LGPL 3+'
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
import sys
|
|
Packit Service |
8ebd8e |
from gi.repository import GLib
|
|
Packit Service |
8ebd8e |
import dbus
|
|
Packit Service |
8ebd8e |
import asyncio
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
from dbusmock import MOCK_IFACE, mockobject
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
BUS_NAME = 'net.reactivated.Fprint'
|
|
Packit Service |
8ebd8e |
MAIN_OBJ = '/net/reactivated/Fprint/Manager'
|
|
Packit Service |
8ebd8e |
SYSTEM_BUS = True
|
|
Packit Service |
8ebd8e |
IS_OBJECT_MANAGER = False
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
MAIN_IFACE = 'net.reactivated.Fprint.Manager'
|
|
Packit Service |
8ebd8e |
MANAGER_MOCK_IFACE = 'net.reactivated.Fprint.Manager.Mock'
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
DEVICE_IFACE = 'net.reactivated.Fprint.Device'
|
|
Packit Service |
8ebd8e |
DEVICE_MOCK_IFACE = 'net.reactivated.Fprint.Device.Mock'
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
VALID_FINGER_NAMES = [
|
|
Packit Service |
8ebd8e |
'left-thumb',
|
|
Packit Service |
8ebd8e |
'left-index-finger',
|
|
Packit Service |
8ebd8e |
'left-middle-finger',
|
|
Packit Service |
8ebd8e |
'left-ring-finger',
|
|
Packit Service |
8ebd8e |
'left-little-finger',
|
|
Packit Service |
8ebd8e |
'right-thumb',
|
|
Packit Service |
8ebd8e |
'right-index-finger',
|
|
Packit Service |
8ebd8e |
'right-middle-finger',
|
|
Packit Service |
8ebd8e |
'right-ring-finger',
|
|
Packit Service |
8ebd8e |
'right-little-finger'
|
|
Packit Service |
8ebd8e |
]
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
VALID_VERIFY_STATUS = [
|
|
Packit Service |
8ebd8e |
'verify-no-match',
|
|
Packit Service |
8ebd8e |
'verify-match',
|
|
Packit Service |
8ebd8e |
'verify-retry-scan',
|
|
Packit Service |
8ebd8e |
'verify-swipe-too-short',
|
|
Packit Service |
8ebd8e |
'verify-finger-not-centered',
|
|
Packit Service |
8ebd8e |
'verify-remove-and-retry',
|
|
Packit Service |
8ebd8e |
'verify-disconnected',
|
|
Packit Service |
8ebd8e |
'verify-unknown-error'
|
|
Packit Service |
8ebd8e |
]
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
VALID_ENROLL_STATUS = [
|
|
Packit Service |
8ebd8e |
'enroll-completed',
|
|
Packit Service |
8ebd8e |
'enroll-failed',
|
|
Packit Service |
8ebd8e |
'enroll-stage-passed',
|
|
Packit Service |
8ebd8e |
'enroll-retry-scan',
|
|
Packit Service |
8ebd8e |
'enroll-swipe-too-short',
|
|
Packit Service |
8ebd8e |
'enroll-finger-not-centered',
|
|
Packit Service |
8ebd8e |
'enroll-remove-and-retry',
|
|
Packit Service |
8ebd8e |
'enroll-data-full',
|
|
Packit Service |
8ebd8e |
'enroll-disconnected',
|
|
Packit Service |
8ebd8e |
'enroll-unknown-error'
|
|
Packit Service |
8ebd8e |
]
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
def load(mock, parameters):
|
|
Packit Service |
8ebd8e |
fprintd = mockobject.objects[MAIN_OBJ]
|
|
Packit Service |
8ebd8e |
mock.last_device_id = 0
|
|
Packit Service |
8ebd8e |
fprintd.fingers = {}
|
|
Packit Service |
8ebd8e |
mock.loop = asyncio.new_event_loop()
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(MAIN_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='', out_signature='ao')
|
|
Packit Service |
8ebd8e |
def GetDevices(self):
|
|
Packit Service |
8ebd8e |
return [(k) for k in mockobject.objects.keys() if "/Device/" in k]
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(MAIN_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='', out_signature='o')
|
|
Packit Service |
8ebd8e |
def GetDefaultDevice(self):
|
|
Packit Service |
8ebd8e |
devices = self.GetDevices()
|
|
Packit Service |
8ebd8e |
if len(devices) < 1:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'No devices available',
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.NoSuchDevice')
|
|
Packit Service |
8ebd8e |
return devices[0]
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(MANAGER_MOCK_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='sisb', out_signature='s')
|
|
Packit Service |
8ebd8e |
def AddDevice(self, device_name, num_enroll_stages, scan_type,
|
|
Packit Service |
8ebd8e |
has_identification=False):
|
|
Packit Service |
8ebd8e |
'''Convenience method to add a fingerprint reader device
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
You have to specify a device name, the number of enrollment
|
|
Packit Service |
8ebd8e |
stages it would use (> 0) and the scan type, as a string
|
|
Packit Service |
8ebd8e |
(either 'press' or 'swipe')
|
|
Packit Service |
8ebd8e |
'''
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
if scan_type not in ['swipe', 'press']:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Invalid scan_type \'%s\'.' % scan_type,
|
|
Packit Service |
8ebd8e |
name='org.freedesktop.DBus.Error.InvalidArgs')
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
if num_enroll_stages <= 0:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Invalid num_enroll_stages \'%s\'.' % num_enroll_stages,
|
|
Packit Service |
8ebd8e |
name='org.freedesktop.DBus.Error.InvalidArgs')
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
self.last_device_id += 1
|
|
Packit Service |
8ebd8e |
path = '/net/reactivated/Fprint/Device/%d' % self.last_device_id
|
|
Packit Service |
8ebd8e |
device_properties = {
|
|
Packit Service |
8ebd8e |
'name': dbus.String(device_name, variant_level=1),
|
|
Packit Service |
8ebd8e |
'num-enroll-stages': dbus.Int32(num_enroll_stages, variant_level=1),
|
|
Packit Service |
8ebd8e |
'scan-type': scan_type
|
|
Packit Service |
8ebd8e |
}
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
self.AddObject(path,
|
|
Packit Service |
8ebd8e |
DEVICE_IFACE,
|
|
Packit Service |
8ebd8e |
# Properties
|
|
Packit Service |
8ebd8e |
device_properties,
|
|
Packit Service |
8ebd8e |
# Methods
|
|
Packit Service |
8ebd8e |
[
|
|
Packit Service |
8ebd8e |
('ListEnrolledFingers', 's', 'as', ListEnrolledFingers),
|
|
Packit Service |
8ebd8e |
('DeleteEnrolledFingers', 's', '', DeleteEnrolledFingers),
|
|
Packit Service |
8ebd8e |
('DeleteEnrolledFingers2', '', '', DeleteEnrolledFingers2),
|
|
Packit Service |
8ebd8e |
('Claim', 's', '', Claim),
|
|
Packit Service |
8ebd8e |
('Release', '', '', Release),
|
|
Packit Service |
8ebd8e |
('VerifyStart', 's', '', VerifyStart),
|
|
Packit Service |
8ebd8e |
('VerifyStop', '', '', VerifyStop),
|
|
Packit Service |
8ebd8e |
('EnrollStart', 's', '', EnrollStart),
|
|
Packit Service |
8ebd8e |
('EnrollStop', '', '', EnrollStop)
|
|
Packit Service |
8ebd8e |
])
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
device = mockobject.objects[path]
|
|
Packit Service |
8ebd8e |
device.fingers = {}
|
|
Packit Service |
8ebd8e |
device.has_identification = has_identification
|
|
Packit Service |
8ebd8e |
device.claimed_user = None
|
|
Packit Service |
8ebd8e |
device.action = None
|
|
Packit Service |
8ebd8e |
device.selected_finger = None
|
|
Packit Service |
8ebd8e |
device.verify_script = []
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
return path
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(MANAGER_MOCK_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='o')
|
|
Packit Service |
8ebd8e |
def RemoveDevice(self, path):
|
|
Packit Service |
8ebd8e |
# This isn't compatible with hotplugging devices, which fprintd doesn't
|
|
Packit Service |
8ebd8e |
# support yet, but it's meant to remove devices added to the mock for
|
|
Packit Service |
8ebd8e |
# testing purposes.
|
|
Packit Service |
8ebd8e |
if not path:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Invalid empty path.',
|
|
Packit Service |
8ebd8e |
name='org.freedesktop.DBus.Error.InvalidArgs')
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
self.RemoveObject(path)
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='s', out_signature='as')
|
|
Packit Service |
8ebd8e |
def ListEnrolledFingers(device, user):
|
|
Packit Service |
8ebd8e |
if user in device.fingers:
|
|
Packit Service |
8ebd8e |
return device.fingers[user]
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'No enrolled prints in device %s for user %s' % (device.path, user),
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.NoEnrolledPrints')
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='s', out_signature='')
|
|
Packit Service |
8ebd8e |
def DeleteEnrolledFingers(device, user):
|
|
Packit Service |
8ebd8e |
device.fingers[user] = []
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='', out_signature='')
|
|
Packit Service |
8ebd8e |
def DeleteEnrolledFingers2(device):
|
|
Packit Service |
8ebd8e |
if not device.claimed_user:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Device was not claimed before use',
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.ClaimDevice')
|
|
Packit Service |
8ebd8e |
device.fingers[device.claimed_user] = []
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='s', out_signature='')
|
|
Packit Service |
8ebd8e |
def Claim(device, user):
|
|
Packit Service |
8ebd8e |
if device.claimed_user:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Device already in use by %s' % device.claimed_user,
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.AlreadyInUse')
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
device.claimed_user = user
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='', out_signature='')
|
|
Packit Service |
8ebd8e |
def Release(device):
|
|
Packit Service |
8ebd8e |
if not device.claimed_user:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Device was not claimed before use',
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.ClaimDevice')
|
|
Packit Service |
8ebd8e |
device.claimed_user = None
|
|
Packit Service |
8ebd8e |
device.action = None
|
|
Packit Service |
8ebd8e |
device.selected_finger = None
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
def can_verify_finger(device, finger_name):
|
|
Packit Service |
8ebd8e |
# We should already have checked that there are enrolled fingers
|
|
Packit Service |
8ebd8e |
if finger_name == 'any':
|
|
Packit Service |
8ebd8e |
return True
|
|
Packit Service |
8ebd8e |
if finger_name in device.fingers[device.claimed_user]:
|
|
Packit Service |
8ebd8e |
return True
|
|
Packit Service |
8ebd8e |
return False
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
def glib_sleep(timeout):
|
|
Packit Service |
8ebd8e |
waiting = True
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
def done_waiting():
|
|
Packit Service |
8ebd8e |
nonlocal waiting
|
|
Packit Service |
8ebd8e |
waiting = False
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
GLib.timeout_add(timeout, done_waiting)
|
|
Packit Service |
8ebd8e |
while (waiting):
|
|
Packit Service |
8ebd8e |
GLib.main_context_default().iteration(True)
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
def device_run_script(device, result, done):
|
|
Packit Service |
8ebd8e |
if result == 'MOCK: quit':
|
|
Packit Service |
8ebd8e |
sys.exit(0)
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
# Emit signal
|
|
Packit Service |
8ebd8e |
device.EmitSignal(DEVICE_IFACE, 'VerifyStatus', 'sb', [
|
|
Packit Service |
8ebd8e |
result,
|
|
Packit Service |
8ebd8e |
done
|
|
Packit Service |
8ebd8e |
])
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='s', out_signature='')
|
|
Packit Service |
8ebd8e |
def VerifyStart(device, finger_name):
|
|
Packit Service |
8ebd8e |
if not device.claimed_user:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Device was not claimed before use',
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.ClaimDevice')
|
|
Packit Service |
8ebd8e |
if device.claimed_user not in device.fingers:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'No enrolled prints for user \'%s\'' % device.claimed_user,
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.NoEnrolledPrints')
|
|
Packit Service |
8ebd8e |
if not finger_name:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Invalid empty finger_name.',
|
|
Packit Service |
8ebd8e |
name='org.freedesktop.DBus.Error.InvalidArgs')
|
|
Packit Service |
8ebd8e |
if not can_verify_finger(device, finger_name):
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Finger \'%s\' not enrolled.' % finger_name,
|
|
Packit Service |
8ebd8e |
name='org.freedesktop.DBus.Error.Internal')
|
|
Packit Service |
8ebd8e |
if device.action:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Action \'%s\' already in progress' % device.action,
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.AlreadyInUse')
|
|
Packit Service |
8ebd8e |
device.action = 'verify'
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
if finger_name == 'any' and not device.has_identification:
|
|
Packit Service |
8ebd8e |
finger_name = device.fingers[device.claimed_user][0]
|
|
Packit Service |
8ebd8e |
device.selected_finger = finger_name
|
|
Packit Service |
8ebd8e |
# Needs to happen after method return
|
|
Packit Service |
8ebd8e |
GLib.idle_add(device.EmitSignal,
|
|
Packit Service |
8ebd8e |
DEVICE_IFACE, 'VerifyFingerSelected', 's', [
|
|
Packit Service |
8ebd8e |
device.selected_finger
|
|
Packit Service |
8ebd8e |
])
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
error = None
|
|
Packit Service |
8ebd8e |
base_delay = 0
|
|
Packit Service |
8ebd8e |
while device.verify_script is not None and len(device.verify_script) > 0:
|
|
Packit Service |
8ebd8e |
result, done, timeout = device.verify_script.pop(0)
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
# We stop when "timeout >= 0 and done"
|
|
Packit Service |
8ebd8e |
if result == 'MOCK: no-prints':
|
|
Packit Service |
8ebd8e |
# Special case to change return value of DBus call, ignores timeout
|
|
Packit Service |
8ebd8e |
error = dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'No enrolled prints for user \'%s\'' % device.claimed_user,
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.NoEnrolledPrints')
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
elif timeout < 0:
|
|
Packit Service |
8ebd8e |
# Negative timeouts mean emitting before the DBus call returns
|
|
Packit Service |
8ebd8e |
device_run_script(device, result, done)
|
|
Packit Service |
8ebd8e |
glib_sleep(-timeout)
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
else:
|
|
Packit Service |
8ebd8e |
# Positive or zero means emitting afterwards the given timeout
|
|
Packit Service |
8ebd8e |
base_delay += timeout
|
|
Packit Service |
8ebd8e |
GLib.timeout_add(base_delay,
|
|
Packit Service |
8ebd8e |
device_run_script,
|
|
Packit Service |
8ebd8e |
device,
|
|
Packit Service |
8ebd8e |
result,
|
|
Packit Service |
8ebd8e |
done)
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
# Stop processing commands when the done flag is set
|
|
Packit Service |
8ebd8e |
if done:
|
|
Packit Service |
8ebd8e |
break
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
if error:
|
|
Packit Service |
8ebd8e |
raise error
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_MOCK_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='sb', out_signature='')
|
|
Packit Service |
8ebd8e |
def EmitVerifyStatus(device, result, done):
|
|
Packit Service |
8ebd8e |
if (not device.action) or (device.action != 'verify'):
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Cannot send verify statuses when not verifying',
|
|
Packit Service |
8ebd8e |
name='org.freedesktop.DBus.Error.InvalidArgs')
|
|
Packit Service |
8ebd8e |
if result not in VALID_VERIFY_STATUS:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Unknown verify status \'%s\'' % result,
|
|
Packit Service |
8ebd8e |
name='org.freedesktop.DBus.Error.InvalidArgs')
|
|
Packit Service |
8ebd8e |
device.EmitSignal(DEVICE_IFACE, 'VerifyStatus', 'sb', [
|
|
Packit Service |
8ebd8e |
result,
|
|
Packit Service |
8ebd8e |
done
|
|
Packit Service |
8ebd8e |
])
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='', out_signature='')
|
|
Packit Service |
8ebd8e |
def VerifyStop(device):
|
|
Packit Service |
8ebd8e |
if device.action != 'verify':
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'No verification to stop',
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.NoActionInProgress')
|
|
Packit Service |
8ebd8e |
device.action = None
|
|
Packit Service |
8ebd8e |
device.selected_finger = None
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='s', out_signature='')
|
|
Packit Service |
8ebd8e |
def EnrollStart(device, finger_name):
|
|
Packit Service |
8ebd8e |
if finger_name not in VALID_FINGER_NAMES:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Invalid finger name \'%s\'' % finger_name,
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.InvalidFingername')
|
|
Packit Service |
8ebd8e |
if not device.claimed_user:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Device was not claimed before use',
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.ClaimDevice')
|
|
Packit Service |
8ebd8e |
if device.action:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Action \'%s\' already in progress' % device.action,
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.AlreadyInUse')
|
|
Packit Service |
8ebd8e |
device.action = 'enroll'
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_MOCK_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='sb', out_signature='')
|
|
Packit Service |
8ebd8e |
def EmitEnrollStatus(device, result, done):
|
|
Packit Service |
8ebd8e |
if (not device.action) or (device.action != 'enroll'):
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Cannot send enroll statuses when not enrolling',
|
|
Packit Service |
8ebd8e |
name='org.freedesktop.DBus.Error.InvalidArgs')
|
|
Packit Service |
8ebd8e |
if result not in VALID_ENROLL_STATUS:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Unknown enroll status \'%s\'' % result,
|
|
Packit Service |
8ebd8e |
name='org.freedesktop.DBus.Error.InvalidArgs')
|
|
Packit Service |
8ebd8e |
device.EmitSignal(DEVICE_IFACE, 'EnrollStatus', 'sb', [
|
|
Packit Service |
8ebd8e |
result,
|
|
Packit Service |
8ebd8e |
done
|
|
Packit Service |
8ebd8e |
])
|
|
Packit Service |
8ebd8e |
# FIXME save enrolled finger?
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='', out_signature='')
|
|
Packit Service |
8ebd8e |
def EnrollStop(device):
|
|
Packit Service |
8ebd8e |
if device.action != 'enroll':
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'No enrollment to stop',
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.NoActionInProgress')
|
|
Packit Service |
8ebd8e |
device.action = None
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_MOCK_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='sas', out_signature='')
|
|
Packit Service |
8ebd8e |
def SetEnrolledFingers(device, user, fingers):
|
|
Packit Service |
8ebd8e |
'''Convenience method to set the list of enrolled fingers.
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
The device_path is the return value from AddDevice(), and the
|
|
Packit Service |
8ebd8e |
array of fingers must only contain valid finger names.
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
Returns nothing.
|
|
Packit Service |
8ebd8e |
'''
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
for k in fingers:
|
|
Packit Service |
8ebd8e |
if k not in VALID_FINGER_NAMES:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Invalid finger name \'%s\'' % k,
|
|
Packit Service |
8ebd8e |
name='org.freedesktop.DBus.Error.InvalidArgs')
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
device.fingers[user] = fingers
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_MOCK_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='', out_signature='s')
|
|
Packit Service |
8ebd8e |
def GetSelectedFinger(device):
|
|
Packit Service |
8ebd8e |
'''Convenience method to get the finger under verification
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
Returns the finger name that the user has selected for verifying
|
|
Packit Service |
8ebd8e |
'''
|
|
Packit Service |
8ebd8e |
if not device.selected_finger:
|
|
Packit Service |
8ebd8e |
raise dbus.exceptions.DBusException(
|
|
Packit Service |
8ebd8e |
'Device is not verifying',
|
|
Packit Service |
8ebd8e |
name='net.reactivated.Fprint.Error.NoActionInProgress')
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
return device.selected_finger
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_MOCK_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='', out_signature='b')
|
|
Packit Service |
8ebd8e |
def HasIdentification(device):
|
|
Packit Service |
8ebd8e |
'''Convenience method to get if a device supports identification
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
Returns whether identification is supported.
|
|
Packit Service |
8ebd8e |
'''
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
return device.has_identification
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_MOCK_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='a(sbi)', out_signature='')
|
|
Packit Service |
8ebd8e |
def SetVerifyScript(device, script):
|
|
Packit Service |
8ebd8e |
'''Convenience method to set the verification script.
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
After VerifyStart is called, signal results will be sent in order after
|
|
Packit Service |
8ebd8e |
a certain timeout declared in seconds. The array contains each
|
|
Packit Service |
8ebd8e |
'result' followed by the 'done' argument for VerifyStatus, and the
|
|
Packit Service |
8ebd8e |
amount of time to wait before each signal is sent.
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
Returns nothing.
|
|
Packit Service |
8ebd8e |
'''
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
device.verify_script = script
|
|
Packit Service |
8ebd8e |
|
|
Packit Service |
8ebd8e |
@dbus.service.method(DEVICE_MOCK_IFACE,
|
|
Packit Service |
8ebd8e |
in_signature='s', out_signature='')
|
|
Packit Service |
8ebd8e |
def SetClaimed(device, user):
|
|
Packit Service |
8ebd8e |
if user == '':
|
|
Packit Service |
8ebd8e |
device.claimed_user = None
|
|
Packit Service |
8ebd8e |
else:
|
|
Packit Service |
8ebd8e |
device.claimed_user = user
|