Skip to content

Commit 3951526

Browse files
committed
Public key reset endpoint WIP
1 parent d9f8bcc commit 3951526

File tree

20 files changed

+243
-146
lines changed

20 files changed

+243
-146
lines changed

lib/src/agents.rs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//! Agents are actors (such as users) that can edit content.
33
//! https://docs.atomicdata.dev/commits/concepts.html
44
5-
use crate::{errors::AtomicResult, urls, Resource, Storelike, Value};
5+
use crate::{errors::AtomicResult, urls, Query, Resource, Storelike, Value};
66

77
#[derive(Clone, Debug)]
88
pub struct Agent {
@@ -39,6 +39,41 @@ impl Agent {
3939
Ok(resource)
4040
}
4141

42+
pub fn from_email(email: &str, store: &impl Storelike) -> AtomicResult<Self> {
43+
let mut query = Query::new();
44+
query.property = Some(urls::EMAIL.into());
45+
query.value = Some(Value::String(email.to_string()));
46+
let response = store.query(&query)?;
47+
if response.resources.is_empty() {
48+
return Err(format!("Agent with Email {} not found", email).into());
49+
}
50+
if response.resources.len() > 1 {
51+
return Err(format!(
52+
"Email {} is not unique, {} agents have this email",
53+
email, response.count
54+
)
55+
.into());
56+
}
57+
let resource = response.resources.first().unwrap();
58+
Agent::from_resource(resource.clone())
59+
}
60+
61+
pub fn from_resource(resource: Resource) -> AtomicResult<Self> {
62+
let name = if let Ok(name) = resource.get(urls::NAME) {
63+
Some(name.to_string())
64+
} else {
65+
None
66+
};
67+
68+
return Ok(Self {
69+
created_at: resource.get(urls::CREATED_AT)?.to_int()?,
70+
name,
71+
public_key: resource.get(urls::PUBLIC_KEY)?.to_string(),
72+
private_key: None,
73+
subject: resource.get_subject().into(),
74+
});
75+
}
76+
4277
/// Creates a new Agent, generates a new Keypair.
4378
pub fn new(name: Option<&str>, store: &impl Storelike) -> AtomicResult<Agent> {
4479
let keypair = generate_keypair()?;

lib/src/collections.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
//! Collections are dynamic resources that refer to multiple resources.
22
//! They are constructed using a TPF query
33
use crate::{
4-
errors::AtomicResult,
5-
storelike::{Query, ResourceCollection},
6-
urls, Resource, Storelike, Value,
4+
errors::AtomicResult, storelike::ResourceCollection, urls, Query, Resource, Storelike, Value,
75
};
86

97
#[derive(Debug)]

lib/src/db.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@ use crate::{
2626
email::{self, MailMessage},
2727
endpoints::{default_endpoints, Endpoint},
2828
errors::{AtomicError, AtomicResult},
29+
query::QueryResult,
2930
resources::PropVals,
30-
storelike::{Query, QueryResult, Storelike},
31+
storelike::Storelike,
3132
values::SortableValue,
32-
Atom, Resource,
33+
Atom, Query, Resource,
3334
};
3435

3536
use self::{

lib/src/db/query_index.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@
22
//! It relies on lexicographic ordering of keys, which Sled utilizes using `scan_prefix` queries.
33
44
use crate::{
5-
atoms::IndexAtom,
6-
errors::AtomicResult,
7-
storelike::{Query, QueryResult},
8-
values::SortableValue,
9-
Atom, Db, Resource, Storelike, Value,
5+
atoms::IndexAtom, errors::AtomicResult, query::QueryResult, values::SortableValue, Atom, Db,
6+
Query, Resource, Storelike, Value,
107
};
118
use serde::{Deserialize, Serialize};
129

lib/src/email.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! [EmailAddress] with validation, [MailMessage] with sending, and [get_smtp_client] for setting up mail.
22
3-
use crate::{errors::AtomicResult, storelike::Query, urls, Storelike};
3+
use crate::{errors::AtomicResult, urls, Query, Storelike};
44
use mail_send::{mail_builder::MessageBuilder, Connected, Transport};
55
use serde::{Deserialize, Serialize};
66
use tracing::info;

lib/src/hierarchy.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
55
use core::fmt;
66

7-
use crate::{errors::AtomicResult, storelike::Query, urls, AtomicError, Resource, Storelike};
7+
use crate::{errors::AtomicResult, urls, AtomicError, Query, Resource, Storelike};
88

99
#[derive(Debug)]
1010
pub enum Right {

lib/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ pub mod parse;
8787
#[cfg(feature = "db")]
8888
pub mod plugins;
8989
pub mod populate;
90+
pub mod query;
9091
pub mod resources;
9192
pub mod schema;
9293
pub mod serialize;
@@ -108,6 +109,7 @@ pub use commit::Commit;
108109
pub use db::Db;
109110
pub use errors::AtomicError;
110111
pub use errors::AtomicErrorType;
112+
pub use query::Query;
111113
pub use resources::Resource;
112114
pub use store::Store;
113115
pub use storelike::Storelike;

lib/src/plugins/chatroom.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ They list a bunch of Messages.
77
use crate::{
88
commit::{CommitBuilder, CommitResponse},
99
errors::AtomicResult,
10-
storelike::Query,
1110
urls::{self, PARENT},
12-
utils, Resource, Storelike, Value,
11+
utils, Query, Resource, Storelike, Value,
1312
};
1413

1514
// Find the messages for the ChatRoom

lib/src/plugins/importer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Importers allow users to (periodically) import JSON-AD files from a remote source.
33
*/
44

5-
use crate::{errors::AtomicResult, storelike::Query, urls, Resource, Storelike};
5+
use crate::{errors::AtomicResult, urls, Query, Resource, Storelike};
66

77
/// When an importer is shown, we list a bunch of Paramaters and a list of previously imported items.
88
#[tracing::instrument(skip(store, query_params))]

lib/src/plugins/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,6 @@ pub mod register;
4747
pub mod reset_pubkey;
4848
pub mod search;
4949
pub mod versioning;
50+
51+
// Utilities / helpers
52+
mod utils;

0 commit comments

Comments
 (0)