Update dependencies.

Since cursive_table_view was updated, cursive can also be updated.
This commit is contained in:
Christoph Heiss 2020-02-12 00:29:37 +01:00
parent 1e4c3cea42
commit bc76050d3a
Signed by: c8h4
GPG key ID: 8D9166DCF6A28E57
5 changed files with 605 additions and 856 deletions

1375
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -11,33 +11,36 @@ description = "terminal-based vault browser for bitwarden"
[dependencies]
aes = "0.3.2"
base64 = "0.11.0"
base64 = "0.12.0"
block-modes = "0.3.3"
clipboard = "0.5.0"
cursive_buffered_backend = "0.3.1"
cursive_table_view = "0.10.0"
cursive_table_view = "0.12.0"
directories = "2.0.2"
failure = "0.1.6"
fuzzy-matcher = "0.3.1"
failure = "0.1.7"
fuzzy-matcher = "0.3.4"
hkdf = "0.8.0"
hmac = "0.7.1"
pbkdf2 = "0.3.0"
reqwest = "0.9.24"
serde_json = "1.0.44"
sha2 = "0.8.0"
serde_json = "1.0.51"
sha2 = "0.8.1"
unicase = "2.6.0"
[dependencies.chrono]
version = "0.4.10"
version = "0.4.11"
features = ["serde"]
[dependencies.cursive]
version = "0.12.0"
version = "0.14.0"
default-features = false
features = ["termion-backend"]
[dependencies.reqwest]
version = "0.10.4"
features = ["blocking", "json"]
[dependencies.serde]
version = "1.0.104"
version = "1.0.106"
features = ["derive"]
[dependencies.uuid]

View file

@ -238,13 +238,13 @@ pub struct AppData {
}
fn perform_prelogin(client: &reqwest::Client, email: &str) -> Result<PreloginResponseData, ApiError> {
fn perform_prelogin(client: &reqwest::blocking::Client, email: &str) -> Result<PreloginResponseData, ApiError> {
let url = format!("{}/accounts/prelogin", BASE_URL);
let mut data = HashMap::new();
data.insert("email", email);
let mut response = client.post(&url)
let response = client.post(&url)
.json(&data)
.send()
.map_err(|e| ApiError::PreloginFailed { error: e.to_string() })?;
@ -261,7 +261,7 @@ fn perform_prelogin(client: &reqwest::Client, email: &str) -> Result<PreloginRes
}
fn perform_token_auth(client: &reqwest::Client, email: &str, cipher: &CipherSuite)
fn perform_token_auth(client: &reqwest::blocking::Client, email: &str, cipher: &CipherSuite)
-> Result<LoginResponseData, ApiError>
{
let device_id = Uuid::new_v4().to_hyphenated().to_string();
@ -276,7 +276,7 @@ fn perform_token_auth(client: &reqwest::Client, email: &str, cipher: &CipherSuit
data.insert("deviceName", "bwtui");
data.insert("password", &cipher.master_key_hash);
let mut response = client.post(AUTH_URL)
let response = client.post(AUTH_URL)
.form(&data)
.send()
.map_err(|e| ApiError::LoginFailed { error: e.to_string() })?;
@ -294,7 +294,7 @@ fn perform_token_auth(client: &reqwest::Client, email: &str, cipher: &CipherSuit
pub fn authenticate(email: &str, password: &str) -> Result<AuthData, ApiError> {
let client = reqwest::Client::new();
let client = reqwest::blocking::Client::new();
let PreloginResponseData { kdf, kdf_iterations } =
perform_prelogin(&client, email)?;
@ -327,12 +327,12 @@ pub fn sync(auth_data: &AuthData) -> Result<VaultData, ApiError> {
let auth_header = format!("{} {}", auth_data.token_type, auth_data.access_token);
headers.insert(header::AUTHORIZATION, HeaderValue::from_str(&auth_header).unwrap());
let client = reqwest::Client::builder()
let client = reqwest::blocking::Client::builder()
.default_headers(headers)
.build()
.map_err(map_reqwest_err)?;
let mut response = client.get(&url)
let response = client.get(&url)
.send()
.map_err(map_reqwest_err)?;
@ -403,10 +403,7 @@ pub fn read_app_data() -> Result<AppData, ApiError> {
let auth = read_data_from("auth.json")?;
let vault = read_data_from("vault.json")?;
Ok(AppData {
auth,
vault,
})
Ok(AppData { auth, vault })
}

View file

@ -14,24 +14,24 @@ use crate::vault;
pub fn ask(siv: &mut Cursive, default_email: Option<String>) {
let email_edit = EditView::new()
.content(default_email.clone().unwrap_or("".to_owned()))
.with_id("email");
.with_name("email");
let email_view =
OnEventView::new(email_edit)
.on_event(Event::CtrlChar('u'), |siv| {
if let Some(mut view) = siv.find_id::<EditView>("email") {
if let Some(mut view) = siv.find_name::<EditView>("email") {
view.set_content("")(siv);
}
});
let password_edit = EditView::new()
.secret()
.with_id("master_password");
.with_name("master_password");
let password_view =
OnEventView::new(password_edit)
.on_event(Event::CtrlChar('u'), |siv| {
if let Some(mut view) = siv.find_id::<EditView>("master_password") {
if let Some(mut view) = siv.find_name::<EditView>("master_password") {
view.set_content("")(siv);
}
});
@ -47,14 +47,14 @@ pub fn ask(siv: &mut Cursive, default_email: Option<String>) {
.title("bitwarden vault login")
.button("Ok", |siv| {
let email = siv
.call_on_id("email", |view: &mut EditView| {
.call_on_name("email", |view: &mut EditView| {
view.get_content()
})
.unwrap()
.to_string();
let password = siv
.call_on_id("master_password", |view: &mut EditView| {
.call_on_name("master_password", |view: &mut EditView| {
view.get_content()
})
.unwrap();
@ -65,7 +65,7 @@ pub fn ask(siv: &mut Cursive, default_email: Option<String>) {
);
if default_email.is_some() {
siv.focus_id("master_password").unwrap();
siv.focus_name("master_password").unwrap();
}
}

View file

@ -88,11 +88,11 @@ pub fn show(siv: &mut Cursive, auth_data: AuthData, vault_data: VaultData) {
let table_view = OnEventView::new(
table
.with_id("password_table")
.with_name("password_table")
.full_screen()
)
.on_event('j', |siv| {
siv.call_on_id("password_table", |view: &mut VaultTableView| {
siv.call_on_name("password_table", |view: &mut VaultTableView| {
if let Some(row) = view.row() {
if row < view.len()-1 {
view.set_selected_row(row + 1);
@ -102,7 +102,7 @@ pub fn show(siv: &mut Cursive, auth_data: AuthData, vault_data: VaultData) {
.unwrap();
})
.on_event('k', |siv| {
siv.call_on_id("password_table", |view: &mut VaultTableView| {
siv.call_on_name("password_table", |view: &mut VaultTableView| {
if let Some(row) = view.row() {
if row > 0 {
view.set_selected_row(row - 1);
@ -112,19 +112,19 @@ pub fn show(siv: &mut Cursive, auth_data: AuthData, vault_data: VaultData) {
.unwrap();
})
.on_event('J', |siv| {
siv.call_on_id("password_table", |view: &mut VaultTableView| {
siv.call_on_name("password_table", |view: &mut VaultTableView| {
view.set_selected_row(view.len() - 1);
})
.unwrap();
})
.on_event('K', |siv| {
siv.call_on_id("password_table", |view: &mut VaultTableView| {
siv.call_on_name("password_table", |view: &mut VaultTableView| {
view.set_selected_row(0);
})
.unwrap();
})
.on_event(Event::CtrlChar('u'), |siv| {
siv.call_on_id("password_table", |view: &mut VaultTableView| {
siv.call_on_name("password_table", |view: &mut VaultTableView| {
if let Some(row) = view.item() {
if let Some(entry) = view.borrow_item(row) {
let mut clipboard: ClipboardContext = ClipboardProvider::new()
@ -139,7 +139,7 @@ pub fn show(siv: &mut Cursive, auth_data: AuthData, vault_data: VaultData) {
.unwrap();
})
.on_event(Event::CtrlChar('p'), |siv| {
siv.call_on_id("password_table", |view: &mut VaultTableView| {
siv.call_on_name("password_table", |view: &mut VaultTableView| {
if let Some(row) = view.item() {
if let Some(entry) = view.borrow_item(row) {
let mut clipboard: ClipboardContext = ClipboardProvider::new()
@ -154,7 +154,7 @@ pub fn show(siv: &mut Cursive, auth_data: AuthData, vault_data: VaultData) {
.unwrap();
})
.on_event(Event::CtrlChar('f'), |siv| {
siv.focus_id("search_field").unwrap();
siv.focus_name("search_field").unwrap();
});
let search_field =
@ -162,7 +162,7 @@ pub fn show(siv: &mut Cursive, auth_data: AuthData, vault_data: VaultData) {
.on_edit(move |siv, content, _| {
fuzzy_match_on_edit(siv, &items, content);
})
.with_id("search_field")
.with_name("search_field")
.full_width();
let search_view = LinearLayout::horizontal()
@ -170,16 +170,16 @@ pub fn show(siv: &mut Cursive, auth_data: AuthData, vault_data: VaultData) {
.child(
OnEventView::new(search_field)
.on_event(Event::CtrlChar('f'), |siv| {
siv.focus_id("password_table").unwrap();
siv.focus_name("password_table").unwrap();
})
.on_event(Key::Esc, |siv| {
siv.focus_id("password_table").unwrap();
siv.focus_name("password_table").unwrap();
})
.on_event(Key::Enter, |siv| {
siv.focus_id("password_table").unwrap();
siv.focus_name("password_table").unwrap();
})
.on_event(Event::CtrlChar('u'), |siv| {
if let Some(mut view) = siv.find_id::<EditView>("search_field") {
if let Some(mut view) = siv.find_name::<EditView>("search_field") {
view.set_content("")(siv);
}
})
@ -203,12 +203,12 @@ pub fn show(siv: &mut Cursive, auth_data: AuthData, vault_data: VaultData) {
);
siv.add_layer(layout);
siv.focus_id("password_table").unwrap();
siv.focus_name("password_table").unwrap();
}
fn fuzzy_match_on_edit(siv: &mut Cursive, items: &Vec<VaultEntry>, content: &str) {
let mut table = siv.find_id::<VaultTableView>("password_table").unwrap();
let mut table = siv.find_name::<VaultTableView>("password_table").unwrap();
// If no search term is present, sort by name and favorite by default
if content.len() == 0 {