mirror of
https://github.com/Yubico/yubioath-flutter.git
synced 2024-11-22 00:12:09 +03:00
Merge PR #116.
This commit is contained in:
commit
ce78d7a25a
@ -25,8 +25,10 @@ class _AndroidManagementStateNotifier extends ManagementStateNotifier {
|
||||
void refresh() async {}
|
||||
|
||||
@override
|
||||
Future<void> setMode(int mode,
|
||||
{int challengeResponseTimeout = 0, int autoEjectTimeout = 0}) async {}
|
||||
Future<void> setMode(
|
||||
{required int interfaces,
|
||||
int challengeResponseTimeout = 0,
|
||||
int? autoEjectTimeout}) async {}
|
||||
|
||||
@override
|
||||
Future<void> writeConfig(DeviceConfig config,
|
||||
|
@ -68,13 +68,16 @@ class _DesktopManagementStateNotifier extends ManagementStateNotifier {
|
||||
});
|
||||
|
||||
@override
|
||||
Future<void> setMode(int mode,
|
||||
{int challengeResponseTimeout = 0, int autoEjectTimeout = 0}) async {
|
||||
Future<void> setMode(
|
||||
{required int interfaces,
|
||||
int challengeResponseTimeout = 0,
|
||||
int? autoEjectTimeout}) async {
|
||||
await _session.command('set_mode', target: _subpath, params: {
|
||||
'mode': mode,
|
||||
'interfaces': interfaces,
|
||||
'challenge_response_timeout': challengeResponseTimeout,
|
||||
'auto_eject_timeout': autoEjectTimeout,
|
||||
});
|
||||
_ref.read(attachedDevicesProvider.notifier).refresh();
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -16,6 +16,9 @@ abstract class ManagementStateNotifier
|
||||
String newLockCode = '',
|
||||
bool reboot = false});
|
||||
|
||||
Future<void> setMode(int mode,
|
||||
{int challengeResponseTimeout = 0, int autoEjectTimeout = 0});
|
||||
Future<void> setMode({
|
||||
required int interfaces,
|
||||
int challengeResponseTimeout = 0,
|
||||
int? autoEjectTimeout,
|
||||
});
|
||||
}
|
||||
|
@ -45,53 +45,25 @@ class _CapabilityForm extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
class _ModeForm extends StatefulWidget {
|
||||
final int initialInterfaces;
|
||||
final Function(int) onSubmit;
|
||||
const _ModeForm(this.initialInterfaces, {required this.onSubmit, Key? key})
|
||||
class _ModeForm extends StatelessWidget {
|
||||
final int interfaces;
|
||||
final Function(int) onChanged;
|
||||
const _ModeForm(this.interfaces, {required this.onChanged, Key? key})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() => _ModeFormState();
|
||||
}
|
||||
|
||||
class _ModeFormState extends State<_ModeForm> {
|
||||
int _enabledInterfaces = 0;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_enabledInterfaces = widget.initialInterfaces;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final valid = _enabledInterfaces != 0 &&
|
||||
_enabledInterfaces != widget.initialInterfaces;
|
||||
return Column(children: [
|
||||
...UsbInterface.values.map(
|
||||
(iface) => CheckboxListTile(
|
||||
title: Text(iface.name.toUpperCase()),
|
||||
value: iface.value & _enabledInterfaces != 0,
|
||||
value: iface.value & interfaces != 0,
|
||||
onChanged: (_) {
|
||||
setState(() {
|
||||
_enabledInterfaces ^= iface.value;
|
||||
});
|
||||
onChanged(interfaces ^ iface.value);
|
||||
},
|
||||
),
|
||||
),
|
||||
Container(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
alignment: Alignment.centerRight,
|
||||
child: ElevatedButton(
|
||||
onPressed: valid
|
||||
? () {
|
||||
widget.onSubmit(_enabledInterfaces);
|
||||
}
|
||||
: null,
|
||||
child: const Text('Apply changes'),
|
||||
),
|
||||
)
|
||||
Text(interfaces == 0 ? 'At least one interface must be enabled' : ''),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@ -156,11 +128,14 @@ class ManagementScreen extends ConsumerStatefulWidget {
|
||||
|
||||
class _ManagementScreenState extends ConsumerState<ManagementScreen> {
|
||||
late Map<Transport, int> _enabled;
|
||||
late int _interfaces;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_enabled = widget.deviceData.info.config.enabledCapabilities;
|
||||
_interfaces = UsbInterfaces.forCapabilites(
|
||||
widget.deviceData.info.config.enabledCapabilities[Transport.usb] ?? 0);
|
||||
}
|
||||
|
||||
Widget _buildCapabilitiesForm(
|
||||
@ -216,11 +191,34 @@ class _ManagementScreenState extends ConsumerState<ManagementScreen> {
|
||||
|
||||
Widget _buildModeForm(BuildContext context, WidgetRef ref, DeviceInfo info) =>
|
||||
_ModeForm(
|
||||
UsbInterfaces.forCapabilites(
|
||||
info.config.enabledCapabilities[Transport.usb] ?? 0),
|
||||
onSubmit: (enabledInterfaces) {
|
||||
showMessage(context, 'Not yet implemented!');
|
||||
});
|
||||
_interfaces,
|
||||
onChanged: (interfaces) {
|
||||
setState(() {
|
||||
_interfaces = interfaces;
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
void _submitModeForm() async {
|
||||
await ref
|
||||
.read(managementStateProvider(widget.deviceData.node.path).notifier)
|
||||
.setMode(interfaces: _interfaces);
|
||||
showMessage(
|
||||
context,
|
||||
widget.deviceData.node.maybeMap(
|
||||
nfcReader: (_) => 'Configuration updated',
|
||||
orElse: () =>
|
||||
'Configuration updated, remove and reinsert your YubiKey'));
|
||||
Navigator.pop(context);
|
||||
}
|
||||
|
||||
void _submitForm() {
|
||||
if (widget.deviceData.info.version.major > 4) {
|
||||
_submitCapabilitiesForm();
|
||||
} else {
|
||||
_submitModeForm();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -229,7 +227,7 @@ class _ManagementScreenState extends ConsumerState<ManagementScreen> {
|
||||
Navigator.of(context).popUntil((route) => route.isFirst);
|
||||
});
|
||||
|
||||
bool changed = false;
|
||||
bool canSave = false;
|
||||
|
||||
return ResponsiveDialog(
|
||||
title: const Text('Toggle applications'),
|
||||
@ -238,14 +236,26 @@ class _ManagementScreenState extends ConsumerState<ManagementScreen> {
|
||||
loading: () => const AppLoadingScreen(),
|
||||
error: (error, _) => AppFailureScreen('$error'),
|
||||
data: (info) {
|
||||
bool hasConfig = info.version.major > 4;
|
||||
// TODO: Check mode for < YK5 intead
|
||||
changed = !_mapEquals(
|
||||
_enabled,
|
||||
info.config.enabledCapabilities,
|
||||
);
|
||||
if (hasConfig) {
|
||||
canSave = !_mapEquals(
|
||||
_enabled,
|
||||
info.config.enabledCapabilities,
|
||||
);
|
||||
} else {
|
||||
canSave = _interfaces != 0 &&
|
||||
_interfaces !=
|
||||
UsbInterfaces.forCapabilites(widget
|
||||
.deviceData
|
||||
.info
|
||||
.config
|
||||
.enabledCapabilities[Transport.usb] ??
|
||||
0);
|
||||
}
|
||||
return Column(
|
||||
children: [
|
||||
info.version.major > 4
|
||||
hasConfig
|
||||
? _buildCapabilitiesForm(context, ref, info)
|
||||
: _buildModeForm(context, ref, info),
|
||||
],
|
||||
@ -254,7 +264,7 @@ class _ManagementScreenState extends ConsumerState<ManagementScreen> {
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: changed ? _submitCapabilitiesForm : null,
|
||||
onPressed: canSave ? _submitForm : null,
|
||||
child: const Text('Save'),
|
||||
),
|
||||
],
|
||||
|
175
ykman-rpc/poetry.lock
generated
175
ykman-rpc/poetry.lock
generated
@ -41,7 +41,7 @@ pycparser = "*"
|
||||
|
||||
[[package]]
|
||||
name = "click"
|
||||
version = "8.1.2"
|
||||
version = "8.1.3"
|
||||
description = "Composable command line interface toolkit"
|
||||
category = "main"
|
||||
optional = false
|
||||
@ -60,7 +60,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
||||
|
||||
[[package]]
|
||||
name = "cryptography"
|
||||
version = "36.0.2"
|
||||
version = "37.0.2"
|
||||
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
|
||||
category = "main"
|
||||
optional = false
|
||||
@ -75,28 +75,21 @@ docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling
|
||||
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
|
||||
sdist = ["setuptools_rust (>=0.11.4)"]
|
||||
ssh = ["bcrypt (>=3.1.5)"]
|
||||
test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
|
||||
test = ["pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
|
||||
|
||||
[[package]]
|
||||
name = "fido2"
|
||||
version = "1.0.0-dev0"
|
||||
version = "1.0.0rc1"
|
||||
description = "FIDO2/WebAuthn library for implementing clients and servers."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "^3.6"
|
||||
develop = false
|
||||
python-versions = ">=3.7,<4.0"
|
||||
|
||||
[package.dependencies]
|
||||
cryptography = ">=2.1, !=35, <39"
|
||||
cryptography = ">=2.6,<35 || >35,<39"
|
||||
|
||||
[package.extras]
|
||||
pcsc = ["pyscard (>=1.9,<3.0.0)"]
|
||||
|
||||
[package.source]
|
||||
type = "git"
|
||||
url = "https://github.com/Yubico/python-fido2.git"
|
||||
reference = "fd30409"
|
||||
resolved_reference = "fd30409b032a75ff879f444f4e43b2ce00a02fbe"
|
||||
pcsc = ["pyscard (>=1.9,<3)"]
|
||||
|
||||
[[package]]
|
||||
name = "future"
|
||||
@ -270,7 +263,7 @@ hook_testing = ["pytest (>=2.7.3)", "execnet (>=1.5.0)", "psutil"]
|
||||
|
||||
[[package]]
|
||||
name = "pyinstaller-hooks-contrib"
|
||||
version = "2022.3"
|
||||
version = "2022.4"
|
||||
description = "Community maintained hooks for PyInstaller"
|
||||
category = "dev"
|
||||
optional = false
|
||||
@ -278,14 +271,14 @@ python-versions = ">=3.7"
|
||||
|
||||
[[package]]
|
||||
name = "pyparsing"
|
||||
version = "3.0.7"
|
||||
description = "Python parsing module"
|
||||
version = "3.0.8"
|
||||
description = "pyparsing module - Classes and methods to define and execute parsing grammars"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
python-versions = ">=3.6.8"
|
||||
|
||||
[package.extras]
|
||||
diagrams = ["jinja2", "railroad-diagrams"]
|
||||
diagrams = ["railroad-diagrams", "jinja2"]
|
||||
|
||||
[[package]]
|
||||
name = "pyscard"
|
||||
@ -301,7 +294,7 @@ Pyro = ["pyro"]
|
||||
|
||||
[[package]]
|
||||
name = "pytest"
|
||||
version = "7.1.1"
|
||||
version = "7.1.2"
|
||||
description = "pytest: simple powerful testing with Python"
|
||||
category = "dev"
|
||||
optional = false
|
||||
@ -322,7 +315,7 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.
|
||||
|
||||
[[package]]
|
||||
name = "pywin32"
|
||||
version = "303"
|
||||
version = "304"
|
||||
description = "Python for Window Extensions"
|
||||
category = "main"
|
||||
optional = false
|
||||
@ -338,7 +331,7 @@ python-versions = "*"
|
||||
|
||||
[[package]]
|
||||
name = "secretstorage"
|
||||
version = "3.3.1"
|
||||
version = "3.3.2"
|
||||
description = "Python bindings to FreeDesktop.org Secret Service API"
|
||||
category = "main"
|
||||
optional = false
|
||||
@ -362,13 +355,13 @@ version = "5.0.0-dev0"
|
||||
description = "Tool for managing your YubiKey configuration."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "^3.6"
|
||||
python-versions = "^3.7"
|
||||
develop = false
|
||||
|
||||
[package.dependencies]
|
||||
click = "^6.0 || ^7.0 || ^8.0"
|
||||
cryptography = ">=2.5, <39"
|
||||
fido2 = ">=0.9, <2.0"
|
||||
cryptography = ">=2.6, <39"
|
||||
fido2 = "1.0.0rc1"
|
||||
keyring = "^23.4"
|
||||
pyscard = "^1.9 || ^2.0"
|
||||
pywin32 = {version = ">=223", markers = "sys_platform == \"win32\""}
|
||||
@ -376,8 +369,8 @@ pywin32 = {version = ">=223", markers = "sys_platform == \"win32\""}
|
||||
[package.source]
|
||||
type = "git"
|
||||
url = "https://github.com/Yubico/yubikey-manager.git"
|
||||
reference = "22a72b2"
|
||||
resolved_reference = "22a72b23b2cb8a52001bf23b770e0045956bdeb7"
|
||||
reference = "next"
|
||||
resolved_reference = "61b902b5f61024b27f32ef88b2f95bb7630afdfb"
|
||||
|
||||
[[package]]
|
||||
name = "zipp"
|
||||
@ -393,7 +386,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
|
||||
|
||||
[[package]]
|
||||
name = "zxing-cpp"
|
||||
version = "1.2.0"
|
||||
version = "1.3.0"
|
||||
description = "Python bindings for the zxing-cpp barcode library"
|
||||
category = "main"
|
||||
optional = false
|
||||
@ -405,7 +398,7 @@ numpy = "*"
|
||||
[metadata]
|
||||
lock-version = "1.1"
|
||||
python-versions = "^3.8"
|
||||
content-hash = "2b8b3413c3ad288a38aa9c3d573f895b0c4cc5435a80cc182c5c682a7258e472"
|
||||
content-hash = "04aaecbad4bcfea25ea9070c13eec47f06a2f8d7155d1a96c9dafac7780c8805"
|
||||
|
||||
[metadata.files]
|
||||
altgraph = [
|
||||
@ -473,36 +466,41 @@ cffi = [
|
||||
{file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
|
||||
]
|
||||
click = [
|
||||
{file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
|
||||
{file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
|
||||
{file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
|
||||
{file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
|
||||
]
|
||||
colorama = [
|
||||
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
|
||||
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
|
||||
]
|
||||
cryptography = [
|
||||
{file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6"},
|
||||
{file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:4881d09298cd0b669bb15b9cfe6166f16fc1277b4ed0d04a22f3d6430cb30f1d"},
|
||||
{file = "cryptography-36.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea634401ca02367c1567f012317502ef3437522e2fc44a3ea1844de028fa4b84"},
|
||||
{file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7be666cc4599b415f320839e36367b273db8501127b38316f3b9f22f17a0b815"},
|
||||
{file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8241cac0aae90b82d6b5c443b853723bcc66963970c67e56e71a2609dc4b5eaf"},
|
||||
{file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b2d54e787a884ffc6e187262823b6feb06c338084bbe80d45166a1cb1c6c5bf"},
|
||||
{file = "cryptography-36.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:c2c5250ff0d36fd58550252f54915776940e4e866f38f3a7866d92b32a654b86"},
|
||||
{file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ec6597aa85ce03f3e507566b8bcdf9da2227ec86c4266bd5e6ab4d9e0cc8dab2"},
|
||||
{file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ca9f686517ec2c4a4ce930207f75c00bf03d94e5063cbc00a1dc42531511b7eb"},
|
||||
{file = "cryptography-36.0.2-cp36-abi3-win32.whl", hash = "sha256:f64b232348ee82f13aac22856515ce0195837f6968aeaa94a3d0353ea2ec06a6"},
|
||||
{file = "cryptography-36.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:53e0285b49fd0ab6e604f4c5d9c5ddd98de77018542e88366923f152dbeb3c29"},
|
||||
{file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:32db5cc49c73f39aac27574522cecd0a4bb7384e71198bc65a0d23f901e89bb7"},
|
||||
{file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b3d199647468d410994dbeb8cec5816fb74feb9368aedf300af709ef507e3e"},
|
||||
{file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:da73d095f8590ad437cd5e9faf6628a218aa7c387e1fdf67b888b47ba56a17f0"},
|
||||
{file = "cryptography-36.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0a3bf09bb0b7a2c93ce7b98cb107e9170a90c51a0162a20af1c61c765b90e60b"},
|
||||
{file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8897b7b7ec077c819187a123174b645eb680c13df68354ed99f9b40a50898f77"},
|
||||
{file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82740818f2f240a5da8dfb8943b360e4f24022b093207160c77cadade47d7c85"},
|
||||
{file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1f64a62b3b75e4005df19d3b5235abd43fa6358d5516cfc43d87aeba8d08dd51"},
|
||||
{file = "cryptography-36.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e167b6b710c7f7bc54e67ef593f8731e1f45aa35f8a8a7b72d6e42ec76afd4b3"},
|
||||
{file = "cryptography-36.0.2.tar.gz", hash = "sha256:70f8f4f7bb2ac9f340655cbac89d68c527af5bb4387522a8413e841e3e6628c9"},
|
||||
{file = "cryptography-37.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:ef15c2df7656763b4ff20a9bc4381d8352e6640cfeb95c2972c38ef508e75181"},
|
||||
{file = "cryptography-37.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3c81599befb4d4f3d7648ed3217e00d21a9341a9a688ecdd615ff72ffbed7336"},
|
||||
{file = "cryptography-37.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2bd1096476aaac820426239ab534b636c77d71af66c547b9ddcd76eb9c79e004"},
|
||||
{file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:31fe38d14d2e5f787e0aecef831457da6cec68e0bb09a35835b0b44ae8b988fe"},
|
||||
{file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:093cb351031656d3ee2f4fa1be579a8c69c754cf874206be1d4cf3b542042804"},
|
||||
{file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59b281eab51e1b6b6afa525af2bd93c16d49358404f814fe2c2410058623928c"},
|
||||
{file = "cryptography-37.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:0cc20f655157d4cfc7bada909dc5cc228211b075ba8407c46467f63597c78178"},
|
||||
{file = "cryptography-37.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f8ec91983e638a9bcd75b39f1396e5c0dc2330cbd9ce4accefe68717e6779e0a"},
|
||||
{file = "cryptography-37.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:46f4c544f6557a2fefa7ac8ac7d1b17bf9b647bd20b16decc8fbcab7117fbc15"},
|
||||
{file = "cryptography-37.0.2-cp36-abi3-win32.whl", hash = "sha256:731c8abd27693323b348518ed0e0705713a36d79fdbd969ad968fbef0979a7e0"},
|
||||
{file = "cryptography-37.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:471e0d70201c069f74c837983189949aa0d24bb2d751b57e26e3761f2f782b8d"},
|
||||
{file = "cryptography-37.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a68254dd88021f24a68b613d8c51d5c5e74d735878b9e32cc0adf19d1f10aaf9"},
|
||||
{file = "cryptography-37.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:a7d5137e556cc0ea418dca6186deabe9129cee318618eb1ffecbd35bee55ddc1"},
|
||||
{file = "cryptography-37.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aeaba7b5e756ea52c8861c133c596afe93dd716cbcacae23b80bc238202dc023"},
|
||||
{file = "cryptography-37.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95e590dd70642eb2079d280420a888190aa040ad20f19ec8c6e097e38aa29e06"},
|
||||
{file = "cryptography-37.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1b9362d34363f2c71b7853f6251219298124aa4cc2075ae2932e64c91a3e2717"},
|
||||
{file = "cryptography-37.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e53258e69874a306fcecb88b7534d61820db8a98655662a3dd2ec7f1afd9132f"},
|
||||
{file = "cryptography-37.0.2-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:1f3bfbd611db5cb58ca82f3deb35e83af34bb8cf06043fa61500157d50a70982"},
|
||||
{file = "cryptography-37.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:419c57d7b63f5ec38b1199a9521d77d7d1754eb97827bbb773162073ccd8c8d4"},
|
||||
{file = "cryptography-37.0.2-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:dc26bb134452081859aa21d4990474ddb7e863aa39e60d1592800a8865a702de"},
|
||||
{file = "cryptography-37.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b8398b3d0efc420e777c40c16764d6870bcef2eb383df9c6dbb9ffe12c64452"},
|
||||
{file = "cryptography-37.0.2.tar.gz", hash = "sha256:f224ad253cc9cea7568f49077007d2263efa57396a2f2f78114066fd54b5c68e"},
|
||||
]
|
||||
fido2 = [
|
||||
{file = "fido2-1.0.0rc1-py3-none-any.whl", hash = "sha256:9ae3a021b0f90ad03ab2c5da3d7ad40841052e6d39607f8f649d8c9af183089d"},
|
||||
{file = "fido2-1.0.0rc1.tar.gz", hash = "sha256:fa4180ac150ffb4eb71b1b06e08755edd2062e1ef368cfc0059f265e0e4256af"},
|
||||
]
|
||||
fido2 = []
|
||||
future = [
|
||||
{file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"},
|
||||
]
|
||||
@ -624,12 +622,12 @@ pyinstaller = [
|
||||
{file = "pyinstaller-4.10.tar.gz", hash = "sha256:7749c868d2e2dc84df7d6f65437226183c8a366f3a99bb2737785625c3a3cca1"},
|
||||
]
|
||||
pyinstaller-hooks-contrib = [
|
||||
{file = "pyinstaller-hooks-contrib-2022.3.tar.gz", hash = "sha256:9fa4ca03d058cba676c3cc16005076ce6a529f144c08b87c69998625fbd84e0a"},
|
||||
{file = "pyinstaller_hooks_contrib-2022.3-py2.py3-none-any.whl", hash = "sha256:9765e68552803327d58f6c5eca970bb245b7cdf073e2f912a2a3cb50360bc2d8"},
|
||||
{file = "pyinstaller-hooks-contrib-2022.4.tar.gz", hash = "sha256:b7f7da20e5b83c22219a21b8f849525e5f735197975313208f4e07ff9549cdaf"},
|
||||
{file = "pyinstaller_hooks_contrib-2022.4-py2.py3-none-any.whl", hash = "sha256:b57a90bb8520d6e1dbbaaae416875e28fa5a3b74d2e40e330d02d1ccadacc38c"},
|
||||
]
|
||||
pyparsing = [
|
||||
{file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
|
||||
{file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
|
||||
{file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
|
||||
{file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
|
||||
]
|
||||
pyscard = [
|
||||
{file = "pyscard-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:f7748157d293f57688307f94d780c93bd3ceaf309b39b92a0af792bf1ddb82e7"},
|
||||
@ -639,30 +637,32 @@ pyscard = [
|
||||
{file = "pyscard-2.0.3.tar.gz", hash = "sha256:13c3e108163fac4f1237804ed20c5b1eb1bd5d5ee3e96adb60bfb6b9122f528d"},
|
||||
]
|
||||
pytest = [
|
||||
{file = "pytest-7.1.1-py3-none-any.whl", hash = "sha256:92f723789a8fdd7180b6b06483874feca4c48a5c76968e03bb3e7f806a1869ea"},
|
||||
{file = "pytest-7.1.1.tar.gz", hash = "sha256:841132caef6b1ad17a9afde46dc4f6cfa59a05f9555aae5151f73bdf2820ca63"},
|
||||
{file = "pytest-7.1.2-py3-none-any.whl", hash = "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"},
|
||||
{file = "pytest-7.1.2.tar.gz", hash = "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"},
|
||||
]
|
||||
pywin32 = [
|
||||
{file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"},
|
||||
{file = "pywin32-303-cp310-cp310-win_amd64.whl", hash = "sha256:51cb52c5ec6709f96c3f26e7795b0bf169ee0d8395b2c1d7eb2c029a5008ed51"},
|
||||
{file = "pywin32-303-cp311-cp311-win32.whl", hash = "sha256:d9b5d87ca944eb3aa4cd45516203ead4b37ab06b8b777c54aedc35975dec0dee"},
|
||||
{file = "pywin32-303-cp311-cp311-win_amd64.whl", hash = "sha256:fcf44032f5b14fcda86028cdf49b6ebdaea091230eb0a757282aa656e4732439"},
|
||||
{file = "pywin32-303-cp36-cp36m-win32.whl", hash = "sha256:aad484d52ec58008ca36bd4ad14a71d7dd0a99db1a4ca71072213f63bf49c7d9"},
|
||||
{file = "pywin32-303-cp36-cp36m-win_amd64.whl", hash = "sha256:2a09632916b6bb231ba49983fe989f2f625cea237219530e81a69239cd0c4559"},
|
||||
{file = "pywin32-303-cp37-cp37m-win32.whl", hash = "sha256:b1675d82bcf6dbc96363fca747bac8bff6f6e4a447a4287ac652aa4b9adc796e"},
|
||||
{file = "pywin32-303-cp37-cp37m-win_amd64.whl", hash = "sha256:c268040769b48a13367221fced6d4232ed52f044ffafeda247bd9d2c6bdc29ca"},
|
||||
{file = "pywin32-303-cp38-cp38-win32.whl", hash = "sha256:5f9ec054f5a46a0f4dfd72af2ce1372f3d5a6e4052af20b858aa7df2df7d355b"},
|
||||
{file = "pywin32-303-cp38-cp38-win_amd64.whl", hash = "sha256:793bf74fce164bcffd9d57bb13c2c15d56e43c9542a7b9687b4fccf8f8a41aba"},
|
||||
{file = "pywin32-303-cp39-cp39-win32.whl", hash = "sha256:7d3271c98434617a11921c5ccf74615794d97b079e22ed7773790822735cc352"},
|
||||
{file = "pywin32-303-cp39-cp39-win_amd64.whl", hash = "sha256:79cbb862c11b9af19bcb682891c1b91942ec2ff7de8151e2aea2e175899cda34"},
|
||||
{file = "pywin32-304-cp310-cp310-win32.whl", hash = "sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3"},
|
||||
{file = "pywin32-304-cp310-cp310-win_amd64.whl", hash = "sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48"},
|
||||
{file = "pywin32-304-cp310-cp310-win_arm64.whl", hash = "sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f"},
|
||||
{file = "pywin32-304-cp311-cp311-win32.whl", hash = "sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269"},
|
||||
{file = "pywin32-304-cp311-cp311-win_amd64.whl", hash = "sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4"},
|
||||
{file = "pywin32-304-cp311-cp311-win_arm64.whl", hash = "sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43"},
|
||||
{file = "pywin32-304-cp36-cp36m-win32.whl", hash = "sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1"},
|
||||
{file = "pywin32-304-cp36-cp36m-win_amd64.whl", hash = "sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988"},
|
||||
{file = "pywin32-304-cp37-cp37m-win32.whl", hash = "sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5"},
|
||||
{file = "pywin32-304-cp37-cp37m-win_amd64.whl", hash = "sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df"},
|
||||
{file = "pywin32-304-cp38-cp38-win32.whl", hash = "sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96"},
|
||||
{file = "pywin32-304-cp38-cp38-win_amd64.whl", hash = "sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e"},
|
||||
{file = "pywin32-304-cp39-cp39-win32.whl", hash = "sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc"},
|
||||
{file = "pywin32-304-cp39-cp39-win_amd64.whl", hash = "sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9"},
|
||||
]
|
||||
pywin32-ctypes = [
|
||||
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
|
||||
{file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"},
|
||||
]
|
||||
secretstorage = [
|
||||
{file = "SecretStorage-3.3.1-py3-none-any.whl", hash = "sha256:422d82c36172d88d6a0ed5afdec956514b189ddbfb72fefab0c8a1cee4eaf71f"},
|
||||
{file = "SecretStorage-3.3.1.tar.gz", hash = "sha256:fd666c51a6bf200643495a04abb261f83229dcb6fd8472ec393df7ffc8b6f195"},
|
||||
{file = "SecretStorage-3.3.2-py3-none-any.whl", hash = "sha256:755dc845b6ad76dcbcbc07ea3da75ae54bb1ea529eb72d15f83d26499a5df319"},
|
||||
{file = "SecretStorage-3.3.2.tar.gz", hash = "sha256:0a8eb9645b320881c222e827c26f4cfcf55363e8b374a021981ef886657a912f"},
|
||||
]
|
||||
tomli = [
|
||||
{file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
|
||||
@ -674,20 +674,19 @@ zipp = [
|
||||
{file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
|
||||
]
|
||||
zxing-cpp = [
|
||||
{file = "zxing-cpp-1.2.0.tar.gz", hash = "sha256:342b71872844e1b703b04e1f5a60bf1932ff1b7389974ce9f1fc63d19ebb32b4"},
|
||||
{file = "zxing_cpp-1.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3f7d0996e291c6e36030e29611e5728c3d5b426e6e839b842f305d8c3d4691d9"},
|
||||
{file = "zxing_cpp-1.2.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:c5668ba3ae488d1faf056bc1061112e55b0363dc196bfe9e24f995a8f91f9a84"},
|
||||
{file = "zxing_cpp-1.2.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:080c991e277efef984e1b017be166128a4c35639de75395875048825db4366d3"},
|
||||
{file = "zxing_cpp-1.2.0-cp37-cp37m-win32.whl", hash = "sha256:738216a2b96c61c43eda810a6858b81472467adddd6e712e0ead1250cfb396a2"},
|
||||
{file = "zxing_cpp-1.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:09baf7e96e871b95f2295e8383e749de9da709328f181aff3e3a82c8b044a24c"},
|
||||
{file = "zxing_cpp-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:189f8d476f5bb8a4027a681963625941671d1eecbe4d5755ba5aae61fe8d9f35"},
|
||||
{file = "zxing_cpp-1.2.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:4024e7e9452a85e4a05e5f2c65216e46533c31964c4d77c3b4e0e28f66182b20"},
|
||||
{file = "zxing_cpp-1.2.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:715911447c8a361c0ed2add860e186755651ba540ef7c947986b82bccd417dba"},
|
||||
{file = "zxing_cpp-1.2.0-cp38-cp38-win32.whl", hash = "sha256:1ac49f1e750d9383a15d93de47f8f60587561f74b3377f8aa678e2e77062e9a8"},
|
||||
{file = "zxing_cpp-1.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:37b008de65808479ce8697f7b62ca24a8880322dea79bc690e8cc6f705a29e1b"},
|
||||
{file = "zxing_cpp-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:190386da493ab2fa133a83fea6964cf90ea22fa18770c3783594ed0310b91018"},
|
||||
{file = "zxing_cpp-1.2.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2f83363b4f96d0bd83748ed76f78f2a5452c4c5df42c74538e11d38e49bf3b13"},
|
||||
{file = "zxing_cpp-1.2.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:3ee7d5208474cc81901e17a89a42258d4e6da8693d51a831bb5eb6bfa6da19fb"},
|
||||
{file = "zxing_cpp-1.2.0-cp39-cp39-win32.whl", hash = "sha256:04726ec5da54ff92b8fe8735050685722631aaef96126d068dab59d4dde6e568"},
|
||||
{file = "zxing_cpp-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:f5929c1f950027f1eb74fd3fd2ceecd6da649b9293dc9cbbad2d3bac2214ace1"},
|
||||
{file = "zxing-cpp-1.3.0.tar.gz", hash = "sha256:5f30545afad01a278fc8c17efae11d82e36f8c2caa87c89096aec5a8d69103b2"},
|
||||
{file = "zxing_cpp-1.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3a6e183b6c0aae9378f674f9e7714a39482595915cf15198d10b9ba8c33b25f"},
|
||||
{file = "zxing_cpp-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88eadb723d20655caf81a6ba6ef64d74a266f57cbd782da82736c52a61a73fa5"},
|
||||
{file = "zxing_cpp-1.3.0-cp310-cp310-win32.whl", hash = "sha256:15fb165ada1730ab0d96b67eb2d9827870d9ae534686e27541f3b3add15b96d7"},
|
||||
{file = "zxing_cpp-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:8dbb17a31ee1ac2c946a96e83b170ecefbc87a52b9c35b41809d9afff77d8879"},
|
||||
{file = "zxing_cpp-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31578db20ba0668e010cb62e4718cb86f47563ec5122e29a0746651ff1e13735"},
|
||||
{file = "zxing_cpp-1.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9253a3b6c8c143f3c22d172922226b10c8cc319d2554c73107fefce7e263daaa"},
|
||||
{file = "zxing_cpp-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:250afd201f08bd1be8fd349766e32ef184a463b616c13102b2f80a4422695957"},
|
||||
{file = "zxing_cpp-1.3.0-cp38-cp38-win32.whl", hash = "sha256:d2891dfba5c53b913867e7b01b8b430d801e15e54f53b3c05b9645dc824dfed3"},
|
||||
{file = "zxing_cpp-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:6201e60cbefbc8de90c5f18e6e25c3cb1be19be8f369bf4dad3ab910b954f29d"},
|
||||
{file = "zxing_cpp-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:44467984c1a65a332c8656926f30af1752c1ff774c6a030b95572e0a1543b23b"},
|
||||
{file = "zxing_cpp-1.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0dbb54f8694063376d73be6f7dbddd39f3e7907ab885403d90cff7d518c54f7f"},
|
||||
{file = "zxing_cpp-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3cff8a7fe960c2016bc8e217fcf02b9b1ac61b17fc5c0c5158f853088be4ad9"},
|
||||
{file = "zxing_cpp-1.3.0-cp39-cp39-win32.whl", hash = "sha256:f75431cf7cddcb21c267d39a5895831a3c20abfa7676426974652d25b29ae429"},
|
||||
{file = "zxing_cpp-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:de9dd0a2d01969e9828c5704d709b2559a417fea562bd2f308ebc8d4a9678b5e"},
|
||||
]
|
||||
|
@ -6,8 +6,8 @@ authors = ["Dain Nilsson <dain@yubico.com>"]
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.8"
|
||||
yubikey-manager = { git = "https://github.com/Yubico/yubikey-manager.git", rev = "22a72b2" }
|
||||
fido2 = { git = "https://github.com/Yubico/python-fido2.git", rev = "fd30409" }
|
||||
yubikey-manager = { git = "https://github.com/Yubico/yubikey-manager.git", branch = "next" }
|
||||
fido2 = {version = "1.0.0rc1", allow-prereleases = true}
|
||||
mss = "^6.1.0"
|
||||
zxing-cpp = "^1.2.0"
|
||||
Pillow = "^8|^9"
|
||||
|
@ -194,4 +194,4 @@ def run_rpc_socket(sock):
|
||||
return json.loads(line)
|
||||
return None
|
||||
|
||||
run_rpc(send, recv)
|
||||
run_rpc(send, recv)
|
||||
|
@ -181,12 +181,13 @@ class RpcNode:
|
||||
|
||||
def create_child(self, name):
|
||||
child = getattr(self, name, None)
|
||||
options = getattr(child, MARKER_CHILD, None)
|
||||
if options is not None:
|
||||
condition = options["condition"]
|
||||
if condition and not condition(self):
|
||||
raise NoSuchNodeException(name)
|
||||
return child()
|
||||
if child is not None:
|
||||
options = getattr(child, MARKER_CHILD, None)
|
||||
if options is not None:
|
||||
condition = options["condition"]
|
||||
if condition and not condition(self):
|
||||
raise NoSuchNodeException(name)
|
||||
return child()
|
||||
raise NoSuchNodeException(name)
|
||||
|
||||
def _close_child(self):
|
||||
|
@ -34,18 +34,14 @@ from .management import ManagementNode
|
||||
from .qr import scan_qr
|
||||
from ykman import __version__ as ykman_version
|
||||
from ykman.base import PID
|
||||
from ykman.device import (
|
||||
scan_devices,
|
||||
list_all_devices,
|
||||
get_name,
|
||||
read_info,
|
||||
)
|
||||
from ykman.device import scan_devices, list_all_devices
|
||||
from ykman.diagnostics import get_diagnostics
|
||||
from ykman.logging import set_log_level
|
||||
from yubikit.core import TRANSPORT
|
||||
from yubikit.core.smartcard import SmartCardConnection, ApduError, SW
|
||||
from yubikit.core.otp import OtpConnection
|
||||
from yubikit.core.fido import FidoConnection
|
||||
from yubikit.support import get_name, read_info
|
||||
from yubikit.management import CAPABILITY
|
||||
from yubikit.logging import LOG_LEVEL
|
||||
|
||||
@ -199,7 +195,7 @@ class DevicesNode(RpcNode):
|
||||
else:
|
||||
dev_id = _id_from_fingerprint(dev.fingerprint)
|
||||
self._device_mapping[dev_id] = (dev, info)
|
||||
name = get_name(info, dev.pid.get_type() if dev.pid else None)
|
||||
name = get_name(info, dev.pid.yubikey_type if dev.pid else None)
|
||||
self._devices[dev_id] = dict(pid=dev.pid, name=name, serial=info.serial)
|
||||
|
||||
if sum(state[0].values()) == len(self._devices):
|
||||
@ -249,8 +245,8 @@ class AbstractDeviceNode(RpcNode):
|
||||
try:
|
||||
with self._device.open_connection(conn_type) as conn:
|
||||
pid = self._device.pid
|
||||
self._info = read_info(pid, conn)
|
||||
name = get_name(self._info, pid.get_type() if pid else None)
|
||||
self._info = read_info(conn, pid)
|
||||
name = get_name(self._info, pid.yubikey_type if pid else None)
|
||||
return dict(
|
||||
pid=pid,
|
||||
name=name,
|
||||
@ -296,13 +292,13 @@ class ReaderDeviceNode(AbstractDeviceNode):
|
||||
@child
|
||||
def ccid(self):
|
||||
connection = self._device.open_connection(SmartCardConnection)
|
||||
info = read_info(None, connection)
|
||||
info = read_info(connection)
|
||||
return ConnectionNode(self._device, connection, info)
|
||||
|
||||
@child
|
||||
def fido(self):
|
||||
with self._device.open_connection(SmartCardConnection) as conn:
|
||||
info = read_info(None, conn)
|
||||
info = read_info(conn)
|
||||
connection = self._device.open_connection(FidoConnection)
|
||||
return ConnectionNode(self._device, connection, info)
|
||||
|
||||
@ -313,7 +309,7 @@ class ConnectionNode(RpcNode):
|
||||
self._device = device
|
||||
self._transport = device.transport
|
||||
self._connection = connection
|
||||
self._info = info or read_info(device.pid, self._connection)
|
||||
self._info = info or read_info(self._connection, device.pid)
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
try:
|
||||
@ -342,7 +338,7 @@ class ConnectionNode(RpcNode):
|
||||
isinstance(self._connection, SmartCardConnection)
|
||||
or self._transport == TRANSPORT.USB
|
||||
):
|
||||
self._info = read_info(self._device.pid, self._connection)
|
||||
self._info = read_info(self._connection, self._device.pid)
|
||||
return dict(version=self._info.version, serial=self._info.serial)
|
||||
|
||||
@child(
|
||||
|
@ -31,7 +31,7 @@ from yubikit.core import require_version, NotSupportedError, TRANSPORT
|
||||
from yubikit.core.smartcard import SmartCardConnection
|
||||
from yubikit.core.otp import OtpConnection
|
||||
from yubikit.core.fido import FidoConnection
|
||||
from yubikit.management import ManagementSession, DeviceConfig, Mode, USB_INTERFACE
|
||||
from yubikit.management import ManagementSession, DeviceConfig, Mode
|
||||
from ykman.device import connect_to_device
|
||||
from dataclasses import asdict
|
||||
from time import sleep
|
||||
@ -62,25 +62,16 @@ class ManagementNode(RpcNode):
|
||||
return actions
|
||||
|
||||
def _await_reboot(self, serial, usb_enabled):
|
||||
# TODO: Clean up once "support" is merged into ykman.
|
||||
iface = USB_INTERFACE.for_capabilities(usb_enabled)
|
||||
connection_types = []
|
||||
ifaces = usb_enabled.usb_interfaces
|
||||
|
||||
# Prefer to use the "same" connection type as before
|
||||
if iface.supports_connection(self._connection_type):
|
||||
if issubclass(self._connection_type, SmartCardConnection):
|
||||
connection_types = [SmartCardConnection]
|
||||
elif issubclass(self._connection_type, OtpConnection):
|
||||
connection_types = [OtpConnection]
|
||||
elif issubclass(self._connection_type, FidoConnection):
|
||||
connection_types = [FidoConnection]
|
||||
|
||||
# Allow any expected connection type
|
||||
if not connection_types:
|
||||
if self._connection_type.usb_interface in ifaces:
|
||||
connection_types = [self._connection_type]
|
||||
else:
|
||||
connection_types = [
|
||||
t
|
||||
for t in [SmartCardConnection, OtpConnection, FidoConnection]
|
||||
if iface.supports_connection(t)
|
||||
if ifaces.supports_connection(t)
|
||||
]
|
||||
|
||||
self.session.close()
|
||||
@ -117,8 +108,8 @@ class ManagementNode(RpcNode):
|
||||
@action
|
||||
def set_mode(self, params, event, signal):
|
||||
self.session.set_mode(
|
||||
Mode.from_code(params["mode"]),
|
||||
Mode(params["interfaces"]),
|
||||
params.pop("challenge_response_timeout", 0),
|
||||
params.pop("auto_eject_timeout", 0),
|
||||
params.pop("auto_eject_timeout"),
|
||||
)
|
||||
return dict()
|
||||
|
@ -61,10 +61,11 @@ class KEYSTORE(str, Enum):
|
||||
|
||||
class OathNode(RpcNode):
|
||||
_keystore_state = KEYSTORE.UNKNOWN
|
||||
_oath_keys = None
|
||||
|
||||
@classmethod
|
||||
def _get_keys(cls):
|
||||
if not hasattr(cls, "_oath_keys"):
|
||||
if not cls._oath_keys:
|
||||
cls._oath_keys = AppData("oath_keys")
|
||||
return cls._oath_keys
|
||||
|
||||
|
@ -5,8 +5,8 @@ import io
|
||||
from PIL import Image
|
||||
|
||||
|
||||
def scan_qr(image_data = None):
|
||||
if (image_data):
|
||||
def scan_qr(image_data=None):
|
||||
if image_data:
|
||||
msg = base64.b64decode(image_data)
|
||||
buf = io.BytesIO(msg)
|
||||
img = Image.open(buf)
|
||||
|
@ -39,6 +39,7 @@ from yubikit.yubiotp import (
|
||||
YubiOtpSlotConfiguration,
|
||||
StaticTicketSlotConfiguration,
|
||||
)
|
||||
from typing import Dict
|
||||
|
||||
|
||||
class YubiOtpNode(RpcNode):
|
||||
@ -48,7 +49,7 @@ class YubiOtpNode(RpcNode):
|
||||
|
||||
def get_data(self):
|
||||
state = self.session.get_config_state()
|
||||
data = {}
|
||||
data: Dict[str, bool] = {}
|
||||
try:
|
||||
data.update(
|
||||
slot1_configured=state.is_configured(SLOT.ONE),
|
||||
@ -97,7 +98,7 @@ class SlotNode(RpcNode):
|
||||
|
||||
def get_data(self):
|
||||
self._state = self.session.get_config_state()
|
||||
data = {}
|
||||
data: Dict[str, bool] = {}
|
||||
try:
|
||||
data.update(is_configured=self._state.is_configured(self.slot))
|
||||
data.update(is_touch_triggered=self._state.is_touch_triggered(self.slot))
|
||||
|
Loading…
Reference in New Issue
Block a user