mirror of
https://gitlab.com/fabinfra/fabaccess/bffh.git
synced 2024-11-11 01:53:23 +01:00
Implements loading of roles and users
This commit is contained in:
parent
bf3a3474db
commit
d4ed885dc7
@ -18,6 +18,7 @@ use lmdb::{Transaction, RwTransaction, Cursor};
|
|||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::error::Result;
|
use crate::error::Result;
|
||||||
|
|
||||||
|
// FIXME: fabinfra/fabaccess/bffh#3
|
||||||
type UserIdentifier = u64;
|
type UserIdentifier = u64;
|
||||||
type RoleIdentifier = u64;
|
type RoleIdentifier = u64;
|
||||||
type PermIdentifier = u64;
|
type PermIdentifier = u64;
|
||||||
@ -235,7 +236,7 @@ impl PermissionsProvider {
|
|||||||
if !path.is_dir() {
|
if !path.is_dir() {
|
||||||
error!(self.log, "Given load directory is malformed, no 'perms' subdir, not loading perms!");
|
error!(self.log, "Given load directory is malformed, no 'perms' subdir, not loading perms!");
|
||||||
} else {
|
} else {
|
||||||
//self.load_perms(txn, &path)?;
|
self.load_perms(txn, &path)?;
|
||||||
}
|
}
|
||||||
path.pop();
|
path.pop();
|
||||||
// =================================================
|
// =================================================
|
||||||
@ -245,7 +246,7 @@ impl PermissionsProvider {
|
|||||||
if !path.is_dir() {
|
if !path.is_dir() {
|
||||||
error!(self.log, "Given load directory is malformed, no 'users' subdir, not loading users!");
|
error!(self.log, "Given load directory is malformed, no 'users' subdir, not loading users!");
|
||||||
} else {
|
} else {
|
||||||
//self.load_users(txn, &path)?;
|
self.load_users(txn, &path)?;
|
||||||
}
|
}
|
||||||
path.pop();
|
path.pop();
|
||||||
// =================================================
|
// =================================================
|
||||||
@ -295,6 +296,95 @@ impl PermissionsProvider {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn load_perms(&mut self, txn: &mut RwTransaction, path: &Path) -> Result<()> {
|
||||||
|
for entry in std::fs::read_dir(path)? {
|
||||||
|
let entry = entry?;
|
||||||
|
let path = entry.path();
|
||||||
|
if path.is_file() {
|
||||||
|
// will only ever be none if the path has no file name and then how is it a file?!
|
||||||
|
let permID_str = path
|
||||||
|
.file_stem().expect("Found a file with no filename?")
|
||||||
|
.to_str().expect("Found an OsStr that isn't valid Unicode. Fix your OS!");
|
||||||
|
let permID = match u64::from_str_radix(permID_str, 16) {
|
||||||
|
Ok(i) => i,
|
||||||
|
Err(e) => {
|
||||||
|
warn!(self.log, "File {} had a invalid name. Expected an u64 in [0-9a-z] hex with optional file ending: {}. Skipping!", path.display(), e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let s = match fs::read_to_string(path.as_path()) {
|
||||||
|
Ok(s) => s,
|
||||||
|
Err(e) => {
|
||||||
|
warn!(self.log, "Failed to open file {}: {}, skipping!"
|
||||||
|
, path.display()
|
||||||
|
, e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let perm: Perm = match toml::from_str(&s) {
|
||||||
|
Ok(r) => r,
|
||||||
|
Err(e) => {
|
||||||
|
warn!(self.log, "Failed to parse perm at path {}: {}, skipping!"
|
||||||
|
, path.display()
|
||||||
|
, e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
self.put_perm(txn, permID, perm)?;
|
||||||
|
debug!(self.log, "Loaded perm {}", permID);
|
||||||
|
} else {
|
||||||
|
warn!(self.log, "Path {} is not a file, skipping!", path.display());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn load_users(&mut self, txn: &mut RwTransaction, path: &Path) -> Result<()> {
|
||||||
|
for entry in std::fs::read_dir(path)? {
|
||||||
|
let entry = entry?;
|
||||||
|
let path = entry.path();
|
||||||
|
if path.is_file() {
|
||||||
|
// will only ever be none if the path has no file name and then how is it a file?!
|
||||||
|
let userID_str = path
|
||||||
|
.file_stem().expect("Found a file with no filename?")
|
||||||
|
.to_str().expect("Found an OsStr that isn't valid Unicode. Fix your OS!");
|
||||||
|
let userID = match u64::from_str_radix(userID_str, 16) {
|
||||||
|
Ok(i) => i,
|
||||||
|
Err(e) => {
|
||||||
|
warn!(self.log, "File {} had a invalid name. Expected an u64 in [0-9a-z] hex with optional file ending: {}. Skipping!", path.display(), e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let s = match fs::read_to_string(path.as_path()) {
|
||||||
|
Ok(s) => s,
|
||||||
|
Err(e) => {
|
||||||
|
warn!(self.log, "Failed to open file {}: {}, skipping!"
|
||||||
|
, path.display()
|
||||||
|
, e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let user: User = match toml::from_str(&s) {
|
||||||
|
Ok(r) => r,
|
||||||
|
Err(e) => {
|
||||||
|
warn!(self.log, "Failed to parse user at path {}: {}, skipping!"
|
||||||
|
, path.display()
|
||||||
|
, e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
self.put_user(txn, userID, user)?;
|
||||||
|
debug!(self.log, "Loaded user {}", userID);
|
||||||
|
} else {
|
||||||
|
warn!(self.log, "Path {} is not a file, skipping!", path.display());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This line documents init
|
/// This line documents init
|
||||||
|
Loading…
Reference in New Issue
Block a user