implement host metadata (out of date and last seen at)
Implements: https://todo.e3t.cc/~core/trifid/3
This commit is contained in:
parent
b12df8aafe
commit
631d4d5280
File diff suppressed because it is too large
Load Diff
|
@ -25,7 +25,7 @@ serde_yaml = "0.9.21" # Config / Serialization and deserialization
|
|||
log = "0.4" # Logging
|
||||
simple_logger = "4" # Logging
|
||||
|
||||
sea-orm = { version = "^0", features = [ "sqlx-postgres", "runtime-actix-rustls", "macros" ]} # Database
|
||||
sea-orm = { version = "0.12", features = [ "sqlx-postgres", "runtime-actix-rustls", "macros" ]} # Database
|
||||
trifid_api_migration = { version = "0.1.0", path = "trifid_api_migration" } # Database
|
||||
trifid_api_entities = { version = "0.1.0", path = "trifid_api_entities" } # Database
|
||||
|
||||
|
|
|
@ -24,7 +24,6 @@ use sea_orm::{ConnectOptions, Database, DatabaseConnection};
|
|||
use std::error::Error;
|
||||
use std::time::Duration;
|
||||
use actix_cors::Cors;
|
||||
|
||||
use crate::config::CONFIG;
|
||||
use crate::error::{APIError, APIErrorsResponse};
|
||||
use crate::keystore::keystore_init;
|
||||
|
|
|
@ -13,8 +13,14 @@ use dnapi_rs::message::{
|
|||
use ed25519_dalek::{Signature, Signer, Verifier, VerifyingKey};
|
||||
use log::{error, warn};
|
||||
use std::clone::Clone;
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
use sea_orm::{ActiveModelTrait, EntityTrait};
|
||||
use trifid_pki::cert::{deserialize_ed25519_public, deserialize_x25519_public};
|
||||
use trifid_pki::x25519_dalek::PublicKey;
|
||||
use trifid_api_entities::entity::host;
|
||||
use crate::error::APIErrorsResponse;
|
||||
use sea_orm::{ColumnTrait, QueryFilter, IntoActiveModel};
|
||||
use sea_orm::ActiveValue::Set;
|
||||
|
||||
#[post("/v1/dnclient")]
|
||||
pub async fn dnclient(
|
||||
|
@ -134,6 +140,42 @@ pub async fn dnclient(
|
|||
}
|
||||
};
|
||||
|
||||
let host_model = match host::Entity::find()
|
||||
.filter(host::Column::Id.eq(host))
|
||||
.one(&db.conn)
|
||||
.await
|
||||
{
|
||||
Ok(h) => h,
|
||||
Err(e) => {
|
||||
error!("Database error: {}", e);
|
||||
return HttpResponse::InternalServerError().json(APIErrorsResponse {
|
||||
errors: vec![crate::error::APIError {
|
||||
code: "ERR_DB_ERROR".to_string(),
|
||||
message: "There was an error with the database query. Please try again later."
|
||||
.to_string(),
|
||||
path: None,
|
||||
}],
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
let host_model = match host_model {
|
||||
Some(h) => h,
|
||||
None => {
|
||||
return HttpResponse::NotFound().json(APIErrorsResponse {
|
||||
errors: vec![crate::error::APIError {
|
||||
code: "ERR_NOT_FOUND".to_string(),
|
||||
message:
|
||||
"resource not found"
|
||||
.to_string(),
|
||||
path: None,
|
||||
}],
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
let mut host_am = host_model.into_active_model();
|
||||
|
||||
// Do a config build
|
||||
|
||||
let info = match collect_info(&db, host, client_keys.dh_pub.as_bytes()).await {
|
||||
|
@ -172,6 +214,24 @@ pub async fn dnclient(
|
|||
let config_update_avail = current_cfg.map(|u| u.config.clone()) != Some(cfg.clone())
|
||||
|| req.counter < host_in_ks.current_config as u32;
|
||||
|
||||
host_am.last_out_of_date = Set(config_update_avail);
|
||||
host_am.last_seen_at = Set(SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs() as i64);
|
||||
|
||||
match host_am.update(&db.conn).await {
|
||||
Ok(_) => (),
|
||||
Err(e) => {
|
||||
error!("Database error: {}", e);
|
||||
return HttpResponse::InternalServerError().json(APIErrorsResponse {
|
||||
errors: vec![crate::error::APIError {
|
||||
code: "ERR_DB_ERROR".to_string(),
|
||||
message: "There was an error with the database query. Please try again later."
|
||||
.to_string(),
|
||||
path: None,
|
||||
}],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return match req_w.message_type.as_str() {
|
||||
"CheckForUpdate" => {
|
||||
// value ignored here
|
||||
|
|
|
@ -11,4 +11,4 @@ repository = "https://git.e3t.cc/~core/trifid"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
sea-orm = { version = "^0" }
|
||||
sea-orm = { version = "0.12" }
|
Loading…
Reference in New Issue