Skip to content

Commit f4ce954

Browse files
committed
Decouple device info getter from U2FDevice
1 parent 9ced5c0 commit f4ce954

File tree

10 files changed

+60
-40
lines changed

10 files changed

+60
-40
lines changed

src/freebsd/device.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::os::unix::prelude::*;
1111

1212
use crate::consts::{CID_BROADCAST, MAX_HID_RPT_SIZE};
1313
use crate::platform::uhid;
14-
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo};
14+
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo, U2FInfoQueryable};
1515
use crate::util::from_unix_result;
1616

1717
#[derive(Debug)]
@@ -100,13 +100,15 @@ impl U2FDevice for Device {
100100
Err(io::Error::new(io::ErrorKind::Other, "Not implemented"))
101101
}
102102

103+
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
104+
self.dev_info = Some(dev_info);
105+
}
106+
}
107+
108+
impl U2FInfoQueryable for Device {
103109
fn get_device_info(&self) -> U2FDeviceInfo {
104110
// unwrap is okay, as dev_info must have already been set, else
105111
// a programmer error
106112
self.dev_info.clone().unwrap()
107113
}
108-
109-
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
110-
self.dev_info = Some(dev_info);
111-
}
112114
}

src/linux/device.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::os::unix::prelude::*;
1111

1212
use crate::consts::CID_BROADCAST;
1313
use crate::platform::{hidraw, monitor};
14-
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo};
14+
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo, U2FInfoQueryable};
1515
use crate::util::from_unix_result;
1616

1717
#[derive(Debug)]
@@ -100,13 +100,15 @@ impl U2FDevice for Device {
100100
monitor::get_property_linux(&self.path, prop_name)
101101
}
102102

103+
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
104+
self.dev_info = Some(dev_info);
105+
}
106+
}
107+
108+
impl U2FInfoQueryable for Device {
103109
fn get_device_info(&self) -> U2FDeviceInfo {
104110
// unwrap is okay, as dev_info must have already been set, else
105111
// a programmer error
106112
self.dev_info.clone().unwrap()
107113
}
108-
109-
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
110-
self.dev_info = Some(dev_info);
111-
}
112114
}

src/macos/device.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ extern crate log;
66

77
use crate::consts::{CID_BROADCAST, MAX_HID_RPT_SIZE};
88
use crate::platform::iokit::*;
9-
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo};
9+
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo, U2FInfoQueryable};
1010
use core_foundation::base::*;
1111
use core_foundation::string::*;
1212
use std::convert::TryInto;
@@ -144,13 +144,15 @@ impl U2FDevice for Device {
144144
unsafe { self.get_property_macos(prop_name) }
145145
}
146146

147+
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
148+
self.dev_info = Some(dev_info);
149+
}
150+
}
151+
152+
impl U2FInfoQueryable for Device {
147153
fn get_device_info(&self) -> U2FDeviceInfo {
148154
// unwrap is okay, as dev_info must have already been set, else
149155
// a programmer error
150156
self.dev_info.clone().unwrap()
151157
}
152-
153-
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
154-
self.dev_info = Some(dev_info);
155-
}
156158
}

src/netbsd/device.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use crate::consts::CID_BROADCAST;
1313
use crate::consts::MAX_HID_RPT_SIZE;
1414
use crate::platform::fd::Fd;
1515
use crate::platform::uhid;
16-
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo};
16+
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo, U2FInfoQueryable};
1717
use crate::util::io_err;
1818

1919
#[derive(Debug)]
@@ -147,13 +147,15 @@ impl U2FDevice for Device {
147147
Err(io::Error::new(io::ErrorKind::Other, "Not implemented"))
148148
}
149149

150+
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
151+
self.dev_info = Some(dev_info);
152+
}
153+
}
154+
155+
impl U2FInfoQueryable for Device {
150156
fn get_device_info(&self) -> U2FDeviceInfo {
151157
// unwrap is okay, as dev_info must have already been set, else
152158
// a programmer error
153159
self.dev_info.clone().unwrap()
154160
}
155-
156-
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
157-
self.dev_info = Some(dev_info);
158-
}
159161
}

src/openbsd/device.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use std::mem;
1010

1111
use crate::consts::{CID_BROADCAST, MAX_HID_RPT_SIZE};
1212
use crate::platform::monitor::FidoDev;
13-
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo};
13+
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo, U2FInfoQueryable};
1414
use crate::util::{from_unix_result, io_err};
1515

1616
#[derive(Debug)]
@@ -135,13 +135,15 @@ impl U2FDevice for Device {
135135
Err(io::Error::new(io::ErrorKind::Other, "Not implemented"))
136136
}
137137

138+
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
139+
self.dev_info = Some(dev_info);
140+
}
141+
}
142+
143+
impl U2FInfoQueryable for Device {
138144
fn get_device_info(&self) -> U2FDeviceInfo {
139145
// unwrap is okay, as dev_info must have already been set, else
140146
// a programmer error
141147
self.dev_info.clone().unwrap()
142148
}
143-
144-
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
145-
self.dev_info = Some(dev_info);
146-
}
147149
}

src/statemachine.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::platform::device::Device;
88
use crate::platform::transaction::Transaction;
99
use crate::statecallback::StateCallback;
1010
use crate::apdu::{u2f_is_keyhandle_valid, u2f_register, u2f_sign, APDUDevice};
11-
use crate::u2ftypes::U2FDevice;
11+
use crate::u2ftypes::U2FInfoQueryable;
1212

1313
use std::sync::mpsc::Sender;
1414
use std::sync::Mutex;

src/stub/device.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* License, v. 2.0. If a copy of the MPL was not distributed with this
33
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
44

5-
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo};
5+
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo, U2FInfoQueryable};
66
use std::io;
77
use std::io::{Read, Write};
88

@@ -55,11 +55,13 @@ impl U2FDevice for Device {
5555
panic!("not implemented")
5656
}
5757

58-
fn get_device_info(&self) -> U2FDeviceInfo {
58+
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
5959
panic!("not implemented")
6060
}
61+
}
6162

62-
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
63+
impl U2FInfoQueryable for Device {
64+
fn get_device_info(&self) -> U2FDeviceInfo {
6365
panic!("not implemented")
6466
}
6567
}

src/u2fprotocol.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ where
109109
mod tests {
110110
use rand::{thread_rng, RngCore};
111111

112-
use super::{init_device, sendrecv, U2FDevice};
112+
use super::{init_device, sendrecv, U2FDevice, U2FInfoQueryable};
113113
use crate::apdu::APDUDevice;
114114
use crate::consts::{CID_BROADCAST, SW_NO_ERROR, U2FHID_INIT, U2FHID_MSG, U2FHID_PING};
115115

@@ -118,7 +118,7 @@ mod tests {
118118
use std::io::{Read, Write};
119119

120120
use crate::consts::CID_BROADCAST;
121-
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo};
121+
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo, U2FInfoQueryable};
122122

123123
const IN_HID_RPT_SIZE: usize = 64;
124124
const OUT_HID_RPT_SIZE: usize = 64;
@@ -211,14 +211,17 @@ mod tests {
211211
fn get_property(&self, prop_name: &str) -> io::Result<String> {
212212
Ok(format!("{} not implemented", prop_name))
213213
}
214-
fn get_device_info(&self) -> U2FDeviceInfo {
215-
self.dev_info.clone().unwrap()
216-
}
217214

218215
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
219216
self.dev_info = Some(dev_info);
220217
}
221218
}
219+
220+
impl U2FInfoQueryable for TestDevice {
221+
fn get_device_info(&self) -> U2FDeviceInfo {
222+
self.dev_info.clone().unwrap()
223+
}
224+
}
222225
}
223226

224227
#[test]

src/u2ftypes.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,13 @@ pub trait U2FDevice {
4141
}
4242

4343
fn get_property(&self, prop_name: &str) -> io::Result<String>;
44-
fn get_device_info(&self) -> U2FDeviceInfo;
4544
fn set_device_info(&mut self, dev_info: U2FDeviceInfo);
4645
}
4746

47+
pub trait U2FInfoQueryable {
48+
fn get_device_info(&self) -> U2FDeviceInfo;
49+
}
50+
4851
// Init structure for U2F Communications. Tells the receiver what channel
4952
// communication is happening on, what command is running, and how much data to
5053
// expect to receive over all.

src/windows/device.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use std::os::windows::io::AsRawHandle;
99

1010
use super::winapi::DeviceCapabilities;
1111
use crate::consts::{CID_BROADCAST, FIDO_USAGE_PAGE, FIDO_USAGE_U2FHID, MAX_HID_RPT_SIZE};
12-
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo};
12+
use crate::u2ftypes::{U2FDevice, U2FDeviceInfo, U2FInfoQueryable};
1313

1414
#[derive(Debug)]
1515
pub struct Device {
@@ -85,13 +85,15 @@ impl U2FDevice for Device {
8585
Err(io::Error::new(io::ErrorKind::Other, "Not implemented"))
8686
}
8787

88+
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
89+
self.dev_info = Some(dev_info);
90+
}
91+
}
92+
93+
impl U2FInfoQueryable for Device {
8894
fn get_device_info(&self) -> U2FDeviceInfo {
8995
// unwrap is okay, as dev_info must have already been set, else
9096
// a programmer error
9197
self.dev_info.clone().unwrap()
9298
}
93-
94-
fn set_device_info(&mut self, dev_info: U2FDeviceInfo) {
95-
self.dev_info = Some(dev_info);
96-
}
9799
}

0 commit comments

Comments
 (0)