Skip to content

Commit f98ecf3

Browse files
committed
refactoring, improving security
1 parent 7642508 commit f98ecf3

12 files changed

Lines changed: 34 additions & 37 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "tauri-plugin-python"
3-
version = "0.1.0"
3+
version = "0.2.0"
44
authors = [ "Marco Mengelkoch" ]
55
description = ""
66
edition = "2021"

build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const COMMANDS: &[&str] = &[
1212

1313
fn main() {
1414
tauri_plugin::Builder::new(COMMANDS)
15-
.global_api_script_path("dist-js/index.iife.js")
15+
.global_api_script_path("./dist-js/index.iife.js")
1616
.android_path("android")
1717
.ios_path("ios")
1818
.build();

examples/plain-javascript/package.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@
44
"version": "0.1.0",
55
"type": "module",
66
"scripts": {
7-
"mkdirJs": "node -e \"const fs = require('fs'); if (!fs.existsSync('src/tauri-plugin-python-api')) { fs.mkdirSync('src/tauri-plugin-python-api');};\"",
8-
"copyJs": "node -e \"const fs = require('fs'); const data = fs.readFileSync('node_modules/tauri-plugin-python-api/dist-js/index.iife.js'); fs.writeFileSync('src/tauri-plugin-python-api/index.iife.js', data);\"",
9-
"build": "npm run mkdirJs & npm run copyJs",
10-
"pretauri": "npm run build",
117
"tauri": "tauri"
128
},
139
"dependencies": {

examples/plain-javascript/src-tauri/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ fn greet_rust(name: &str) -> String {
88
pub fn run() {
99
tauri::Builder::default()
1010
.invoke_handler(tauri::generate_handler![greet_rust])
11-
.plugin(tauri_plugin_python::init())
11+
.plugin(tauri_plugin_python::init(vec!["greet_python"]))
1212
.run(tauri::generate_context!())
1313
.expect("error while running tauri application");
1414
}

examples/plain-javascript/src/index.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
77
<title>Tauri App</title>
88
<script type="module" src="/main.js" defer></script>
9-
<script type="module" src="/tauri-plugin-python-api/index.iife.js" defer></script>
109
</head>
1110

1211
<body>

examples/plain-javascript/src/main.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ let outputEl;
55

66
async function greet_rust() {
77
// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
8-
outputEl.textContent = await tauri.invoke("greet_rust", { name: inputField.value });
8+
outputEl.textContent = await tauri.core.invoke("greet_rust", { name: inputField.value });
99
}
1010
async function greet_python() {
1111
outputEl.textContent = await tauri.python.call.greet_python(inputField.value);
1212
}
1313

1414
window.addEventListener("DOMContentLoaded", () => {
15-
tauri.python.registerFunction("greet_python", 1);
15+
tauri.python.registerJs("greet_python");
1616
inputField = document.querySelector("#input-field");
1717
outputEl = document.querySelector("#output-element");
1818
document.querySelector("#callback-form").addEventListener("submit", (e) => {

guest-js/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export async function registerFunction(
3737
numberOfArgs
3838
},
3939
}).then((r: any) => {
40-
registerJsOnly(pythonFunctionCall, jsFunctionName);
40+
registerJs(pythonFunctionCall, jsFunctionName);
4141
return r.value;
4242
});
4343
}
@@ -50,7 +50,7 @@ export async function registerFunction(
5050
* @param {string} pythonFunctionCall - The python function call, can contain one dot
5151
* @param {string} [jsFunctionName] - Name that is used in javscript: "call.jsFunctionName". Must not contain dots.
5252
*/
53-
export async function registerJsOnly(pythonFunctionCall: string, jsFunctionName?: string) {
53+
export async function registerJs(pythonFunctionCall: string, jsFunctionName?: string) {
5454
if (jsFunctionName === undefined) {
5555
jsFunctionName = pythonFunctionCall.replace(".", "_");
5656
}

permissions/autogenerated/reference.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
Default permissions for the plugin
44

5-
- `allow-register-function`
65
- `allow-call-function`
76
- `allow-read-variable`
87

permissions/default.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
[default]
22
description = "Default permissions for the plugin"
3-
permissions = ["allow-register-function", "allow-call-function", "allow-read-variable"]
4-
# "allow-run-python" is not enabled by default for security reasons
3+
permissions = ["allow-call-function", "allow-read-variable"]
4+
# "allow-register-function" is disabled due to the "secure by default" concept. It can be enabled if the UI isn't exposed via network and secured against XSS sufficiently.
5+
# "allow-run-python" is also disabled as it allows to run random python code. It must not be enabled if the UI is exposed via network.

src/lib.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ mod commands;
1919
mod error;
2020
mod models;
2121
mod py_lib;
22-
mod py_main_import;
2322

2423
pub use error::{Error, Result};
2524

@@ -40,7 +39,7 @@ impl<R: Runtime, T: Manager<R>> crate::PythonExt<R> for T {
4039
}
4140

4241
/// Initializes the plugin.
43-
pub fn init<R: Runtime>() -> TauriPlugin<R> {
42+
pub fn init<R: Runtime>(python_functions: Vec<&'static str>) -> TauriPlugin<R> {
4443
Builder::new("python")
4544
.invoke_handler(tauri::generate_handler![
4645
commands::run_python,
@@ -54,6 +53,9 @@ pub fn init<R: Runtime>() -> TauriPlugin<R> {
5453
#[cfg(desktop)]
5554
let python = desktop::init(app, api)?;
5655
app.manage(python);
56+
for function_name in python_functions {
57+
py_lib::register_function_str(function_name.into(), None)?;
58+
}
5759
Ok(())
5860
})
5961
.build()

0 commit comments

Comments
 (0)