mirror of
https://github.com/tauri-apps/plugins-workspace.git
synced 2026-09-20 21:20:42 +02:00
Merge commit from fork
Checks the URL scope on every hop of a redirect chain instead of only on the URL requested by the frontend. Without it, a server on an allowed origin can redirect the request to any other origin - including `localhost` services, internal hosts and cloud metadata endpoints - and the plugin follows it, returning the response to the webview.
This commit is contained in:
+22
-3
@@ -43,6 +43,21 @@
|
||||
//! - **tracing**: Adds request, response, and cookie-store diagnostics through `tracing`.
|
||||
//! - **unsafe-headers**: Allows webview requests to send any headers.
|
||||
//! - **dangerous-settings**: Allows dangerous client settings such as accepting invalid certificates or hostnames.
|
||||
//!
|
||||
//! ## Configuration
|
||||
//!
|
||||
//! See [`Config`] for the options that can be set on the `plugins > http` object of your
|
||||
//! `tauri.conf.json`:
|
||||
//!
|
||||
//! ```json
|
||||
//! {
|
||||
//! "plugins": {
|
||||
//! "http": {
|
||||
//! "scopeRedirects": true
|
||||
//! }
|
||||
//! }
|
||||
//! }
|
||||
//! ```
|
||||
|
||||
pub use reqwest;
|
||||
use tauri::{
|
||||
@@ -50,9 +65,11 @@ use tauri::{
|
||||
Manager, Runtime,
|
||||
};
|
||||
|
||||
pub use config::Config;
|
||||
pub use error::{Error, Result};
|
||||
|
||||
mod commands;
|
||||
mod config;
|
||||
mod error;
|
||||
#[cfg(feature = "cookies")]
|
||||
mod reqwest_cookie_store;
|
||||
@@ -62,13 +79,14 @@ mod scope;
|
||||
const COOKIES_FILENAME: &str = ".cookies";
|
||||
|
||||
pub(crate) struct Http {
|
||||
pub(crate) config: Config,
|
||||
#[cfg(feature = "cookies")]
|
||||
cookies_jar: std::sync::Arc<crate::reqwest_cookie_store::CookieStoreMutex>,
|
||||
}
|
||||
|
||||
pub fn init<R: Runtime>() -> TauriPlugin<R> {
|
||||
Builder::<R>::new("http")
|
||||
.setup(|app, _| {
|
||||
pub fn init<R: Runtime>() -> TauriPlugin<R, Option<Config>> {
|
||||
Builder::<R, Option<Config>>::new("http")
|
||||
.setup(|app, api| {
|
||||
#[cfg(feature = "cookies")]
|
||||
let cookies_jar = {
|
||||
use crate::reqwest_cookie_store::*;
|
||||
@@ -96,6 +114,7 @@ pub fn init<R: Runtime>() -> TauriPlugin<R> {
|
||||
};
|
||||
|
||||
let state = Http {
|
||||
config: api.config().clone().unwrap_or_default(),
|
||||
#[cfg(feature = "cookies")]
|
||||
cookies_jar: std::sync::Arc::new(cookies_jar),
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user