Skip to content

Commit ef34392

Browse files
committed
Add Shortcut module and enhance file system interactions
1 parent 855dace commit ef34392

File tree

18 files changed

+383
-48
lines changed

18 files changed

+383
-48
lines changed

Modules/Authentication/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ Users = { path = "../Users" }
99
Task = { path = "../Task" }
1010
File_system = { path = "../File_system" }
1111
sha2 = { version = "0.10", features = ["asm"] }
12-
miniserde = "0.1.41"
12+
miniserde = "0.1"

Modules/Authentication/src/Error.rs

+8
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ pub enum Error_type {
1414
Failed_to_get_new_user_identifier(Users::Error_type),
1515
Failed_to_create_user(Users::Error_type),
1616
Failed_to_write_user_file(File_system::Error_type),
17+
Failed_to_create_users_directory(File_system::Error_type),
1718
Failed_to_read_group_directory(File_system::Error_type),
1819
Failed_to_get_group_file_path,
1920
Failed_to_open_group_file(File_system::Error_type),
@@ -23,6 +24,7 @@ pub enum Error_type {
2324
Failed_to_get_new_group_identifier(Users::Error_type),
2425
Failed_to_create_group(Users::Error_type),
2526
Failed_to_write_group_file(File_system::Error_type),
27+
Failed_to_create_groups_directory(File_system::Error_type),
2628
Invalid_password,
2729
Failed_to_open_random_device(File_system::Error_type),
2830
Failed_to_read_random_device(File_system::Error_type),
@@ -57,6 +59,9 @@ impl Display for Error_type {
5759
Self::Failed_to_add_user(Error) => {
5860
write!(Formatter, "Failed to add user: {}", Error)
5961
}
62+
Self::Failed_to_create_users_directory(Error) => {
63+
write!(Formatter, "Failed to create users directory: {}", Error)
64+
}
6065
Self::Failed_to_read_group_directory(Error) => {
6166
write!(Formatter, "Failed to read group directory: {}", Error)
6267
}
@@ -75,6 +80,9 @@ impl Display for Error_type {
7580
Self::Failed_to_add_group(Error) => {
7681
write!(Formatter, "Failed to add group: {}", Error)
7782
}
83+
Self::Failed_to_create_groups_directory(Error) => {
84+
write!(Formatter, "Failed to create group directory: {}", Error)
85+
}
7886
Self::Invalid_password => {
7987
write!(Formatter, "Invalid password")
8088
}

Modules/Authentication/src/Group.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use Users::{
44
Group_identifier_inner_type, Group_identifier_type, User_identifier_inner_type,
55
User_identifier_type,
66
};
7-
use Virtual_file_system::{File_type, Virtual_file_system_type};
7+
use Virtual_file_system::{Directory_type, File_type, Virtual_file_system_type};
88

99
use crate::{Error_type, Group_folder_path, Result_type};
1010

@@ -104,6 +104,11 @@ pub fn Create_group<'a>(
104104
vec![],
105105
);
106106

107+
match Directory_type::Create(Virtual_file_system, Group_folder_path) {
108+
Ok(_) | Err(File_system::Error_type::Already_exists) => {}
109+
Err(Error) => Err(Error_type::Failed_to_create_groups_directory(Error))?,
110+
};
111+
107112
let Group_file_path = Get_group_file_path(Group_name)?;
108113

109114
let Group_file = File_type::Open(

Modules/Authentication/src/User.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use Users::{
44
Group_identifier_inner_type, Group_identifier_type, User_identifier_inner_type,
55
User_identifier_type,
66
};
7-
use Virtual_file_system::{File_type, Virtual_file_system_type};
7+
use Virtual_file_system::{Directory_type, File_type, Virtual_file_system_type};
88

99
use crate::{
1010
Error_type,
@@ -145,6 +145,11 @@ pub fn Create_user<'a>(
145145
Salt,
146146
);
147147

148+
match Directory_type::Create(Virtual_file_system, Users_folder_path) {
149+
Ok(_) | Err(File_system::Error_type::Already_exists) => {}
150+
Err(Error) => Err(Error_type::Failed_to_create_users_directory(Error))?,
151+
}
152+
148153
let User_file_path = Path_type::New(Users_folder_path)
149154
.to_owned()
150155
.Append(User_name)

Modules/Executable/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ fn Get_overridden_user(
6464
Ok(Some(New_user))
6565
}
6666

67-
pub fn Execute<P: AsRef<Path_type>>(
68-
Path: P,
67+
pub fn Execute(
68+
Path: impl AsRef<Path_type>,
6969
Inputs: String,
7070
Standard: Standard_type,
7171
) -> Result_type<Join_handle_type<isize>> {

Modules/Executables/Shell/Graphical/Cargo.toml

+3
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ Users = { path = "../../../Users" }
1313
Shared = { path = "../../../Shared" }
1414
Time = { path = "../../../Time" }
1515
Authentication = { path = "../../../Authentication" }
16+
miniserde = "0.1"
17+
Command_line_shell = { path = "../Command_line" }
1618

1719
[dev-dependencies]
1820
Drivers = { path = "../../../Drivers" }
1921
Time = { path = "../../../Time" }
2022
LittleFS = { path = "../../../LittleFS" }
23+
Terminal = { path = "../../Terminal" }
2124

2225
[[test]]
2326
name = "Integration_test"

Modules/Executables/Shell/Graphical/Tests/Integration_test.rs

+49-9
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ use Graphical_shell::Shell_executable_type;
1111
#[test]
1212
fn main() {
1313
use Drivers::Native::Window_screen;
14-
use File_system::Permissions_type;
14+
use File_system::{Flags_type, Open_type, Permissions_type};
1515
use Graphics::{Get_minimal_buffer_size, Input_type_type, Point_type};
16+
use Terminal::Terminal_executable_type;
1617
use Users::Group_identifier_type;
18+
use Virtual_file_system::File_type;
1719

1820
// - Initialize the task manager.
1921
let Task_instance = Task::Initialize().unwrap();
@@ -55,27 +57,35 @@ fn main() {
5557

5658
let Task = Task_instance.Get_current_task_identifier().unwrap();
5759

58-
Virtual_file_system::Get_instance()
59-
.Mount_static_device(Task, &"/Shell", Create_device!(Shell_executable_type))
60+
Virtual_file_system::Create_default_hierarchy(Virtual_file_system::Get_instance(), Task)
6061
.unwrap();
62+
6163
Virtual_file_system::Get_instance()
62-
.Set_permissions("/Shell", Permissions_type::All_full)
64+
.Mount_static_device(
65+
Task,
66+
&"/Binaries/Graphical_shell",
67+
Create_device!(Shell_executable_type),
68+
)
6369
.unwrap();
6470

6571
Virtual_file_system::Get_instance()
66-
.Create_directory(&"/Devices", Task)
72+
.Mount_static_device(
73+
Task,
74+
&"/Binaries/Command_line_shell",
75+
Create_device!(Shell_executable_type),
76+
)
6777
.unwrap();
6878

6979
Virtual_file_system::Get_instance()
70-
.Create_directory(&"/Xila", Task)
80+
.Set_permissions("/Binaries/Command_line_shell", Permissions_type::Executable)
7181
.unwrap();
7282

7383
Virtual_file_system::Get_instance()
74-
.Create_directory(&"/Xila/Users", Task)
84+
.Create_directory(&"/Configuration/Graphical_shell", Task)
7585
.unwrap();
7686

7787
Virtual_file_system::Get_instance()
78-
.Create_directory(&"/Xila/Groups", Task)
88+
.Create_directory(&"/Configuration/Graphical_shell/Shortcuts", Task)
7989
.unwrap();
8090

8191
Drivers::Native::Console::Mount_devices(Task, Virtual_file_system::Get_instance()).unwrap();
@@ -88,6 +98,36 @@ fn main() {
8898
)
8999
.unwrap();
90100

101+
Virtual_file_system::Get_instance()
102+
.Mount_static_device(
103+
Task,
104+
&"/Devices/Null",
105+
Create_device!(Drivers::Common::Null_device_type),
106+
)
107+
.unwrap();
108+
109+
Virtual_file_system::Get_instance()
110+
.Mount_static_device(
111+
Task,
112+
&"/Binaries/Terminal",
113+
Create_device!(Terminal_executable_type),
114+
)
115+
.unwrap();
116+
117+
Virtual_file_system::Get_instance()
118+
.Set_permissions("/Binaries/Terminal", Permissions_type::Executable)
119+
.unwrap();
120+
121+
// Write terminal shortcut.
122+
File_type::Open(
123+
Virtual_file_system::Get_instance(),
124+
"/Configuration/Graphical_shell/Shortcuts/Terminal",
125+
Flags_type::New(Mode_type::Write_only, Some(Open_type::Create), None),
126+
)
127+
.unwrap()
128+
.Write(Terminal::Shortcut.as_bytes())
129+
.unwrap();
130+
91131
let Group_identifier = Group_identifier_type::New(1000);
92132

93133
Authentication::Create_group(
@@ -138,7 +178,7 @@ fn main() {
138178
.Set_environment_variable(Task, "Host", "xila")
139179
.unwrap();
140180

141-
let Result = Executable::Execute("/Shell", "".to_string(), Standard)
181+
let Result = Executable::Execute("/Binaries/Graphical_shell", "".to_string(), Standard)
142182
.unwrap()
143183
.Join()
144184
.unwrap();

0 commit comments

Comments
 (0)