mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-04-07 11:26:45 +00:00
Add missing validation to avoid enqueue on fPort=0.
This commit is contained in:
parent
ce0df4b723
commit
0126286f75
@ -24,6 +24,18 @@ pub struct DeviceQueueItem {
|
||||
pub timeout_after: Option<DateTime<Utc>>,
|
||||
}
|
||||
|
||||
impl DeviceQueueItem {
|
||||
fn validate(&self) -> Result<(), Error> {
|
||||
if self.f_port == 0 || self.f_port > 255 {
|
||||
return Err(Error::Validation(
|
||||
"FPort must be between 1 - 255".to_string(),
|
||||
));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for DeviceQueueItem {
|
||||
fn default() -> Self {
|
||||
let now = Utc::now();
|
||||
@ -43,6 +55,8 @@ impl Default for DeviceQueueItem {
|
||||
}
|
||||
|
||||
pub async fn enqueue_item(qi: DeviceQueueItem) -> Result<DeviceQueueItem, Error> {
|
||||
qi.validate()?;
|
||||
|
||||
let qi = task::spawn_blocking({
|
||||
move || -> Result<DeviceQueueItem, Error> {
|
||||
let mut c = get_db_conn()?;
|
||||
@ -214,6 +228,23 @@ pub mod test {
|
||||
)
|
||||
.await;
|
||||
|
||||
// invalid fport
|
||||
let qi = DeviceQueueItem {
|
||||
dev_eui: d.dev_eui,
|
||||
f_port: 0,
|
||||
data: vec![0x01, 0x02, 0x03],
|
||||
..Default::default()
|
||||
};
|
||||
assert!(enqueue_item(qi).await.is_err());
|
||||
|
||||
let qi = DeviceQueueItem {
|
||||
dev_eui: d.dev_eui,
|
||||
f_port: 256,
|
||||
data: vec![0x01, 0x02, 0x03],
|
||||
..Default::default()
|
||||
};
|
||||
assert!(enqueue_item(qi).await.is_err());
|
||||
|
||||
// create
|
||||
let mut qi = DeviceQueueItem {
|
||||
dev_eui: d.dev_eui,
|
||||
|
Loading…
x
Reference in New Issue
Block a user