Skip to content

Commit 1f012ae

Browse files
committed
Adds a way to store a session
This introduces ServiceManager struct. Signed-off-by: Dhanuka Warusadura <dhanuka@gnome.org>
1 parent d759844 commit 1f012ae

File tree

3 files changed

+54
-4
lines changed

3 files changed

+54
-4
lines changed

server/src/daemon/collection.rs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ use tokio::sync::RwLock;
1414
use zbus::{interface, zvariant, ObjectServer, SignalContext};
1515
use zvariant::{ObjectPath, OwnedObjectPath};
1616

17-
use super::{error::ServiceError, prompt::Prompt, Result, Service};
17+
use super::{
18+
error::ServiceError,
19+
prompt::Prompt,
20+
service::{Service, ServiceManager},
21+
Result,
22+
};
1823

1924
const SECRET_COLLECTION_OBJECTPATH: &str = "/org/freedesktop/secrets.Devel/collection/";
2025

@@ -27,6 +32,7 @@ pub struct Collection {
2732
locked: AtomicBool,
2833
created: Duration,
2934
modified: Duration,
35+
manager: Arc<ServiceManager>,
3036
path: OwnedObjectPath,
3137
}
3238

@@ -76,7 +82,13 @@ impl Collection {
7682

7783
let prompt = Prompt::default(); // temp Prompt
7884

79-
let item = super::item::Item::new(item, self.path(), Arc::clone(&self.keyring)).await;
85+
let item = super::item::Item::new(
86+
item,
87+
self.path(),
88+
Arc::clone(&self.keyring),
89+
Arc::clone(&self.manager),
90+
)
91+
.await;
8092
let path = OwnedObjectPath::from(item.path());
8193
self.items.write().await.push(item);
8294

@@ -125,7 +137,13 @@ impl Collection {
125137
}
126138

127139
impl Collection {
128-
pub fn new(label: &str, alias: &str, created: Duration, keyring: Arc<Keyring>) -> Self {
140+
pub fn new(
141+
label: &str,
142+
alias: &str,
143+
created: Duration,
144+
keyring: Arc<Keyring>,
145+
manager: Arc<ServiceManager>,
146+
) -> Self {
129147
Self {
130148
items: Default::default(),
131149
label: label.to_owned(),
@@ -136,6 +154,7 @@ impl Collection {
136154
path: OwnedObjectPath::try_from(format!("{}{}", SECRET_COLLECTION_OBJECTPATH, alias))
137155
.unwrap(),
138156
keyring,
157+
manager,
139158
}
140159
}
141160

server/src/daemon/item.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,17 @@ use zbus::{
1313
ObjectServer,
1414
};
1515

16-
use super::{collection::Collection, error::ServiceError, prompt::Prompt, Result};
16+
use super::{
17+
collection::Collection, error::ServiceError, prompt::Prompt, service::ServiceManager, Result,
18+
};
1719

1820
#[derive(Debug)]
1921
pub struct Item {
2022
inner: RwLock<portal::Item>,
2123
path: OwnedObjectPath,
2224
keyring: Arc<Keyring>,
2325
locked: bool,
26+
manager: Arc<ServiceManager>,
2427
}
2528

2629
#[zbus::interface(name = "org.freedesktop.Secret.Item")]
@@ -106,12 +109,14 @@ impl Item {
106109
item: portal::Item,
107110
collection_path: ObjectPath<'_>,
108111
keyring: Arc<Keyring>,
112+
manager: Arc<ServiceManager>,
109113
) -> Self {
110114
Self {
111115
path: OwnedObjectPath::try_from(format!("{}/items/{}", collection_path, item.label(),))
112116
.unwrap(),
113117
inner: RwLock::new(item),
114118
keyring,
119+
manager,
115120
locked: true,
116121
}
117122
}

server/src/daemon/service.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,33 @@ use super::{
2424
collection::Collection, error::ServiceError, prompt::Prompt, session::Session, Result,
2525
};
2626

27+
#[derive(Debug)]
28+
pub struct ServiceManager {
29+
sessions: HashMap<OwnedObjectPath, Session>,
30+
}
31+
32+
impl ServiceManager {
33+
pub fn new() -> Self {
34+
Self {
35+
sessions: HashMap::new(),
36+
}
37+
}
38+
39+
pub fn sessions(&self) -> &HashMap<OwnedObjectPath, Session> {
40+
&self.sessions
41+
}
42+
43+
pub fn set_sessions(&mut self, path: OwnedObjectPath, session: Session) {
44+
self.sessions.insert(path, session);
45+
}
46+
}
47+
2748
#[derive(Debug)]
2849
pub struct Service {
2950
collections: Vec<Collection>,
3051
keyring: Arc<Keyring>,
3152
cnx: Mutex<Option<zbus::Connection>>,
53+
manager: Arc<ServiceManager>,
3254
}
3355

3456
#[zbus::interface(name = "org.freedesktop.Secret.Service")]
@@ -44,6 +66,7 @@ impl Service {
4466
};
4567
let (session, key) = Session::new(client_public_key);
4668
// TODO: clean up the default generated key
69+
// TODO call self.manager.set_sessions();
4770
let key = key
4871
.map(|k| OwnedValue::from(&k))
4972
.unwrap_or_else(|| Value::new::<Vec<u8>>(vec![]).try_to_owned().unwrap());
@@ -65,12 +88,14 @@ impl Service {
6588
.duration_since(SystemTime::UNIX_EPOCH)
6689
.unwrap(),
6790
Arc::clone(&self.keyring),
91+
Arc::clone(&self.manager),
6892
);
6993
self.set_collections(Collection::new(
7094
collection.label(),
7195
alias,
7296
Duration::from_secs(collection.created()),
7397
Arc::clone(&self.keyring),
98+
Arc::clone(&self.manager),
7499
));
75100

76101
let path = OwnedObjectPath::from(collection.path());
@@ -253,6 +278,7 @@ impl Service {
253278
collections: Vec::new(),
254279
keyring: Arc::new(Keyring::load_default().await.unwrap()),
255280
cnx: Default::default(),
281+
manager: Arc::new(ServiceManager::new()),
256282
}
257283
}
258284

0 commit comments

Comments
 (0)