@@ -2,6 +2,7 @@ use crate::configs::{Dhcp4Config, Dhcp6Config, Ip4Config, Ip6Config};
2
2
use crate :: dbus_api:: DBusAccessor ;
3
3
use crate :: devices:: Device ;
4
4
use crate :: gen:: OrgFreedesktopNetworkManagerConnectionActive ;
5
+ use crate :: gen:: OrgFreedesktopNetworkManagerSettingsConnection ;
5
6
use crate :: types:: { ActivationStateFlags , ActiveConnectionState } ;
6
7
use crate :: Error ;
7
8
use num_traits:: FromPrimitive ;
@@ -104,4 +105,30 @@ impl<'a> Connection<'a> {
104
105
& dev_path,
105
106
) )
106
107
}
108
+ pub fn get_secrets (
109
+ & self ,
110
+ setting_name : & str ,
111
+ ) -> Result < std:: collections:: HashMap < String , Box < dyn dbus:: arg:: RefArg > > , Error > {
112
+ let conn = proxy ! ( self ) . connection ( ) ?;
113
+ // Our dbus_accessor represents an ActiveConnection, but we need to go to the underlying
114
+ // Connection.
115
+ let conn_accessor = DBusAccessor :: new (
116
+ self . dbus_accessor . connection ,
117
+ & self . dbus_accessor . bus ,
118
+ & conn,
119
+ ) ;
120
+ let secrets = conn_accessor. create_proxy ( ) . get_secrets ( setting_name) ?;
121
+
122
+ let requested = secrets
123
+ . get ( setting_name)
124
+ // FIXME: Is that the right error? Does seem so, because a type was requested that
125
+ // NetworkManager does not know.
126
+ . ok_or ( Error :: UnsupportedType ) ?;
127
+
128
+ use dbus:: arg:: RefArg ;
129
+ Ok ( requested
130
+ . iter ( )
131
+ . map ( |( k, v) | ( k. clone ( ) , v. box_clone ( ) ) )
132
+ . collect ( ) )
133
+ }
107
134
}
0 commit comments