Add server command
This commit is contained in:
parent
d1a223fac9
commit
6c32ae8b68
7 changed files with 77 additions and 6 deletions
37
Cargo.lock
generated
37
Cargo.lock
generated
|
|
@ -3309,6 +3309,7 @@ dependencies = [
|
||||||
"tokio",
|
"tokio",
|
||||||
"tonic 0.12.3",
|
"tonic 0.12.3",
|
||||||
"tonic-build",
|
"tonic-build",
|
||||||
|
"tonic-web",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -3799,6 +3800,26 @@ dependencies = [
|
||||||
"syn 2.0.89",
|
"syn 2.0.89",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tonic-web"
|
||||||
|
version = "0.12.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5299dd20801ad736dccb4a5ea0da7376e59cd98f213bf1c3d478cf53f4834b58"
|
||||||
|
dependencies = [
|
||||||
|
"base64 0.22.1",
|
||||||
|
"bytes",
|
||||||
|
"http 1.1.0",
|
||||||
|
"http-body 1.0.1",
|
||||||
|
"http-body-util",
|
||||||
|
"pin-project",
|
||||||
|
"tokio-stream",
|
||||||
|
"tonic 0.12.3",
|
||||||
|
"tower-http",
|
||||||
|
"tower-layer",
|
||||||
|
"tower-service",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tower"
|
name = "tower"
|
||||||
version = "0.4.13"
|
version = "0.4.13"
|
||||||
|
|
@ -3819,6 +3840,22 @@ dependencies = [
|
||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tower-http"
|
||||||
|
version = "0.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.6.0",
|
||||||
|
"bytes",
|
||||||
|
"http 1.1.0",
|
||||||
|
"http-body 1.0.1",
|
||||||
|
"http-body-util",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tower-layer",
|
||||||
|
"tower-service",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tower-layer"
|
name = "tower-layer"
|
||||||
version = "0.3.3"
|
version = "0.3.3"
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ service BurrowWeb {
|
||||||
rpc CreateDevice (CreateDeviceRequest) returns (CreateDeviceResponse);
|
rpc CreateDevice (CreateDeviceRequest) returns (CreateDeviceResponse);
|
||||||
rpc DeleteDevice (JWTInfo) returns (Empty);
|
rpc DeleteDevice (JWTInfo) returns (Empty);
|
||||||
rpc ListDevices (JWTInfo) returns (ListDevicesResponse);
|
rpc ListDevices (JWTInfo) returns (ListDevicesResponse);
|
||||||
|
rpc Status(Empty) returns (ServerStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
message Peer {
|
message Peer {
|
||||||
|
|
@ -88,3 +89,7 @@ message CreateDeviceResponse {
|
||||||
message ListDevicesResponse {
|
message ListDevicesResponse {
|
||||||
repeated Device devices = 1;
|
repeated Device devices = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message ServerStatus {
|
||||||
|
string status = 1;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ dotenvy = "0.15.7"
|
||||||
config = "0.14.1"
|
config = "0.14.1"
|
||||||
prost = "0.13.3"
|
prost = "0.13.3"
|
||||||
prost-types = "0.13.3"
|
prost-types = "0.13.3"
|
||||||
|
tonic-web = "0.12.3"
|
||||||
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
|
|
||||||
BIN
server/server.sqlite3
Normal file
BIN
server/server.sqlite3
Normal file
Binary file not shown.
|
|
@ -2,7 +2,7 @@ pub mod client;
|
||||||
pub mod server;
|
pub mod server;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use clap::{Args, Parser, Subcommand};
|
use clap::{Args, Parser, Subcommand};
|
||||||
use server::providers::gen_keypem;
|
use server::{providers::gen_keypem, serve};
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
#[command(name = "Burrow Server")]
|
#[command(name = "Burrow Server")]
|
||||||
|
|
@ -44,7 +44,9 @@ async fn main() -> Result<()> {
|
||||||
println!("Generated PEM:\n{pem}")
|
println!("Generated PEM:\n{pem}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Commands::StartServer => todo!(),
|
Commands::StartServer => {
|
||||||
|
serve().await?;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,21 +4,32 @@ use jwt_simple::prelude::Ed25519KeyPair;
|
||||||
use tonic::{Request, Response, Status};
|
use tonic::{Request, Response, Status};
|
||||||
|
|
||||||
use super::providers::{KeypairT, OpenIdUser};
|
use super::providers::{KeypairT, OpenIdUser};
|
||||||
|
use std::fmt::Debug;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
grpc_defs::{
|
grpc_defs::{
|
||||||
burrowwebrpc::burrow_web_server::BurrowWeb, CreateDeviceRequest, CreateDeviceResponse,
|
burrowwebrpc::burrow_web_server::BurrowWeb, CreateDeviceRequest, CreateDeviceResponse,
|
||||||
Empty, JwtInfo, ListDevicesResponse, SlackAuthRequest,
|
Empty, JwtInfo, ListDevicesResponse, ServerStatus, SlackAuthRequest,
|
||||||
},
|
},
|
||||||
providers::slack::auth,
|
providers::slack::auth,
|
||||||
settings::BurrowAuthServerConfig,
|
settings::BurrowAuthServerConfig,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BurrowGrpcServer {
|
#[derive(Clone)]
|
||||||
|
pub struct BurrowGrpcServer {
|
||||||
config: Arc<BurrowAuthServerConfig>,
|
config: Arc<BurrowAuthServerConfig>,
|
||||||
jwt_keypair: Arc<KeypairT>,
|
jwt_keypair: Arc<KeypairT>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Debug for BurrowGrpcServer {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
f.debug_struct("BurrowGrpcServer")
|
||||||
|
.field("config", &self.config)
|
||||||
|
.field("jwt_keypair", &"<redacted>")
|
||||||
|
.finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl BurrowGrpcServer {
|
impl BurrowGrpcServer {
|
||||||
pub fn new() -> anyhow::Result<Self> {
|
pub fn new() -> anyhow::Result<Self> {
|
||||||
let config = BurrowAuthServerConfig::new_dotenv()?;
|
let config = BurrowAuthServerConfig::new_dotenv()?;
|
||||||
|
|
@ -62,4 +73,10 @@ impl BurrowWeb for BurrowGrpcServer {
|
||||||
) -> Result<Response<ListDevicesResponse>, Status> {
|
) -> Result<Response<ListDevicesResponse>, Status> {
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn status(&self, _req: Request<Empty>) -> Result<Response<ServerStatus>, Status> {
|
||||||
|
Ok(Response::new(ServerStatus {
|
||||||
|
status: "Nobody expects the Spanish Inquisition".into(),
|
||||||
|
}))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,22 @@ pub mod providers;
|
||||||
pub mod settings;
|
pub mod settings;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use providers::slack::auth;
|
use grpc_defs::burrow_web_server::BurrowWebServer;
|
||||||
|
use grpc_server::BurrowGrpcServer;
|
||||||
use tokio::signal;
|
use tokio::signal;
|
||||||
|
use tonic::transport::Server;
|
||||||
|
|
||||||
pub async fn serve() -> Result<()> {
|
pub async fn serve() -> Result<()> {
|
||||||
db::init_db()?;
|
db::init_db()?;
|
||||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await.unwrap();
|
let addr = "[::1]:8080".parse()?;
|
||||||
log::info!("Starting auth server on port 8080");
|
log::info!("Starting auth server on port 8080");
|
||||||
|
let burrow_grpc_server = BurrowGrpcServer::new()?;
|
||||||
|
let svc = BurrowWebServer::new(burrow_grpc_server);
|
||||||
|
Server::builder()
|
||||||
|
.accept_http1(true)
|
||||||
|
.add_service(tonic_web::enable(svc))
|
||||||
|
.serve(addr)
|
||||||
|
.await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue