Procházet zdrojové kódy

get_ssh_keys now returns a Vec of hashmap so if two keys have the same name they'll still be displayed

clement před 1 rokem
rodič
revize
74617213b3
3 změnil soubory, kde provedl 21 přidání a 19 odebrání
  1. 1 1
      src/handler.rs
  2. 6 6
      src/ldap/lib.rs
  3. 14 12
      templates/sshhomepage.html

+ 1 - 1
src/handler.rs

@@ -37,7 +37,7 @@ async fn get_template(template_name: String, session: Session) -> String {
     .unwrap_or(None);
     let user_is_ssh: Option<bool> = session.get("user_is_ssh")
     .unwrap_or(None);
-    let ssh_keys: Option<HashMap<String, String>> = session.get("ssh_keys")
+    let ssh_keys: Option<Vec<HashMap<String, String>>> = session.get("ssh_keys")
     .unwrap_or(None);
 
 

+ 6 - 6
src/ldap/lib.rs

@@ -168,7 +168,7 @@ impl LdapWrapper {
         Ok(())
     }
 
-    pub async fn get_ssh_keys(&self, username: String) -> Result<HashMap<String, String>, Error> {
+    pub async fn get_ssh_keys(&self, username: String) -> Result<Vec<HashMap<String, String>>, Error> {
         let mut ldap = self.ldap_pool.get().await.unwrap();
         let search_res = ldap.search(&self.config.basedn, ldap3::Scope::Subtree, format!("(uid={})", username).as_str(), vec!["ldapPublicKey"])
         .await.map_err(|e| {Error::LdapServerError {message: format!("Error: {}", e)}})?;
@@ -182,23 +182,23 @@ impl LdapWrapper {
 
         let records = SearchEntry::construct(result_entry.first().unwrap().to_owned());
 
-        let ssh_keys: HashMap<String, String> = match records.attrs.get("sshPublicKey") {
+        let ssh_keys: Vec<HashMap<String, String>> = match records.attrs.get("sshPublicKey") {
             Some(keys) => {
-                let mut keys_res = HashMap::new();
+                let mut keys_res = Vec::new();
                 let key_name_re = Regex::new(r"\S+").unwrap();
                 for key in keys {
                     let key_split: Vec<Captures> = key_name_re.captures_iter(&key).collect();
                     let key_name: String;
                     if key_split.len() < 3 {
-                        key_name = format!("unamed key: {}", key);
+                        key_name = String::from("unamed key");
                     } else {
                         key_name = key_split[2][0].to_string();
                     }
-                    keys_res.insert(key_name, key.to_string());
+                    keys_res.push(HashMap::from([(key_name, key.to_string())]));
                 }
                 keys_res
             },
-            None => HashMap::new(),
+            None => vec![HashMap::new()],
         };
 
         Ok(ssh_keys)

+ 14 - 12
templates/sshhomepage.html

@@ -1,18 +1,20 @@
 {% set ssh = true %}
 {% include "base.html" %}
 <div class="section">
-    {% for key_name, key_value in ssh_keys %}
-    <article class="message is-primary">
-        <div class="message-header">
-            <div>{{ key_name }}</div>
-        </div>
-        <div class="message-body is-family-monospace">
-            {{ key_value }} </br></br>
-            <form method="post" accept-charset="UTF-8" action="delsshkey">
-            <button type="submit" name="key_to_delete" value="{{ key_value }}" class="button is-danger">Delete</button>
-            </form>
-        </div>
-    </article>
+    {%for keys in ssh_keys %}
+        {% for key_name, key_value in keys %}
+        <article class="message is-primary">
+            <div class="message-header">
+                <div>{{ key_name }}</div>
+            </div>
+            <div class="message-body is-family-monospace">
+                {{ key_value }} </br></br>
+                <form method="post" accept-charset="UTF-8" action="delsshkey">
+                <button type="submit" name="key_to_delete" value="{{ key_value }}" class="button is-danger">Delete</button>
+                </form>
+            </div>
+        </article>
+        {% endfor %}
     {% endfor %}
 </div>
 <div class="section">