Quellcode durchsuchen

Add support for password reprompt

Upstream PR: https://github.com/bitwarden/server/pull/1269
Jeremy Lin vor 4 Jahren
Ursprung
Commit
a9a5706764

+ 0 - 0
migrations/mysql/2021-04-30-233251_add_reprompt/down.sql


+ 2 - 0
migrations/mysql/2021-04-30-233251_add_reprompt/up.sql

@@ -0,0 +1,2 @@
+ALTER TABLE ciphers
+ADD COLUMN reprompt INTEGER;

+ 0 - 0
migrations/postgresql/2021-04-30-233251_add_reprompt/down.sql


+ 2 - 0
migrations/postgresql/2021-04-30-233251_add_reprompt/up.sql

@@ -0,0 +1,2 @@
+ALTER TABLE ciphers
+ADD COLUMN reprompt INTEGER;

+ 0 - 0
migrations/sqlite/2021-04-30-233251_add_reprompt/down.sql


+ 2 - 0
migrations/sqlite/2021-04-30-233251_add_reprompt/up.sql

@@ -0,0 +1,2 @@
+ALTER TABLE ciphers
+ADD COLUMN reprompt INTEGER;

+ 2 - 0
src/api/core/ciphers.rs

@@ -199,6 +199,7 @@ pub struct CipherData {
     Identity: Option<Value>,
 
     Favorite: Option<bool>,
+    Reprompt: Option<i32>,
 
     PasswordHistory: Option<Value>,
 
@@ -415,6 +416,7 @@ pub fn update_cipher_from_data(
     cipher.fields = data.Fields.map(|f| _clean_cipher_data(f).to_string());
     cipher.data = type_data.to_string();
     cipher.password_history = data.PasswordHistory.map(|f| f.to_string());
+    cipher.reprompt = data.Reprompt;
 
     cipher.save(&conn)?;
     cipher.move_to_folder(data.FolderId, &headers.user.uuid, &conn)?;

+ 9 - 0
src/db/models/cipher.rs

@@ -38,9 +38,16 @@ db_object! {
 
         pub password_history: Option<String>,
         pub deleted_at: Option<NaiveDateTime>,
+        pub reprompt: Option<i32>,
     }
 }
 
+#[allow(dead_code)]
+pub enum RepromptType {
+    None = 0,
+    Password = 1, // not currently used in server
+}
+
 /// Local methods
 impl Cipher {
     pub fn new(atype: i32, name: String) -> Self {
@@ -63,6 +70,7 @@ impl Cipher {
             data: String::new(),
             password_history: None,
             deleted_at: None,
+            reprompt: None,
         }
     }
 }
@@ -138,6 +146,7 @@ impl Cipher {
             "DeletedDate": self.deleted_at.map_or(Value::Null, |d| Value::String(format_date(&d))),
             "FolderId": self.get_folder_uuid(&user_uuid, conn),
             "Favorite": self.is_favorite(&user_uuid, conn),
+            "Reprompt": self.reprompt.unwrap_or(RepromptType::None as i32),
             "OrganizationId": self.organization_uuid,
             "Attachments": attachments_json,
             // We have UseTotp set to true by default within the Organization model.

+ 1 - 0
src/db/schemas/mysql/schema.rs

@@ -22,6 +22,7 @@ table! {
         data -> Text,
         password_history -> Nullable<Text>,
         deleted_at -> Nullable<Datetime>,
+        reprompt -> Nullable<Integer>,
     }
 }
 

+ 1 - 0
src/db/schemas/postgresql/schema.rs

@@ -22,6 +22,7 @@ table! {
         data -> Text,
         password_history -> Nullable<Text>,
         deleted_at -> Nullable<Timestamp>,
+        reprompt -> Nullable<Integer>,
     }
 }
 

+ 1 - 0
src/db/schemas/sqlite/schema.rs

@@ -22,6 +22,7 @@ table! {
         data -> Text,
         password_history -> Nullable<Text>,
         deleted_at -> Nullable<Timestamp>,
+        reprompt -> Nullable<Integer>,
     }
 }