fabaccess-bffh/bffhd/users/mod.rs

99 lines
2.4 KiB
Rust
Raw Normal View History

2021-12-17 16:43:31 +01:00
/*
2022-03-07 18:27:54 +01:00
* Copyright © 2022 RLKM UG (haftungsbeschränkt).
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
2021-12-17 16:43:31 +01:00
*/
2021-11-26 22:11:24 +01:00
use rkyv::{Archive, Serialize, Deserialize};
2021-11-26 21:01:43 +01:00
2021-11-26 22:11:24 +01:00
use capnp::capability::Promise;
use capnp::Error;
2021-12-06 21:53:42 +01:00
use capnp_rpc::pry;
2021-11-26 22:11:24 +01:00
use api::user::{
info,
manage,
admin,
2021-12-06 21:53:42 +01:00
passwd,
2021-11-26 22:11:24 +01:00
};
mod db;
2021-12-06 21:53:42 +01:00
mod pass;
2021-11-26 22:11:24 +01:00
pub use db::UserDB;
2021-12-06 21:53:42 +01:00
pub use pass::PassDB;
2021-11-26 22:11:24 +01:00
#[derive(Debug, Clone, Archive, Serialize, Deserialize, serde::Serialize, serde::Deserialize)]
2021-12-06 21:53:42 +01:00
/// User API endpoint
2021-11-26 22:11:24 +01:00
pub struct User {
id: u128,
username: String,
roles: Vec<String>,
}
impl User {
2021-12-17 16:43:31 +01:00
pub fn new(id: u128, username: String, roles: Vec<String>) -> Self {
User { id, username, roles }
}
2021-11-26 22:11:24 +01:00
}
impl info::Server for User {
fn list_roles(
&mut self,
2021-12-06 21:53:42 +01:00
_params: info::ListRolesParams,
2021-11-26 22:11:24 +01:00
mut results: info::ListRolesResults
) -> Promise<(), Error>
{
2021-12-06 21:53:42 +01:00
let results = results.get();
let mut roles = results.init_roles(self.roles.len() as u32);
for (i, role) in self.roles.iter().enumerate() {
let mut role_builder = roles.reborrow().get(i as u32);
role_builder.set_name(role);
}
2021-11-26 22:11:24 +01:00
Promise::ok(())
}
}
impl manage::Server for User {
2021-12-06 21:53:42 +01:00
fn add_role(
&mut self,
params: manage::AddRoleParams,
_: manage::AddRoleResults
) -> Promise<(), Error> {
let params = pry!(params.get());
let name = pry!(params.get_name()).to_string();
self.roles.push(name);
Promise::ok(())
}
2021-11-26 22:11:24 +01:00
2021-12-06 21:53:42 +01:00
fn remove_role(
&mut self,
params: manage::RemoveRoleParams,
_: manage::RemoveRoleResults
) -> Promise<(), Error> {
let params = pry!(params.get());
let name = pry!(params.get_name());
self.roles.retain(|role| role != name);
Promise::ok(())
}
2021-11-26 22:11:24 +01:00
}
impl admin::Server for User {
2021-12-06 21:53:42 +01:00
}
impl passwd::Server for User {
2021-11-26 22:11:24 +01:00
}