feat(acl): generate schema for scope (#8690)

* feat(acl): generate schema for scope

* allow plugin to define its global scope schema

* refactor to use schemas folder instead of individual files

* change signature

* delete .schema.json files
This commit is contained in:
Lucas Fernandes Nogueira 2024-01-29 13:36:31 -03:00 committed by GitHub
parent f998fa0ec2
commit 57e3d43d96
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
136 changed files with 338 additions and 154 deletions

View File

@ -3,7 +3,7 @@
// SPDX-License-Identifier: MIT
use std::{
collections::BTreeMap,
collections::{BTreeMap, BTreeSet},
fs::{copy, create_dir_all, read_to_string, File},
io::{BufWriter, Write},
path::PathBuf,
@ -11,7 +11,10 @@ use std::{
use anyhow::{Context, Result};
use schemars::{
schema::{InstanceType, Metadata, RootSchema, Schema, SchemaObject, SubschemaValidation},
schema::{
ArrayValidation, InstanceType, Metadata, ObjectValidation, RootSchema, Schema, SchemaObject,
SubschemaValidation,
},
schema_for,
};
use tauri_utils::{
@ -81,6 +84,90 @@ fn capabilities_schema(plugin_manifests: &BTreeMap<String, Manifest>) -> RootSch
}));
}
if let Some(Schema::Object(obj)) = schema.definitions.get_mut("PermissionEntry") {
let permission_entry_any_of_schemas = obj.subschemas().any_of.as_mut().unwrap();
if let Schema::Object(mut scope_extended_schema_obj) =
permission_entry_any_of_schemas.remove(permission_entry_any_of_schemas.len() - 1)
{
let mut global_scope_one_of = Vec::new();
for (plugin, manifest) in plugin_manifests {
if let Some(global_scope_schema) = &manifest.global_scope_schema {
let global_scope_schema_def: Schema = serde_json::from_value(global_scope_schema.clone())
.unwrap_or_else(|e| panic!("invalid JSON schema for plugin {plugin}: {e}"));
let global_scope_schema = Schema::Object(SchemaObject {
array: Some(Box::new(ArrayValidation {
items: Some(global_scope_schema_def.into()),
..Default::default()
})),
..Default::default()
});
let mut required = BTreeSet::new();
required.insert("identifier".to_string());
let mut object = ObjectValidation {
required,
..Default::default()
};
let mut permission_schemas = Vec::new();
if let Some(default) = &manifest.default_permission {
permission_schemas.push(schema_from(plugin, "default", Some(&default.description)));
}
for set in manifest.permission_sets.values() {
permission_schemas.push(schema_from(plugin, &set.identifier, Some(&set.description)));
}
for permission in manifest.permissions.values() {
permission_schemas.push(schema_from(
plugin,
&permission.identifier,
permission.description.as_deref(),
));
}
let identifier_schema = Schema::Object(SchemaObject {
subschemas: Some(Box::new(SubschemaValidation {
one_of: Some(permission_schemas),
..Default::default()
})),
..Default::default()
});
object
.properties
.insert("identifier".to_string(), identifier_schema);
object
.properties
.insert("allow".to_string(), global_scope_schema.clone());
object
.properties
.insert("deny".to_string(), global_scope_schema);
global_scope_one_of.push(Schema::Object(SchemaObject {
instance_type: Some(InstanceType::Object.into()),
object: Some(Box::new(object)),
..Default::default()
}));
}
}
if !global_scope_one_of.is_empty() {
scope_extended_schema_obj.object = None;
scope_extended_schema_obj
.subschemas
.replace(Box::new(SubschemaValidation {
one_of: Some(global_scope_one_of),
..Default::default()
}));
permission_entry_any_of_schemas.push(scope_extended_schema_obj.into());
};
}
}
schema
}
@ -135,10 +222,13 @@ pub fn save_plugin_manifests(plugin_manifests: &BTreeMap<String, Manifest>) -> R
pub fn get_plugin_manifests() -> Result<BTreeMap<String, Manifest>> {
let permission_map =
tauri_utils::acl::build::read_permissions().context("failed to read plugin permissions")?;
let mut global_scope_map = tauri_utils::acl::build::read_global_scope_schemas()
.context("failed to read global scope schemas")?;
let mut processed = BTreeMap::new();
for (plugin_name, permission_files) in permission_map {
processed.insert(plugin_name, Manifest::from_files(permission_files));
let manifest = Manifest::new(permission_files, global_scope_map.remove(&plugin_name));
processed.insert(plugin_name, manifest);
}
Ok(processed)

View File

@ -26,6 +26,7 @@ tauri = { version = "2.0.0-alpha.20", default-features = false, path = "../tauri
serde_json = { version = "1", optional = true }
glob = { version = "0.3", optional = true }
toml = { version = "0.8", optional = true }
schemars = "0.8"
[package.metadata.docs.rs]
features = ["build", "runtime"]

View File

@ -2,18 +2,28 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
use std::path::Path;
use std::path::{Path, PathBuf};
use cargo_metadata::{Metadata, MetadataCommand};
use tauri::utils::acl::{self, Error};
pub struct Builder<'a> {
commands: &'a [&'static str],
global_scope_schema: Option<schemars::schema::RootSchema>,
}
impl<'a> Builder<'a> {
pub fn new(commands: &'a [&'static str]) -> Self {
Self { commands }
Self {
commands,
global_scope_schema: None,
}
}
/// Sets the global scope JSON schema.
pub fn global_scope_schema(mut self, schema: schemars::schema::RootSchema) -> Self {
self.global_scope_schema.replace(schema);
self
}
/// [`Self::try_build`] but will exit automatically if an error is found.
@ -37,6 +47,8 @@ impl<'a> Builder<'a> {
return Err(Error::CrateName);
}
let out_dir = PathBuf::from(build_var("OUT_DIR")?);
// requirement: links MUST be set and MUST match the name
let _links = build_var("CARGO_MANIFEST_LINKS")?;
@ -47,9 +59,14 @@ impl<'a> Builder<'a> {
acl::build::autogenerate_command_permissions(commands_dir, self.commands, "");
}
let permissions = acl::build::define_permissions("./permissions/**/*.*", &name)?;
let permissions = acl::build::define_permissions("./permissions/**/*.*", &name, &out_dir)?;
acl::build::generate_schema(&permissions, "./permissions")?;
if let Some(global_scope_schema) = self.global_scope_schema {
acl::build::define_global_scope_schema(global_scope_schema, &name, &out_dir)?;
}
let metadata = find_metadata()?;
println!("{metadata:#?}");

View File

@ -7,7 +7,7 @@
use std::{
collections::{BTreeMap, HashMap},
env::{current_dir, vars_os},
fs::{create_dir_all, read_to_string, File},
fs::{create_dir_all, read_to_string, write, File},
io::{BufWriter, Write},
path::{Path, PathBuf},
};
@ -24,11 +24,17 @@ use super::{capability::Capability, plugin::PermissionFile};
/// Cargo cfg key for permissions file paths
pub const PERMISSION_FILES_PATH_KEY: &str = "PERMISSION_FILES_PATH";
/// Cargo cfg key for global scope schemas
pub const GLOBAL_SCOPE_SCHEMA_PATH_KEY: &str = "GLOBAL_SCOPE_SCHEMA_PATH";
/// Allowed permission file extensions
pub const PERMISSION_FILE_EXTENSIONS: &[&str] = &["json", "toml"];
/// Known filename of a permission schema
pub const PERMISSION_SCHEMA_FILE_NAME: &str = ".schema.json";
/// Known foldername of the permission schema files
pub const PERMISSION_SCHEMAS_FOLDER_NAME: &str = "schemas";
/// Known filename of the permission schema JSON file
pub const PERMISSION_SCHEMA_FILE_NAME: &str = "schema.json";
/// Allowed capability file extensions
const CAPABILITY_FILE_EXTENSIONS: &[&str] = &["json", "toml"];
@ -52,7 +58,11 @@ pub enum CapabilityFile {
}
/// Write the permissions to a temporary directory and pass it to the immediate consuming crate.
pub fn define_permissions(pattern: &str, pkg_name: &str) -> Result<Vec<PermissionFile>, Error> {
pub fn define_permissions(
pattern: &str,
pkg_name: &str,
out_dir: &Path,
) -> Result<Vec<PermissionFile>, Error> {
let permission_files = glob::glob(pattern)?
.flatten()
.flat_map(|p| p.canonicalize())
@ -63,19 +73,15 @@ pub fn define_permissions(pattern: &str, pkg_name: &str) -> Result<Vec<Permissio
.map(|e| PERMISSION_FILE_EXTENSIONS.contains(&e))
.unwrap_or_default()
})
// filter schema file
.filter(|p| {
p.file_name()
.map(|name| name != PERMISSION_SCHEMA_FILE_NAME)
.unwrap_or(true)
})
// filter schemas
.filter(|p| p.parent().unwrap().file_name().unwrap() != PERMISSION_SCHEMAS_FOLDER_NAME)
.collect::<Vec<PathBuf>>();
for path in &permission_files {
println!("cargo:rerun-if-changed={}", path.display());
}
let permission_files_path = std::env::temp_dir().join(format!("{}-permission-files", pkg_name));
let permission_files_path = out_dir.join(format!("{}-permission-files", pkg_name));
std::fs::write(
&permission_files_path,
serde_json::to_string(&permission_files)?,
@ -97,6 +103,27 @@ pub fn define_permissions(pattern: &str, pkg_name: &str) -> Result<Vec<Permissio
parse_permissions(permission_files)
}
/// Define the global scope schema JSON file path if it exists and pass it to the immediate consuming crate.
pub fn define_global_scope_schema(
schema: schemars::schema::RootSchema,
pkg_name: &str,
out_dir: &Path,
) -> Result<(), Error> {
let path = out_dir.join("global-scope.json");
write(&path, serde_json::to_vec(&schema)?).map_err(Error::WriteFile)?;
if let Some(plugin_name) = pkg_name.strip_prefix("tauri:") {
println!(
"cargo:{plugin_name}{CORE_PLUGIN_PERMISSIONS_TOKEN}_{GLOBAL_SCOPE_SCHEMA_PATH_KEY}={}",
path.display()
);
} else {
println!("cargo:{GLOBAL_SCOPE_SCHEMA_PATH_KEY}={}", path.display());
}
Ok(())
}
/// Parses all capability files with the given glob pattern.
pub fn parse_capabilities(
capabilities_path_pattern: &str,
@ -214,8 +241,8 @@ pub fn generate_schema<P: AsRef<Path>>(
let schema = permissions_schema(permissions);
let schema_str = serde_json::to_string_pretty(&schema).unwrap();
let out_dir = out_dir.as_ref();
create_dir_all(out_dir).expect("unable to create schema output directory");
let out_dir = out_dir.as_ref().join(PERMISSION_SCHEMAS_FOLDER_NAME);
create_dir_all(&out_dir).expect("unable to create schema output directory");
let mut schema_file = BufWriter::new(
File::create(out_dir.join(PERMISSION_SCHEMA_FILE_NAME)).map_err(Error::CreateFile)?,
@ -259,6 +286,40 @@ pub fn read_permissions() -> Result<HashMap<String, Vec<PermissionFile>>, Error>
Ok(permissions_map)
}
/// Read all global scope schemas listed from the defined cargo cfg key value.
pub fn read_global_scope_schemas() -> Result<HashMap<String, serde_json::Value>, Error> {
let mut permissions_map = HashMap::new();
for (key, value) in vars_os() {
let key = key.to_string_lossy();
if let Some(plugin_crate_name_var) = key
.strip_prefix("DEP_")
.and_then(|v| v.strip_suffix(&format!("_{GLOBAL_SCOPE_SCHEMA_PATH_KEY}")))
.map(|v| {
v.strip_suffix(CORE_PLUGIN_PERMISSIONS_TOKEN)
.and_then(|v| v.strip_prefix("TAURI_"))
.unwrap_or(v)
})
{
let path = PathBuf::from(value);
let json = std::fs::read_to_string(&path).map_err(Error::ReadFile)?;
let schema: serde_json::Value = serde_json::from_str(&json)?;
let plugin_crate_name = plugin_crate_name_var.to_lowercase().replace('_', "-");
permissions_map.insert(
plugin_crate_name
.strip_prefix("tauri-plugin-")
.map(|n| n.to_string())
.unwrap_or(plugin_crate_name),
schema,
);
}
}
Ok(permissions_map)
}
fn parse_permissions(paths: Vec<PathBuf>) -> Result<Vec<PermissionFile>, Error> {
let mut permissions = Vec::new();
for path in paths {
@ -285,6 +346,7 @@ pub fn autogenerate_command_permissions(path: &Path, commands: &[&str], license_
let schema_path = (1..components_len)
.map(|_| "..")
.collect::<PathBuf>()
.join(PERMISSION_SCHEMAS_FOLDER_NAME)
.join(PERMISSION_SCHEMA_FILE_NAME);
for command in commands {

View File

@ -53,15 +53,21 @@ pub struct Manifest {
pub permissions: BTreeMap<String, Permission>,
/// Plugin permission sets.
pub permission_sets: BTreeMap<String, PermissionSet>,
/// The global scope schema.
pub global_scope_schema: Option<serde_json::Value>,
}
impl Manifest {
/// Creates a new manifest from a list of permission files.
pub fn from_files(permission_files: Vec<PermissionFile>) -> Self {
/// Creates a new manifest from the given plugin permission files and global scope schema.
pub fn new(
permission_files: Vec<PermissionFile>,
global_scope_schema: Option<serde_json::Value>,
) -> Self {
let mut manifest = Self {
default_permission: None,
permissions: BTreeMap::new(),
permission_sets: BTreeMap::new(),
global_scope_schema,
};
for permission_file in permission_files {

View File

@ -211,7 +211,9 @@ fn main() {
target_os != "android" && (target_os != "linux" || has_feature("linux-ipc-protocol")),
);
let checked_features_out_path = Path::new(&var("OUT_DIR").unwrap()).join("checked_features");
let out_dir = PathBuf::from(var("OUT_DIR").unwrap());
let checked_features_out_path = out_dir.join("checked_features");
std::fs::write(
checked_features_out_path,
CHECKED_FEATURES.get().unwrap().lock().unwrap().join(","),
@ -293,10 +295,10 @@ fn main() {
}
}
define_permissions();
define_permissions(&out_dir);
}
fn define_permissions() {
fn define_permissions(out_dir: &Path) {
let license_header = r#"# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
# SPDX-License-Identifier: Apache-2.0
# SPDX-License-Identifier: MIT
@ -339,6 +341,7 @@ permissions = [{default_permissions}]
let permissions = tauri_utils::acl::build::define_permissions(
&format!("./permissions/{plugin}/**/*.toml"),
&format!("tauri:{plugin}"),
out_dir,
)
.unwrap_or_else(|e| panic!("failed to define permissions for {plugin}: {e}"));
tauri_utils::acl::build::generate_schema(&permissions, format!("./permissions/{plugin}"))

View File

@ -1 +1 @@
.schema.json
*/schemas/schema.json

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-app-hide"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-app-show"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-name"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-tauri-version"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-version"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-emit"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-listen"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-unlisten"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-append"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-create-default"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-get"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-insert"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-checked"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-enabled"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-items"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-new"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-popup"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-prepend"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-remove"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-remove-at"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-accelerator"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-as-app-menu"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-as-help-menu-for-nsapp"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-as-window-menu"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-as-windows-menu-for-nsapp"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-checked"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-enabled"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-icon"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-text"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-text"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-basename"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-dirname"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-extname"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-absolute"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-join"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-normalize"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-resolve"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-resolve-directory"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-close"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-new"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-icon"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-icon-as-template"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-menu"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-show-menu-on-left-click"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-temp-dir-path"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-title"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-tooltip"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-visible"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-create-webview"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-create-webview-window"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-internal-toggle-devtools"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-print"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-webview-focus"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-webview-position"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-webview-size"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-webview-close"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-webview-position"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-webview-size"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-available-monitors"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-center"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-close"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-create"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-current-monitor"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-hide"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-inner-position"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-inner-size"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-internal-on-mousedown"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-internal-on-mousemove"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-internal-toggle-maximize"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-closable"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-decorated"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-focused"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-fullscreen"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-maximizable"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-maximized"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-minimizable"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-minimized"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-resizable"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-is-visible"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-maximize"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-minimize"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-outer-position"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-outer-size"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-primary-monitor"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-request-user-attention"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-scale-factor"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-always-on-bottom"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-always-on-top"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-closable"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-content-protected"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-cursor-grab"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-cursor-icon"

View File

@ -3,7 +3,7 @@
# SPDX-License-Identifier: MIT
# Automatically generated - DO NOT EDIT!
"$schema" = "../../../.schema.json"
"$schema" = "../../../schemas/schema.json"
[[permission]]
identifier = "allow-set-cursor-position"

Some files were not shown because too many files have changed in this diff Show More