Crates.io | lrau |
lib.rs | lrau |
version | 0.6.0 |
source | src |
created_at | 2021-04-03 17:44:35.430671 |
updated_at | 2021-07-31 08:45:15.445517 |
description | LrAU is an authentication and permission management system. |
homepage | |
repository | https://gitlab.com/libre-register/lrau |
max_upload_size | |
id | 378396 |
size | 66,179 |
LrAU is an authentication and permission management system for rust. It uses Argon2id to hash passwords to prevent against rainbow table and brute-forcing.
#[test]
fn generic() {
// Load from a toml file.
let permissions: lrau::Permissions =
toml::from_str(include_str!("./generic.toml")).unwrap();
// Create a password typical of someone who thinks their being clever.
let mut user = lrau::User::new(
String::from("john_t"),
String::from("1234"),
permissions,
);
// Valid their password
assert!(user.validate("1234"));
// Invalid their password
assert!(!user.validate("12345"));
// Permissions
// See if we have permissions to access contacts without
// mutable access.
assert!(user.get_permission(&["contacts", "name"], false));
// See if we can change users passwords with mut access.
assert!(user.get_permission(&["admin", "passwords"], true));
// Nonexisting paths inherit from paths further up the tree
assert!(user.get_permission(&["admin", "passwords", "reset"], true));
// Or are nothing if they are completely irrelevant.
assert!(!user.get_permission(&["notathing"], false));
// Checks if we have logged in (we haven't)
assert!(!user.check_login());
assert!(!user.check_valid_login());
// User Login
user.log_in("1234", std::time::Duration::from_secs(1));
// Checks for logins
assert!(user.check_login());
assert!(user.check_valid_login());
// Timeouts
std::thread::sleep(std::time::Duration::from_secs(1));
// We are still logged in...
assert!(user.check_login());
// But not validly.
assert!(!user.check_valid_login());
// And so getting vaild permissions does not work.
assert_eq!(
user.get_valid_permissions(&["admin", "passwords", "reset"], true),
Err(lrau::user::SessionExpired {}),
);
}
Serde is supported through the serde
feature. If you configure in toml, you can get something like this:
[[permissions]]
path = ["contacts"]
auth = false
[[permissions]]
path = ["contacts", "name"]
auth = true
[[permissions]]
path = ["contacts", "name", "middle"]
auth = false
[[permissions]]
path = ["contacts", "name", "last"]
auth = true
[[permissions]]
path = ["admin"]
auth = false
[[permissions]]
path = ["admin", "passwords"]
auth = true
mut = true
mut
, be default, is assumed to be false
, so you only need to write it if you are enabling it.
serde
.diesel-support
.sqlx-support
Fixed a massive security vulnerability.
In 0.4.0 all panicking functions have been made non-panacking. This decision was made because a web server really shouldn’t crash. This should mainly involve just adding ?
to the end of your function calls :)
Since version 0.3.0, instead of paths being strings they are now slices. This will cause issues with legacy code, preventing it to compile, and preventing serde information from being read.