summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/vcs_actions/src/actions.rs12
-rw-r--r--crates/vcs_actions/src/registry/client_registry.rs4
-rw-r--r--crates/vcs_data/src/constants.rs9
-rw-r--r--crates/vcs_data/src/data/local.rs1
-rw-r--r--crates/vcs_data/src/data/sheet.rs18
-rw-r--r--crates/vcs_data/vcs_data_test/src/test_sheet_creation_management_and_persistence.rs6
6 files changed, 36 insertions, 14 deletions
diff --git a/crates/vcs_actions/src/actions.rs b/crates/vcs_actions/src/actions.rs
index 858695a..795d2b0 100644
--- a/crates/vcs_actions/src/actions.rs
+++ b/crates/vcs_actions/src/actions.rs
@@ -5,7 +5,7 @@ use tcp_connection::{error::TcpTargetError, instance::ConnectionInstance};
use tokio::sync::Mutex;
use vcs_data::{
constants::SERVER_PATH_MEMBER_PUB,
- data::{local::LocalWorkspace, user::UserDirectory, vault::Vault},
+ data::{local::LocalWorkspace, member::MemberId, user::UserDirectory, vault::Vault},
};
pub mod local_actions;
@@ -57,11 +57,11 @@ pub fn try_get_user_directory(ctx: &ActionContext) -> Result<Arc<UserDirectory>,
Ok(user_directory)
}
-/// Authenticate member based on whether the process is running locally or remotely
+/// Authenticate member based on context and return MemberId
pub async fn auth_member(
ctx: &ActionContext,
instance: &Arc<Mutex<ConnectionInstance>>,
-) -> Result<(), TcpTargetError> {
+) -> Result<MemberId, TcpTargetError> {
// Start Challenge (Remote)
if ctx.is_proc_on_remote() {
let vault = try_get_vault(ctx)?;
@@ -72,7 +72,7 @@ pub async fn auth_member(
.await;
return match result {
- Ok(pass) => {
+ Ok((pass, member_id)) => {
if !pass {
// Send false to inform the client that authentication failed
instance.lock().await.write(false).await?;
@@ -82,7 +82,7 @@ pub async fn auth_member(
} else {
// Send true to inform the client that authentication was successful
instance.lock().await.write(true).await?;
- Ok(())
+ Ok(member_id)
}
}
Err(e) => Err(e),
@@ -106,7 +106,7 @@ pub async fn auth_member(
// Read result
let challenge_result = instance.lock().await.read::<bool>().await?;
if challenge_result {
- return Ok(());
+ return Ok(member_name.clone());
} else {
return Err(TcpTargetError::Authentication(
"Authenticate failed.".to_string(),
diff --git a/crates/vcs_actions/src/registry/client_registry.rs b/crates/vcs_actions/src/registry/client_registry.rs
index 6f820e6..dcad657 100644
--- a/crates/vcs_actions/src/registry/client_registry.rs
+++ b/crates/vcs_actions/src/registry/client_registry.rs
@@ -52,7 +52,9 @@ async fn on_proc_begin(
let local_workspace = match LocalWorkspace::init_current_dir(local_config) {
Some(workspace) => workspace,
None => {
- return Err(TcpTargetError::NotFound("Failed to initialize local workspace.".to_string()));
+ return Err(TcpTargetError::NotFound(
+ "Failed to initialize local workspace.".to_string(),
+ ));
}
};
let local_workspace_arc = Arc::new(local_workspace);
diff --git a/crates/vcs_data/src/constants.rs b/crates/vcs_data/src/constants.rs
index 7514fe2..cd6eaa3 100644
--- a/crates/vcs_data/src/constants.rs
+++ b/crates/vcs_data/src/constants.rs
@@ -17,7 +17,7 @@ pub const SERVER_FILE_VAULT: &str = "./vault.toml";
// Server - Sheets
pub const REF_SHEET_NAME: &str = "ref";
pub const SERVER_PATH_SHEETS: &str = "./sheets/";
-pub const SERVER_FILE_SHEET: &str = "./sheets/{sheet-name}.yaml";
+pub const SERVER_FILE_SHEET: &str = "./sheets/{sheet_name}.yaml";
// Server - Members
pub const SERVER_PATH_MEMBERS: &str = "./members/";
@@ -35,6 +35,7 @@ pub const SERVER_FILE_VF_META: &str = "./storage/{vf_index}/{vf_id}/meta.yaml";
// Server - Service
pub const SERVER_FILE_LOCKFILE: &str = "./.lock";
+// Server - Documents
pub const SERVER_FILE_README: &str = "./README.md";
// -------------------------------------------------------------------------------------
@@ -45,6 +46,12 @@ pub const CLIENT_PATH_WORKSPACE_ROOT: &str = "./.jv/";
// Client - Workspace (Main)
pub const CLIENT_FILE_WORKSPACE: &str = "./.jv/workspace.toml";
+// Client - Latest Information
+pub const CLIENT_FILE_LATEST_INFO: &str = "./.jv/latest.json";
+
+// Client - Sheets
+pub const CLIENT_FILE_SHEET_COPY: &str = "./.jv/sheets/{sheet_name}.copy.json";
+
// Client - Other
pub const CLIENT_FILE_IGNOREFILES: &str = "IGNORE_RULES.toml";
pub const CLIENT_FILE_README: &str = "./README.md";
diff --git a/crates/vcs_data/src/data/local.rs b/crates/vcs_data/src/data/local.rs
index fb43042..407b171 100644
--- a/crates/vcs_data/src/data/local.rs
+++ b/crates/vcs_data/src/data/local.rs
@@ -10,6 +10,7 @@ use crate::{
};
pub mod config;
+pub mod latest_info;
pub struct LocalWorkspace {
config: Arc<Mutex<LocalConfig>>,
diff --git a/crates/vcs_data/src/data/sheet.rs b/crates/vcs_data/src/data/sheet.rs
index f1cf67c..b558c0d 100644
--- a/crates/vcs_data/src/data/sheet.rs
+++ b/crates/vcs_data/src/data/sheet.rs
@@ -35,7 +35,7 @@ impl PartialEq for InputPackage {
}
}
-const SHEET_NAME: &str = "{sheet-name}";
+const SHEET_NAME: &str = "{sheet_name}";
pub struct Sheet<'a> {
/// The name of the current sheet
@@ -48,7 +48,7 @@ pub struct Sheet<'a> {
pub(crate) vault_reference: &'a Vault,
}
-#[derive(Default, Serialize, Deserialize, ConfigFile)]
+#[derive(Default, Serialize, Deserialize, ConfigFile, Clone)]
pub struct SheetData {
/// The holder of the current sheet, who has full operation rights to the sheet mapping
pub(crate) holder: MemberId,
@@ -61,6 +61,10 @@ pub struct SheetData {
}
impl<'a> Sheet<'a> {
+ pub fn name(&self) -> &SheetName {
+ &self.name
+ }
+
/// Get the holder of this sheet
pub fn holder(&self) -> &MemberId {
&self.data.holder
@@ -344,4 +348,14 @@ impl<'a> Sheet<'a> {
common_components.into_iter().collect()
}
+
+ /// Clone the data of the sheet
+ pub fn clone_data(&self) -> SheetData {
+ self.data.clone()
+ }
+
+ /// Convert the sheet into its data representation
+ pub fn to_data(self) -> SheetData {
+ self.data
+ }
}
diff --git a/crates/vcs_data/vcs_data_test/src/test_sheet_creation_management_and_persistence.rs b/crates/vcs_data/vcs_data_test/src/test_sheet_creation_management_and_persistence.rs
index a8dfb89..7484e4b 100644
--- a/crates/vcs_data/vcs_data_test/src/test_sheet_creation_management_and_persistence.rs
+++ b/crates/vcs_data/vcs_data_test/src/test_sheet_creation_management_and_persistence.rs
@@ -42,8 +42,7 @@ async fn test_sheet_creation_management_and_persistence() -> Result<(), std::io:
assert!(sheet.mapping().is_empty());
// Verify sheet file was created
- const SHEET_NAME_PARAM: &str = "{sheet-name}";
- let sheet_path = dir.join(SERVER_FILE_SHEET.replace(SHEET_NAME_PARAM, &sheet_name));
+ let sheet_path = dir.join(SERVER_FILE_SHEET.replace("{sheet_name}", &sheet_name));
assert!(sheet_path.exists());
// Test 2: Add input packages to the sheet
@@ -296,8 +295,7 @@ async fn test_sheet_data_serialization() -> Result<(), std::io::Error> {
sheet.persist().await?;
// Verify the sheet file was created
- const SHEET_NAME_PARAM: &str = "{sheet-name}";
- let sheet_path = dir.join(SERVER_FILE_SHEET.replace(SHEET_NAME_PARAM, &sheet_name));
+ let sheet_path = dir.join(SERVER_FILE_SHEET.replace("{sheet_name}", &sheet_name));
assert!(sheet_path.exists());
// Clean up