| 215 | } |
| 216 | |
| 217 | async fn list_integrations( |
| 218 | &self, |
| 219 | request: Request<api::ListIntegrationsRequest>, |
| 220 | ) -> Result<Response<api::ListIntegrationsResponse>, Status> { |
| 221 | let req = request.get_ref(); |
| 222 | let app_id = Uuid::from_str(&req.application_id).map_err(|e| e.status())?; |
| 223 | |
| 224 | self.validator |
| 225 | .validate( |
| 226 | request.extensions(), |
| 227 | validator::ValidateApplicationAccess::new(validator::Flag::Read, app_id), |
| 228 | ) |
| 229 | .await?; |
| 230 | |
| 231 | let result = application::get_integrations_for_application(&app_id) |
| 232 | .await |
| 233 | .map_err(|e| e.status())?; |
| 234 | |
| 235 | let mut items: Vec<api::IntegrationListItem> = result |
| 236 | .iter() |
| 237 | .map(|i| api::IntegrationListItem { |
| 238 | kind: match i.kind { |
| 239 | application::IntegrationKind::Http => api::IntegrationKind::Http, |
| 240 | application::IntegrationKind::InfluxDb => api::IntegrationKind::InfluxDb, |
| 241 | application::IntegrationKind::ThingsBoard => api::IntegrationKind::ThingsBoard, |
| 242 | application::IntegrationKind::MyDevices => api::IntegrationKind::MyDevices, |
| 243 | application::IntegrationKind::GcpPubSub => api::IntegrationKind::GcpPubSub, |
| 244 | application::IntegrationKind::AwsSns => api::IntegrationKind::AwsSns, |
| 245 | application::IntegrationKind::AzureServiceBus => { |
| 246 | api::IntegrationKind::AzureServiceBus |
| 247 | } |
| 248 | application::IntegrationKind::PilotThings => api::IntegrationKind::PilotThings, |
| 249 | application::IntegrationKind::Ifttt => api::IntegrationKind::Ifttt, |
| 250 | application::IntegrationKind::Blynk => api::IntegrationKind::Blynk, |
| 251 | } |
| 252 | .into(), |
| 253 | }) |
| 254 | .collect(); |
| 255 | items.push(api::IntegrationListItem { |
| 256 | kind: api::IntegrationKind::MqttGlobal.into(), |
| 257 | }); |
| 258 | |
| 259 | let mut resp = Response::new(api::ListIntegrationsResponse { |
| 260 | total_count: (result.len() + 1) as u32, |
| 261 | result: items, |
| 262 | }); |
| 263 | resp.metadata_mut() |
| 264 | .insert("x-log-application_id", req.application_id.parse().unwrap()); |
| 265 | |
| 266 | Ok(resp) |
| 267 | } |
| 268 | |
| 269 | async fn create_http_integration( |
| 270 | &self, |