mask database password on the initial page

pull/157/head
kyoto7250 2 years ago
parent b13e4bb255
commit 5da538ac6d

@ -181,6 +181,24 @@ impl Config {
impl Connection {
pub fn database_url(&self) -> anyhow::Result<String> {
let password = self
.password
.as_ref()
.map_or(String::new(), |p| p.to_string());
return self.build_database_url(password);
}
fn masked_database_url(&self) -> anyhow::Result<String> {
let password = self
.password
.as_ref()
.map_or(String::new(), |p| p.to_string());
let masked_password = "*".repeat(password.len());
return self.build_database_url(masked_password);
}
fn build_database_url(&self, password: String) -> anyhow::Result<String> {
match self.r#type {
DatabaseType::MySql => {
let user = self
@ -195,10 +213,6 @@ impl Connection {
.port
.as_ref()
.ok_or_else(|| anyhow::anyhow!("type mysql needs the port field"))?;
let password = self
.password
.as_ref()
.map_or(String::new(), |p| p.to_string());
match self.database.as_ref() {
Some(database) => Ok(format!(
@ -231,10 +245,6 @@ impl Connection {
.port
.as_ref()
.ok_or_else(|| anyhow::anyhow!("type postgres needs the port field"))?;
let password = self
.password
.as_ref()
.map_or(String::new(), |p| p.to_string());
match self.database.as_ref() {
Some(database) => Ok(format!(
@ -268,7 +278,7 @@ impl Connection {
}
pub fn database_url_with_name(&self) -> anyhow::Result<String> {
let database_url = self.database_url()?;
let database_url = self.masked_database_url()?;
Ok(match &self.name {
Some(name) => format!(
@ -325,10 +335,61 @@ fn expand_path(path: &Path) -> Option<PathBuf> {
#[cfg(test)]
mod test {
use super::{expand_path, KeyConfig, Path, PathBuf};
use super::{expand_path, Connection, DatabaseType, KeyConfig, Path, PathBuf};
use serde_json::Value;
use std::env;
#[test]
fn test_database_url() {
let mysql_conn = Connection {
r#type: DatabaseType::MySql,
name: None,
user: Some("root".to_owned()),
host: Some("localhost".to_owned()),
port: Some(3306),
path: None,
password: Some("password".to_owned()),
database: Some("city".to_owned()),
};
let mysql_result = mysql_conn.database_url().unwrap();
assert_eq!(
mysql_result,
"mysql://root:password@localhost:3306/city".to_owned()
);
let postgres_conn = Connection {
r#type: DatabaseType::Postgres,
name: None,
user: Some("root".to_owned()),
host: Some("localhost".to_owned()),
port: Some(3306),
path: None,
password: Some("password".to_owned()),
database: Some("city".to_owned()),
};
let postgres_result = postgres_conn.database_url().unwrap();
assert_eq!(
postgres_result,
"postgres://root:password@localhost:3306/city".to_owned()
);
let sqlite_conn = Connection {
r#type: DatabaseType::Sqlite,
name: None,
user: None,
host: None,
port: None,
path: Some(PathBuf::from("/home/user/sqlite3.db")),
password: None,
database: None,
};
let sqlite_result = sqlite_conn.database_url().unwrap();
assert_eq!(sqlite_result, "sqlite:///home/user/sqlite3.db".to_owned());
}
#[test]
fn test_overlappted_key() {
let value: Value =

Loading…
Cancel
Save