check if payload secrets match env variable secrets
This commit is contained in:
22
src/main.rs
22
src/main.rs
@ -1,5 +1,6 @@
|
||||
use std::fs::File;
|
||||
use std::io::prelude::*;
|
||||
use std::env;
|
||||
|
||||
use axum::{
|
||||
http::StatusCode,
|
||||
@ -36,6 +37,18 @@ fn init_status() -> Status {
|
||||
status::status(sensors, state)
|
||||
}
|
||||
|
||||
// check given secret
|
||||
// https://www.youtube.com/watch?v=aHKWVLH-ibY
|
||||
fn check_secret(given_secret: String, given_key: String) -> bool {
|
||||
let consumer_secret = env::var("consumer_secret").unwrap();
|
||||
let consumer_key = env::var("consumer_key").unwrap();
|
||||
|
||||
if given_secret == consumer_secret && given_key == consumer_key {
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
// Write status to file and return JSON string.
|
||||
fn write_status(s: Status) -> String {
|
||||
let s = serde_json::to_string(&s).unwrap();
|
||||
@ -59,11 +72,20 @@ async fn root() -> String {
|
||||
struct TheDoors {
|
||||
aerie: Option<bool>,
|
||||
cellar: Option<bool>,
|
||||
consumer_key: String,
|
||||
consumer_secret: String
|
||||
}
|
||||
|
||||
|
||||
// The door can see through your soul.
|
||||
// https://www.youtube.com/watch?v=bDQDp00oTP4
|
||||
async fn the_doors(Json(payload): Json<TheDoors>) -> StatusCode {
|
||||
|
||||
let check_secret = check_secret(payload.consumer_secret, payload.consumer_key);
|
||||
|
||||
if !check_secret { return StatusCode::FORBIDDEN; }
|
||||
|
||||
|
||||
let status: Status = if std::path::Path::new(STATUS_FILE).exists() {
|
||||
let contents = std::fs::read_to_string(STATUS_FILE).expect("FCKAFD");
|
||||
serde_json::from_str(&contents).unwrap_or_else(|_| init_status())
|
||||
|
Reference in New Issue
Block a user