Trim PR scope for review feedback
This commit is contained in:
parent
43ba5b50ae
commit
245f91a029
@ -1,9 +1,8 @@
|
||||
use crate::{java::setup_java, protobufs::setup_protobufs, pumpkin::setup_pumpkin_build_info};
|
||||
use crate::{java::setup_java, protobufs::setup_protobufs};
|
||||
use std::{error::Error, path::PathBuf};
|
||||
|
||||
pub mod java;
|
||||
pub mod protobufs;
|
||||
pub mod pumpkin;
|
||||
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
println!("cargo::rerun-if-changed=rust/src/build.rs");
|
||||
@ -12,7 +11,6 @@ fn main() -> Result<(), Box<dyn Error>> {
|
||||
|
||||
let base = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap());
|
||||
|
||||
setup_pumpkin_build_info(&base);
|
||||
setup_protobufs(base.clone());
|
||||
setup_java(base);
|
||||
Ok(())
|
||||
|
||||
@ -1,64 +0,0 @@
|
||||
use std::{fs, path::Path};
|
||||
|
||||
fn extract_git_revision(source: &str) -> Option<String> {
|
||||
source.rsplit('#').next().and_then(|revision| {
|
||||
let trimmed = revision.trim();
|
||||
if trimmed.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(trimmed.to_string())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
pub fn setup_pumpkin_build_info(base: &Path) {
|
||||
let lock_path = base.join("Cargo.lock");
|
||||
let lock_contents =
|
||||
fs::read_to_string(&lock_path).expect("Failed to read Cargo.lock for Pumpkin build info");
|
||||
|
||||
let mut in_pumpkin_package = false;
|
||||
let mut pumpkin_version: Option<String> = None;
|
||||
let mut pumpkin_revision: Option<String> = None;
|
||||
|
||||
for line in lock_contents.lines() {
|
||||
let trimmed = line.trim();
|
||||
|
||||
if trimmed == "[[package]]" {
|
||||
if in_pumpkin_package {
|
||||
break;
|
||||
}
|
||||
in_pumpkin_package = false;
|
||||
pumpkin_version = None;
|
||||
pumpkin_revision = None;
|
||||
continue;
|
||||
}
|
||||
|
||||
if trimmed == r#"name = "pumpkin""# {
|
||||
in_pumpkin_package = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if !in_pumpkin_package {
|
||||
continue;
|
||||
}
|
||||
|
||||
if let Some(version) = trimmed.strip_prefix(r#"version = ""#) {
|
||||
pumpkin_version = Some(version.trim_end_matches('"').to_string());
|
||||
continue;
|
||||
}
|
||||
|
||||
if let Some(source) = trimmed.strip_prefix(r#"source = ""#) {
|
||||
let source = source.trim_end_matches('"');
|
||||
pumpkin_revision = extract_git_revision(source);
|
||||
}
|
||||
}
|
||||
|
||||
let pumpkin_version = pumpkin_version.unwrap_or_else(|| "unknown".to_string());
|
||||
let pumpkin_revision = pumpkin_revision.unwrap_or_else(|| "unknown".to_string());
|
||||
let pumpkin_revision_short = pumpkin_revision.chars().take(7).collect::<String>();
|
||||
|
||||
println!("cargo::rustc-env=PATCHBUKKIT_PUMPKIN_VERSION={pumpkin_version}");
|
||||
println!("cargo::rustc-env=PATCHBUKKIT_PUMPKIN_REVISION={pumpkin_revision}");
|
||||
println!("cargo::rustc-env=PATCHBUKKIT_PUMPKIN_REVISION_SHORT={pumpkin_revision_short}");
|
||||
println!("cargo::rerun-if-changed={}", lock_path.display());
|
||||
}
|
||||
@ -4,7 +4,10 @@ use anyhow::Result;
|
||||
use j4rs::{Instance, InvocationArg, Jvm};
|
||||
use pumpkin::{command::dispatcher::CommandError, plugin::Context};
|
||||
use pumpkin_protocol::java::client::play::CommandSuggestion;
|
||||
use pumpkin_util::permission::{Permission, PermissionDefault};
|
||||
use pumpkin_util::{
|
||||
PermissionLvl,
|
||||
permission::{Permission, PermissionDefault},
|
||||
};
|
||||
use tokio::sync::mpsc;
|
||||
|
||||
use crate::{
|
||||
@ -187,7 +190,7 @@ impl CommandManager {
|
||||
cmd_data.description.clone().unwrap_or_default(),
|
||||
);
|
||||
|
||||
let permission = build_permission_node(&plugin.name, &cmd_name);
|
||||
let (permission, permission_default) = build_permission_node(&cmd_name, cmd_data);
|
||||
|
||||
let registry = {
|
||||
let permission_manager = context.permission_manager.read().await;
|
||||
@ -200,7 +203,7 @@ impl CommandManager {
|
||||
"Allows running the Bukkit command `{cmd_name}` from `{}`",
|
||||
plugin.name
|
||||
),
|
||||
PermissionDefault::Allow,
|
||||
permission_default,
|
||||
)) {
|
||||
if e.contains("already registered") {
|
||||
tracing::debug!(
|
||||
@ -318,48 +321,66 @@ impl CommandManager {
|
||||
}
|
||||
}
|
||||
|
||||
fn build_permission_node(plugin_name: &str, cmd_name: &str) -> String {
|
||||
let plugin_segment = sanitize_permission_segment(plugin_name);
|
||||
let command_segment = sanitize_permission_segment(cmd_name);
|
||||
format!("{PATCHBUKKIT_PERMISSION_NAMESPACE}:command.{plugin_segment}.{command_segment}")
|
||||
}
|
||||
|
||||
fn sanitize_permission_segment(value: &str) -> String {
|
||||
let sanitized: String = value
|
||||
.chars()
|
||||
.map(|ch| {
|
||||
if ch.is_ascii_alphanumeric() || matches!(ch, '.' | '_' | '-') {
|
||||
ch.to_ascii_lowercase()
|
||||
} else {
|
||||
'_'
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
if sanitized.is_empty() {
|
||||
"unknown".to_string()
|
||||
fn build_permission_node(
|
||||
cmd_name: &str,
|
||||
cmd_data: &config::spigot::Command,
|
||||
) -> (String, PermissionDefault) {
|
||||
if let Some(permission) = &cmd_data.permission {
|
||||
(
|
||||
permission.clone(),
|
||||
PermissionDefault::Op(PermissionLvl::Two),
|
||||
)
|
||||
} else {
|
||||
sanitized
|
||||
(
|
||||
format!("{PATCHBUKKIT_PERMISSION_NAMESPACE}:command.{cmd_name}"),
|
||||
PermissionDefault::Allow,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use pumpkin_util::{PermissionLvl, permission::PermissionDefault};
|
||||
|
||||
use crate::config::spigot::Command;
|
||||
|
||||
use super::build_permission_node;
|
||||
|
||||
#[test]
|
||||
fn permission_node_is_namespaced_and_stable() {
|
||||
fn permission_node_uses_explicit_plugin_permission() {
|
||||
let command = Command {
|
||||
description: None,
|
||||
usage: None,
|
||||
aliases: None,
|
||||
permission: Some("simplespawn.spawn".to_string()),
|
||||
permission_message: None,
|
||||
};
|
||||
|
||||
assert_eq!(
|
||||
build_permission_node("SimpleSpawn", "spawn"),
|
||||
"patchbukkit:command.simplespawn.spawn"
|
||||
build_permission_node("spawn", &command),
|
||||
(
|
||||
"simplespawn.spawn".to_string(),
|
||||
PermissionDefault::Op(PermissionLvl::Two)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn permission_node_sanitizes_unfriendly_characters() {
|
||||
fn permission_node_falls_back_to_patchbukkit_namespace() {
|
||||
let command = Command {
|
||||
description: None,
|
||||
usage: None,
|
||||
aliases: None,
|
||||
permission: None,
|
||||
permission_message: None,
|
||||
};
|
||||
|
||||
assert_eq!(
|
||||
build_permission_node("Fancy Plugin", "Spawn-All"),
|
||||
"patchbukkit:command.fancy_plugin.spawn-all"
|
||||
build_permission_node("spawn", &command),
|
||||
(
|
||||
"patchbukkit:command.spawn".to_string(),
|
||||
PermissionDefault::Allow
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,17 +30,9 @@ use crate::{
|
||||
},
|
||||
};
|
||||
|
||||
const PATCHBUKKIT_PUMPKIN_VERSION: &str = env!("PATCHBUKKIT_PUMPKIN_VERSION");
|
||||
const PATCHBUKKIT_PUMPKIN_REVISION: &str = env!("PATCHBUKKIT_PUMPKIN_REVISION");
|
||||
const PATCHBUKKIT_PUMPKIN_REVISION_SHORT: &str = env!("PATCHBUKKIT_PUMPKIN_REVISION_SHORT");
|
||||
|
||||
async fn on_load_inner(plugin: &PatchBukkitPlugin, server: Arc<Context>) -> Result<(), String> {
|
||||
server.init_log();
|
||||
tracing::info!("Starting PatchBukkit");
|
||||
tracing::info!(
|
||||
"Built against Pumpkin {PATCHBUKKIT_PUMPKIN_VERSION} ({PATCHBUKKIT_PUMPKIN_REVISION_SHORT})"
|
||||
);
|
||||
tracing::debug!("Full Pumpkin dependency revision: {PATCHBUKKIT_PUMPKIN_REVISION}");
|
||||
|
||||
// Setup directories
|
||||
let dirs = setup_directories(&server)?;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user