2021-12-17 16:43:31 +01:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2021. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
|
|
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
|
|
|
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
|
|
|
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
|
|
|
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
|
|
|
*/
|
|
|
|
|
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
|
|
|
}
|