2026-03-24 22:40:08 -04:00
|
|
|
pub mod database;
|
2026-03-25 22:41:07 -04:00
|
|
|
pub mod httapi;
|
2026-03-24 22:40:08 -04:00
|
|
|
pub mod schema;
|
2026-03-21 22:03:03 -04:00
|
|
|
|
2026-03-25 20:58:53 -04:00
|
|
|
use std::ops::Deref;
|
|
|
|
|
use std::str::FromStr;
|
|
|
|
|
use actix_web::{web, App,
|
2026-03-24 22:40:08 -04:00
|
|
|
HttpResponse,
|
|
|
|
|
HttpServer,
|
|
|
|
|
http::header::ContentType,
|
|
|
|
|
Responder,
|
|
|
|
|
};
|
2026-03-25 20:58:53 -04:00
|
|
|
use serde::Deserialize;
|
|
|
|
|
use database as db;
|
|
|
|
|
use database::DidTargetType;
|
2026-03-24 22:40:08 -04:00
|
|
|
|
2026-03-25 20:58:53 -04:00
|
|
|
#[derive(Debug, Deserialize)]
|
|
|
|
|
struct RouteData {
|
|
|
|
|
#[serde(rename = "Caller-Destination-Number")]
|
|
|
|
|
dest_did: String
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Deserialize)]
|
|
|
|
|
struct JsonDid {
|
|
|
|
|
did_number: String,
|
|
|
|
|
target_type: String,
|
|
|
|
|
target: String,
|
|
|
|
|
active: bool
|
|
|
|
|
}
|
2026-03-24 22:40:08 -04:00
|
|
|
|
2026-03-25 20:58:53 -04:00
|
|
|
async fn route_did(data: web::Form<RouteData>) -> impl Responder {
|
2026-03-25 22:41:07 -04:00
|
|
|
let did = data.dest_did.clone();
|
|
|
|
|
let xml = httapi::route_call(did);
|
2026-03-24 22:40:08 -04:00
|
|
|
HttpResponse::Ok()
|
|
|
|
|
.content_type(ContentType::xml())
|
2026-03-25 22:41:07 -04:00
|
|
|
.body(xml)
|
2026-03-24 22:40:08 -04:00
|
|
|
}
|
|
|
|
|
|
2026-03-25 20:58:53 -04:00
|
|
|
async fn did_post(d: web::Json<JsonDid>) -> impl Responder {
|
|
|
|
|
let did = d.deref();
|
|
|
|
|
|
|
|
|
|
db::add_did(&did.did_number, &did.target_type, &did.target, did.active).unwrap();
|
2026-03-24 22:40:08 -04:00
|
|
|
HttpResponse::Ok().body("DID added.")
|
2026-03-21 22:03:03 -04:00
|
|
|
}
|
|
|
|
|
|
2026-03-24 22:40:08 -04:00
|
|
|
async fn did_index() -> impl Responder {
|
2026-03-25 20:58:53 -04:00
|
|
|
let dids = db::list_did().unwrap();
|
2026-03-24 22:40:08 -04:00
|
|
|
HttpResponse::Ok().json(dids)
|
2026-03-21 22:03:03 -04:00
|
|
|
}
|
|
|
|
|
|
2026-03-25 20:58:53 -04:00
|
|
|
async fn did_get(path: web::Path<i32>) -> impl Responder {
|
|
|
|
|
let id = path.into_inner();
|
|
|
|
|
let did = db::get_did(id).unwrap();
|
|
|
|
|
|
|
|
|
|
HttpResponse::Ok().json(did)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async fn did_patch(d: web::Json<JsonDid>, path: web::Path<i32>) -> impl Responder {
|
|
|
|
|
let id = path.into_inner();
|
|
|
|
|
let d = d.deref();
|
|
|
|
|
let did = db::Did {
|
|
|
|
|
id: id,
|
|
|
|
|
did_number: d.did_number.clone(),
|
|
|
|
|
target_type: DidTargetType::from_str(&d.target_type).unwrap(),
|
|
|
|
|
target: Some(d.target.clone()),
|
|
|
|
|
active: d.active
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
db::update_did(did).unwrap();
|
|
|
|
|
|
|
|
|
|
HttpResponse::Ok().body("DID updated")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async fn did_delete(path: web::Path<i32>) -> impl Responder {
|
|
|
|
|
let id = path.into_inner();
|
|
|
|
|
|
|
|
|
|
db::delete_did(id).unwrap();
|
|
|
|
|
|
|
|
|
|
HttpResponse::Ok().body("DID deleted.")
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-24 22:40:08 -04:00
|
|
|
fn api_config(cfg: &mut web::ServiceConfig) {
|
|
|
|
|
cfg.service(
|
|
|
|
|
web::resource("/fs")
|
|
|
|
|
.route(web::get().to(did_index))
|
|
|
|
|
.route(web::post().to(did_post))
|
|
|
|
|
);
|
|
|
|
|
cfg.service(
|
|
|
|
|
web::resource("/fs/{id}")
|
2026-03-25 20:58:53 -04:00
|
|
|
.route(web::get().to(did_get))
|
|
|
|
|
.route(web::patch().to(did_patch))
|
|
|
|
|
.route(web::delete().to(did_delete))
|
2026-03-24 22:40:08 -04:00
|
|
|
);
|
|
|
|
|
cfg.service(
|
|
|
|
|
web::resource("/route_did")
|
|
|
|
|
.route(web::post().to(route_did))
|
|
|
|
|
);
|
2026-03-21 22:03:03 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[actix_web::main]
|
|
|
|
|
async fn main() -> std::io::Result<()> {
|
|
|
|
|
HttpServer::new(|| {
|
|
|
|
|
App::new()
|
2026-03-24 22:40:08 -04:00
|
|
|
.service(
|
|
|
|
|
web::scope("/api").configure(api_config))
|
2026-03-21 22:03:03 -04:00
|
|
|
})
|
2026-03-24 22:40:08 -04:00
|
|
|
.bind(("0.0.0.0", 3000))?
|
2026-03-21 22:03:03 -04:00
|
|
|
.run()
|
|
|
|
|
.await
|
|
|
|
|
}
|