upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2024-01-27 22:12:45 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2024-01-27 22:12:45 +0000
commit4589d06023b21a49a4d82fa24228a3879300cd7f (patch)
treeb15d07da76743b34d252cff57aa4ed9ebddd0116
parentfc3f22eac2bb81823f170f61ba9d39baff76b933 (diff)
fix(login): stop bailing when no name in metadata
now falls back to displayName, display_name or npub test pass when loggined printed to the cli in e0f543e8adb144f6deff6ff7ea0c412c9fcac5b4 are commented out
-rw-r--r--src/key_handling/users.rs17
-rw-r--r--tests/login.rs144
2 files changed, 158 insertions, 3 deletions
diff --git a/src/key_handling/users.rs b/src/key_handling/users.rs
index caa57e6..2c6a897 100644
--- a/src/key_handling/users.rs
+++ b/src/key_handling/users.rs
@@ -220,9 +220,20 @@ impl UserManagement for UserManager {
220 let metadata = nostr::Metadata::from_json(new_metadata_event.content.clone()) 220 let metadata = nostr::Metadata::from_json(new_metadata_event.content.clone())
221 .context("metadata cannot be found in kind 0 event content")?; 221 .context("metadata cannot be found in kind 0 event content")?;
222 user_ref.metadata = UserMetadata { 222 user_ref.metadata = UserMetadata {
223 name: metadata 223 name: if let Some(n) = metadata.name {
224 .name 224 n
225 .context("user metadata should always have name")?, 225 } else if let Some(n) = metadata.custom.get("displayName") {
226 // strip quote marks that custom.get() adds
227 let binding = n.to_string();
228 let mut chars = binding.chars();
229 chars.next();
230 chars.next_back();
231 chars.as_str().to_string()
232 } else if let Some(n) = metadata.display_name {
233 n
234 } else {
235 user_ref.metadata.name
236 },
226 created_at: new_metadata_event.created_at.as_u64(), 237 created_at: new_metadata_event.created_at.as_u64(),
227 }; 238 };
228 } 239 }
diff --git a/tests/login.rs b/tests/login.rs
index 4141a59..ee7450d 100644
--- a/tests/login.rs
+++ b/tests/login.rs
@@ -63,6 +63,9 @@ mod with_relays {
63 p.expect("searching for your details...\r\n")?; 63 p.expect("searching for your details...\r\n")?;
64 p.expect("\r")?; 64 p.expect("\r")?;
65 65
66 // p.expect_end_with(
67 // format!("logged in as {}\r\n", TEST_KEY_1_NPUB).as_str(),
68 // )?;
66 p.expect_end_with("logged in as fred\r\n")?; 69 p.expect_end_with("logged in as fred\r\n")?;
67 for p in [51, 52] { 70 for p in [51, 52] {
68 shutdown_relay(8000 + p)?; 71 shutdown_relay(8000 + p)?;
@@ -78,6 +81,46 @@ mod with_relays {
78 Ok(()) 81 Ok(())
79 } 82 }
80 83
84 async fn run_test_displays_fallback_to_npub(
85 relay_listener1: Option<ListenerReqFunc<'_>>,
86 relay_listener2: Option<ListenerReqFunc<'_>>,
87 ) -> Result<()> {
88 let (mut r51, mut r52) = (
89 Relay::new(8051, None, relay_listener1),
90 Relay::new(8052, None, relay_listener2),
91 );
92
93 let cli_tester_handle = std::thread::spawn(move || -> Result<()> {
94 with_fresh_config(|| {
95 let mut p = CliTester::new(["login"]);
96
97 p.expect_input(EXPECTED_NSEC_PROMPT)?
98 .succeeds_with(TEST_KEY_1_NSEC)?;
99
100 p.expect_password(EXPECTED_SET_PASSWORD_PROMPT)?
101 .with_confirmation(EXPECTED_SET_PASSWORD_CONFIRM_PROMPT)?
102 .succeeds_with(TEST_PASSWORD)?;
103
104 p.expect("searching for your details...\r\n")?;
105 p.expect("\r")?;
106
107 p.expect_end_with(
108 format!("logged in as {}\r\n", TEST_KEY_1_NPUB).as_str(),
109 )?;
110 for p in [51, 52] {
111 shutdown_relay(8000 + p)?;
112 }
113 Ok(())
114 })
115 });
116
117 // launch relay
118 let _ = join!(r51.listen_until_close(), r52.listen_until_close(),);
119
120 cli_tester_handle.join().unwrap()?;
121 Ok(())
122 }
123
81 #[test] 124 #[test]
82 #[serial] 125 #[serial]
83 fn when_latest_metadata_and_relay_list_on_all_relays() -> Result<()> { 126 fn when_latest_metadata_and_relay_list_on_all_relays() -> Result<()> {
@@ -107,6 +150,107 @@ mod with_relays {
107 )) 150 ))
108 } 151 }
109 152
153 mod poorly_quality_metadata_event {
154 use super::*;
155
156 #[test]
157 #[serial]
158 fn when_metadata_contains_only_display_name() -> Result<()> {
159 futures::executor::block_on(run_test_displays_correct_name(
160 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
161 relay.respond_events(
162 client_id,
163 &subscription_id,
164 &vec![
165 nostr::event::EventBuilder::metadata(
166 &nostr::Metadata::new().display_name("fred"),
167 )
168 .to_event(&TEST_KEY_1_KEYS)
169 .unwrap(),
170 generate_test_key_1_relay_list_event_same_as_fallback(),
171 ],
172 )?;
173 Ok(())
174 }),
175 None,
176 ))
177 }
178
179 #[test]
180 #[serial]
181 fn when_metadata_contains_only_displayname() -> Result<()> {
182 println!(
183 "displayName: {}",
184 nostr::Metadata::new()
185 .custom_field("displayName", "fred")
186 .custom
187 .get("displayName")
188 .unwrap()
189 );
190 println!(
191 "name: {}",
192 nostr::Metadata::new().name("fred").name.unwrap()
193 );
194
195 futures::executor::block_on(run_test_displays_correct_name(
196 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
197 relay.respond_events(
198 client_id,
199 &subscription_id,
200 &vec![
201 nostr::event::EventBuilder::metadata(
202 &nostr::Metadata::new()
203 .custom_field("displayName", "fred"),
204 )
205 .to_event(&TEST_KEY_1_KEYS)
206 .unwrap(),
207 generate_test_key_1_relay_list_event_same_as_fallback(),
208 ],
209 )?;
210 Ok(())
211 }),
212 None,
213 ))
214 }
215
216 #[test]
217 #[serial]
218 fn displays_npub_when_metadata_contains_no_name_displayname_or_display_name()
219 -> Result<()> {
220 println!(
221 "displayName: {}",
222 nostr::Metadata::new()
223 .custom_field("displayName", "fred")
224 .custom
225 .get("displayName")
226 .unwrap()
227 );
228 println!(
229 "name: {}",
230 nostr::Metadata::new().name("fred").name.unwrap()
231 );
232
233 futures::executor::block_on(run_test_displays_fallback_to_npub(
234 Some(&|relay, client_id, subscription_id, _| -> Result<()> {
235 relay.respond_events(
236 client_id,
237 &subscription_id,
238 &vec![
239 nostr::event::EventBuilder::metadata(
240 &nostr::Metadata::new(),
241 )
242 .to_event(&TEST_KEY_1_KEYS)
243 .unwrap(),
244 generate_test_key_1_relay_list_event_same_as_fallback(),
245 ],
246 )?;
247 Ok(())
248 }),
249 None,
250 ))
251 }
252 }
253
110 #[test] 254 #[test]
111 #[serial] 255 #[serial]
112 fn when_latest_metadata_and_relay_list_on_some_relays_but_others_have_none() 256 fn when_latest_metadata_and_relay_list_on_some_relays_but_others_have_none()