@@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize};
99use std:: sync:: Arc ;
1010
1111use crate :: AppState ;
12- use crate :: setup:: NodeEndpoint ;
12+ use crate :: setup:: { NodeEndpoint , SETUP_FILE_PATH } ;
1313
1414#[ derive( Debug , Serialize ) ]
1515pub struct SetupStatusResponse {
@@ -68,7 +68,7 @@ pub async fn add_node(
6868 state. setup . add_node ( node. clone ( ) ) ;
6969
7070 // Save setup state
71- let setup_path = std:: path:: PathBuf :: from ( ".bitcell/admin/setup.json" ) ;
71+ let setup_path = std:: path:: PathBuf :: from ( SETUP_FILE_PATH ) ;
7272 state. setup . save_to_file ( & setup_path)
7373 . map_err ( |e| ( StatusCode :: INTERNAL_SERVER_ERROR , Json ( e) ) ) ?;
7474
@@ -87,7 +87,7 @@ pub async fn set_config_path(
8787 state. setup . set_config_path ( path. clone ( ) ) ;
8888
8989 // Save setup state
90- let setup_path = std:: path:: PathBuf :: from ( ".bitcell/admin/setup.json" ) ;
90+ let setup_path = std:: path:: PathBuf :: from ( SETUP_FILE_PATH ) ;
9191 state. setup . save_to_file ( & setup_path)
9292 . map_err ( |e| ( StatusCode :: INTERNAL_SERVER_ERROR , Json ( e) ) ) ?;
9393
@@ -101,17 +101,30 @@ pub async fn set_data_dir(
101101) -> Result < Json < String > , ( StatusCode , Json < String > ) > {
102102 let path = std:: path:: PathBuf :: from ( & req. path ) ;
103103
104- // Create directory if it doesn't exist
104+ // Create directory if it doesn't exist with restrictive permissions
105105 std:: fs:: create_dir_all ( & path)
106106 . map_err ( |e| (
107107 StatusCode :: INTERNAL_SERVER_ERROR ,
108108 Json ( format ! ( "Failed to create data directory: {}" , e) )
109109 ) ) ?;
110110
111+ // Set restrictive permissions on Unix systems (0700 - owner only)
112+ #[ cfg( unix) ]
113+ {
114+ use std:: os:: unix:: fs:: PermissionsExt ;
115+ let permissions = std:: fs:: Permissions :: from_mode ( 0o700 ) ;
116+ std:: fs:: set_permissions ( & path, permissions)
117+ . map_err ( |e| (
118+ StatusCode :: INTERNAL_SERVER_ERROR ,
119+ Json ( format ! ( "Failed to set directory permissions: {}" , e) )
120+ ) ) ?;
121+ tracing:: info!( "Set data directory permissions to 0700 (owner only)" ) ;
122+ }
123+
111124 state. setup . set_data_dir ( path) ;
112125
113126 // Save setup state
114- let setup_path = std:: path:: PathBuf :: from ( ".bitcell/admin/setup.json" ) ;
127+ let setup_path = std:: path:: PathBuf :: from ( SETUP_FILE_PATH ) ;
115128 state. setup . save_to_file ( & setup_path)
116129 . map_err ( |e| ( StatusCode :: INTERNAL_SERVER_ERROR , Json ( e) ) ) ?;
117130
@@ -125,7 +138,7 @@ pub async fn complete_setup(
125138 state. setup . mark_initialized ( ) ;
126139
127140 // Save setup state
128- let setup_path = std:: path:: PathBuf :: from ( ".bitcell/admin/setup.json" ) ;
141+ let setup_path = std:: path:: PathBuf :: from ( SETUP_FILE_PATH ) ;
129142 state. setup . save_to_file ( & setup_path)
130143 . map_err ( |e| ( StatusCode :: INTERNAL_SERVER_ERROR , Json ( e) ) ) ?;
131144
0 commit comments