33
44mod oidc;
55mod state;
6- use std:: os:: unix:: fs:: PermissionsExt ;
76
8- use openconnect_core:: storage:: { StoredConfigs , StoredConfigsJson } ;
7+ use openconnect_core:: storage:: { StoredConfigs , StoredConfigsJson , StoredServer } ;
98use state:: AppState ;
109use tauri:: Manager ;
1110
@@ -16,14 +15,12 @@ fn greet(name: &str) -> String {
1615}
1716
1817#[ tauri:: command( rename_all = "snake_case" ) ]
19- async fn connect (
18+ async fn connect_with_password (
2019 app_state : tauri:: State < ' _ , AppState > ,
21- server : String ,
22- username : String ,
23- password : String ,
20+ server_name : String ,
2421) -> anyhow:: Result < ( ) , String > {
2522 app_state
26- . connect_with_user_pass ( & server , & username , & password )
23+ . connect_with_user_pass ( & server_name )
2724 . await
2825 . map_err ( |e| e. to_string ( ) )
2926}
@@ -64,6 +61,20 @@ async fn get_stored_configs() -> anyhow::Result<StoredConfigsJson, String> {
6461 Ok ( stored_configs. into ( ) )
6562}
6663
64+ #[ tauri:: command]
65+ async fn upsert_stored_server ( server : StoredServer ) -> anyhow:: Result < ( ) , String > {
66+ let mut stored_configs = StoredConfigs :: new ( ) ;
67+ stored_configs
68+ . read_from_file ( )
69+ . await
70+ . map_err ( |e| e. to_string ( ) ) ?;
71+ stored_configs
72+ . upsert_server ( server)
73+ . await
74+ . map_err ( |e| e. to_string ( ) ) ?;
75+ Ok ( ( ) )
76+ }
77+
6778fn main ( ) {
6879 #[ cfg( target_os = "linux" ) ]
6980 {
@@ -92,40 +103,59 @@ fn main() {
92103 . body ( b"Authenticated, close this window and return to the application." . to_vec ( ) )
93104 } )
94105 . setup ( |app| {
95- #[ cfg( not( target_os = "windows" ) ) ]
96- {
97- let resource_path = app
98- . path_resolver ( )
99- . resolve_resource ( "vpnc-scripts/vpnc-script" )
100- . expect ( "failed to resolve resource" ) ;
101-
102- let file = std:: fs:: OpenOptions :: new ( )
103- . write ( false )
104- . create ( false )
105- . append ( false )
106- . read ( true )
107- . open ( resource_path)
108- . expect ( "failed to open file" ) ;
109-
110- let permissions = file. metadata ( ) . unwrap ( ) . permissions ( ) ;
111- let is_executable = permissions. mode ( ) & 0o111 != 0 ;
112- if !is_executable {
113- let mut permissions = permissions;
114- permissions. set_mode ( 0o755 ) ;
115- file. set_permissions ( permissions) . unwrap ( ) ;
106+ let vpnc_script = {
107+ #[ cfg( target_os = "windows" ) ]
108+ {
109+ let resource_path = app
110+ . path_resolver ( )
111+ . resolve_resource ( "vpnc-script-win.js" )
112+ . expect ( "failed to resolve resource" ) ;
113+
114+ dunce:: canonicalize ( resource_path)
115+ . expect ( "failed to canonicalize path" )
116+ . to_string_lossy ( )
117+ . to_string ( )
116118 }
117- }
118119
119- AppState :: handle ( app) ;
120+ #[ cfg( not( target_os = "windows" ) ) ]
121+ {
122+ use std:: os:: unix:: fs:: PermissionsExt ;
123+ let resource_path = app
124+ . path_resolver ( )
125+ . resolve_resource ( "vpnc-script" )
126+ . expect ( "failed to resolve resource" ) ;
127+
128+ let file = std:: fs:: OpenOptions :: new ( )
129+ . write ( false )
130+ . create ( false )
131+ . append ( false )
132+ . read ( true )
133+ . open ( resource_path)
134+ . expect ( "failed to open file" ) ;
135+
136+ let permissions = file. metadata ( ) . unwrap ( ) . permissions ( ) ;
137+ let is_executable = permissions. mode ( ) & 0o111 != 0 ;
138+ if !is_executable {
139+ let mut permissions = permissions;
140+ permissions. set_mode ( 0o755 ) ;
141+ file. set_permissions ( permissions) . unwrap ( ) ;
142+ }
143+
144+ resource_path. to_string_lossy ( ) . to_string ( )
145+ }
146+ } ;
147+
148+ AppState :: handle_with_vpnc_script ( app, & vpnc_script) ;
120149 Ok ( ( ) )
121150 } )
122151 . invoke_handler ( tauri:: generate_handler![
123152 greet,
124- connect,
125153 disconnect,
126154 trigger_state_retrieve,
155+ get_stored_configs,
156+ upsert_stored_server,
157+ connect_with_password,
127158 connect_with_oidc,
128- get_stored_configs
129159 ] )
130160 . run ( tauri:: generate_context!( ) )
131161 . expect ( "error while running tauri application" ) ;
0 commit comments