66 lines
1.6 KiB
Rust
Raw Normal View History

2020-11-17 14:35:16 +01:00
use std::sync::Arc;
use slog::Logger;
2020-11-17 14:38:11 +01:00
use capnp::capability::{Params, Results, Promise};
2020-11-17 14:35:16 +01:00
use crate::schema::connection_capnp;
use crate::connection::Session;
2020-11-20 13:06:55 +01:00
use crate::db::Databases;
2020-11-24 14:41:19 +01:00
use crate::builtin;
2020-11-17 14:35:16 +01:00
pub mod auth;
2020-11-17 14:15:29 +01:00
mod machine;
mod machines;
2020-11-17 14:35:16 +01:00
use machines::Machines;
pub struct Bootstrap {
2020-11-20 13:06:55 +01:00
session: Arc<Session>,
db: Databases,
2020-11-17 14:35:16 +01:00
}
impl Bootstrap {
2020-11-20 13:06:55 +01:00
pub fn new(session: Arc<Session>, db: Databases) -> Self {
info!(session.log, "Created Bootstrap");
2020-11-20 13:06:55 +01:00
Self { session, db }
2020-11-17 14:35:16 +01:00
}
}
use connection_capnp::bootstrap::*;
impl connection_capnp::bootstrap::Server for Bootstrap {
fn auth(&mut self,
_: Params<auth_params::Owned>,
mut res: Results<auth_results::Owned>
) -> Promise<(), capnp::Error> {
// Forbid mutltiple authentication for now
// TODO: When should we allow multiple auth and how do me make sure that does not leak
// priviledges (e.g. due to previously issues caps)?
2020-11-24 15:57:23 +01:00
2020-11-30 07:23:47 +01:00
res.get().set_auth(capnp_rpc::new_client(auth::Auth::new(self.db.passdb.clone(), self.session.clone())));
2020-11-24 15:57:23 +01:00
Promise::ok(())
2020-11-17 14:35:16 +01:00
}
fn permissions(&mut self,
_: Params<permissions_params::Owned>,
2020-11-17 14:38:11 +01:00
_: Results<permissions_results::Owned>
2020-11-17 14:35:16 +01:00
) -> Promise<(), capnp::Error> {
Promise::ok(())
}
fn machines(&mut self,
_: Params<machines_params::Owned>,
mut res: Results<machines_results::Owned>
) -> Promise<(), capnp::Error> {
// TODO actual permission check and stuff
2020-11-20 15:43:03 +01:00
let c = capnp_rpc::new_client(Machines::new(self.session.clone(), self.db.clone()));
res.get().set_machines(c);
2020-11-17 14:35:16 +01:00
Promise::ok(())
}
}