add simple authentication by secret
Some checks are pending
continuous-integration/drone/push Build is running

This commit is contained in:
Johannes Heuel
2022-09-20 21:49:52 +02:00
parent 68fe42f7c1
commit 40ff666318
4 changed files with 97 additions and 49 deletions

View File

@@ -12,7 +12,7 @@ use zoidberg_lib::types::{FetchResponse, Job, RegisterResponse, Status, Update};
const VERSION: &str = env!("CARGO_PKG_VERSION");
fn build_client(secret: &str) -> Client {
let cookie = format!("secret={}", secret);
let cookie = format!("{}", secret);
let mut headers = header::HeaderMap::new();
headers.insert(
@@ -31,11 +31,12 @@ fn build_client(secret: &str) -> Client {
#[derive(Debug)]
struct Worker {
id: i32,
secret: String,
}
impl Worker {
async fn new(server: &str) -> Result<Worker, Box<dyn Error>> {
let res = build_client("some_secret")
async fn new(server: &str, secret: &str) -> Result<Worker, Box<dyn Error>> {
let res = build_client(secret)
.get(format!("{}/register", server))
.send()
.await?;
@@ -43,7 +44,10 @@ impl Worker {
let body = res.text().await?;
let r: RegisterResponse = serde_json::from_str(&body)?;
log::info!("registered worker with id: {}", &r.id);
Ok(Worker { id: r.id })
Ok(Worker {
id: r.id,
secret: secret.to_string(),
})
}
async fn update(self: &Self, jobs: &[Job]) -> Result<(), Box<dyn Error>> {
@@ -56,7 +60,7 @@ impl Worker {
})
.collect();
let body = build_client("some_secret")
let body = build_client(&self.secret)
.post("http://localhost:8080/update")
.json(&updates)
.send()
@@ -69,7 +73,7 @@ impl Worker {
}
async fn fetch(self: &Self) -> Result<FetchResponse, Box<dyn Error>> {
let res = build_client("some_secret")
let res = build_client(&self.secret)
.get("http://localhost:8080/fetch")
.send()
.await?;
@@ -125,8 +129,12 @@ async fn main() -> Result<(), Box<dyn Error>> {
)
.get_matches();
let server = matches.value_of("server").unwrap();
let secret = std::env::var("ZOIDBERG_SECRET")
.expect("Please set the $ZOIDBERG_SECRET environment variable");
let client = Worker::new(server).await.expect("Could not create client");
let client = Worker::new(server, &secret)
.await
.expect("Could not create client");
let pause = time::Duration::from_secs(1);
let long_pause = time::Duration::from_secs(20);