diff --git a/src/app/browser/window/tab/item/identity/gemini.rs b/src/app/browser/window/tab/item/identity/gemini.rs index b32e186e..463f992a 100644 --- a/src/app/browser/window/tab/item/identity/gemini.rs +++ b/src/app/browser/window/tab/item/identity/gemini.rs @@ -122,10 +122,16 @@ impl Gemini { profile .identity .gemini - .create(None, &widget.form.name.value().unwrap()) - .unwrap(), // @TODO handle result, + .make(None, &widget.form.name.value().unwrap()) + .unwrap(), + ), + Value::IMPORT_PEM => Some( + profile + .identity + .gemini + .add(&widget.form.file.pem.take().unwrap()) + .unwrap(), ), - Value::IMPORT_PEM => Some(0), // @TODO }; // Apply diff --git a/src/app/browser/window/tab/item/identity/gemini/widget/form.rs b/src/app/browser/window/tab/item/identity/gemini/widget/form.rs index dd13ec5d..fe8bdb8d 100644 --- a/src/app/browser/window/tab/item/identity/gemini/widget/form.rs +++ b/src/app/browser/window/tab/item/identity/gemini/widget/form.rs @@ -40,15 +40,15 @@ impl Form { let file = file.clone(); let name = name.clone(); let update = action.update.clone(); - move |key| { + move |item| { // Change name entry visibility - name.show(match key { + name.show(match item { Value::GENERATE_NEW_AUTH => true, _ => false, }); // Change file choose button visibility - file.show(match key { + file.show(match item { Value::IMPORT_PEM => true, _ => false, }); @@ -70,7 +70,7 @@ impl Form { // Actions - /// Validate form in current set + /// Validate `Self` components match current selection pub fn is_valid(&self) -> bool { match self.list.selected() { Value::GENERATE_NEW_AUTH => self.name.is_valid(), diff --git a/src/app/browser/window/tab/item/identity/gemini/widget/form/file.rs b/src/app/browser/window/tab/item/identity/gemini/widget/form/file.rs index 9dcb9140..ec6538ea 100644 --- a/src/app/browser/window/tab/item/identity/gemini/widget/form/file.rs +++ b/src/app/browser/window/tab/item/identity/gemini/widget/form/file.rs @@ -12,7 +12,7 @@ const LABEL: &str = "Choose file.."; const MARGIN: i32 = 8; pub struct File { - pem: Rc>>, + pub pem: Rc>>, pub gobject: Button, } diff --git a/src/profile/identity.rs b/src/profile/identity.rs index 9b1c8d08..57931d56 100644 --- a/src/profile/identity.rs +++ b/src/profile/identity.rs @@ -52,7 +52,7 @@ impl Identity { if let Some(id) = self.gemini.auth.memory.match_priority(request) { match self.gemini.memory.get(id) { Ok(pem) => return Some(pem), - Err(_) => todo!(), + Err(reason) => todo!("{:?}", reason), } } None diff --git a/src/profile/identity/gemini.rs b/src/profile/identity/gemini.rs index 495eaeea..9369fd0d 100644 --- a/src/profile/identity/gemini.rs +++ b/src/profile/identity/gemini.rs @@ -54,9 +54,21 @@ impl Gemini { // Actions - /// Create new record + /// Add new record to database, update memory index /// * return new `profile_identity_gemini_id` on success - pub fn create(&self, time: Option<(DateTime, DateTime)>, name: &str) -> Result { + pub fn add(&self, pem: &str) -> Result { + match self.database.add(pem) { + Ok(profile_identity_gemini_id) => { + self.index()?; + Ok(profile_identity_gemini_id) + } + Err(reason) => Err(Error::DatabaseRecordCreate(reason)), + } + } + + /// Generate new certificate and insert record to DB, update memory index + /// * return new `profile_identity_gemini_id` on success + pub fn make(&self, time: Option<(DateTime, DateTime)>, name: &str) -> Result { // Generate new certificate match certificate::generate( match time { @@ -68,13 +80,7 @@ impl Gemini { }, name, ) { - Ok(pem) => match self.database.add(&pem) { - Ok(profile_identity_gemini_id) => { - self.index()?; - Ok(profile_identity_gemini_id) - } - Err(reason) => Err(Error::DatabaseRecordCreate(reason)), - }, + Ok(pem) => self.add(&pem), Err(reason) => Err(Error::Certificate(reason)), } }