Can rename disk image files
This commit is contained in:
@ -189,6 +189,46 @@ pub async fn handle_convert_request(
|
||||
Ok(HttpResponse::Accepted().json("Successfully converted disk file"))
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize)]
|
||||
pub struct RenameDiskImageRequest {
|
||||
name: String,
|
||||
}
|
||||
|
||||
/// Rename disk image
|
||||
pub async fn rename(
|
||||
p: web::Path<DiskFilePath>,
|
||||
req: web::Json<RenameDiskImageRequest>,
|
||||
) -> HttpResult {
|
||||
// Check source
|
||||
if !files_utils::check_file_name(&p.filename) {
|
||||
return Ok(HttpResponse::BadRequest().json("Invalid src file name!"));
|
||||
}
|
||||
let src_path = AppConfig::get().disk_images_file_path(&p.filename);
|
||||
if !src_path.exists() {
|
||||
return Ok(HttpResponse::NotFound().json("Disk image does not exists!"));
|
||||
}
|
||||
|
||||
// Check destination
|
||||
if !files_utils::check_file_name(&req.name) {
|
||||
return Ok(HttpResponse::BadRequest().json("Invalid dst file name!"));
|
||||
}
|
||||
let dst_path = AppConfig::get().disk_images_file_path(&req.name);
|
||||
if dst_path.exists() {
|
||||
return Ok(HttpResponse::Conflict().json("Destination name already exists!"));
|
||||
}
|
||||
|
||||
// Check extension
|
||||
let disk = DiskFileInfo::load_file(&src_path)?;
|
||||
if !disk.format.ext().iter().any(|e| req.name.ends_with(e)) {
|
||||
return Ok(HttpResponse::BadRequest().json("Invalid destination file extension!"));
|
||||
}
|
||||
|
||||
// Perform rename
|
||||
std::fs::rename(&src_path, &dst_path)?;
|
||||
|
||||
Ok(HttpResponse::Accepted().finish())
|
||||
}
|
||||
|
||||
/// Delete a disk image
|
||||
pub async fn delete(p: web::Path<DiskFilePath>) -> HttpResult {
|
||||
if !files_utils::check_file_name(&p.filename) {
|
||||
|
@ -352,6 +352,10 @@ async fn main() -> std::io::Result<()> {
|
||||
"/api/disk_images/{filename}/convert",
|
||||
web::post().to(disk_images_controller::convert),
|
||||
)
|
||||
.route(
|
||||
"/api/disk_images/{filename}/rename",
|
||||
web::post().to(disk_images_controller::rename),
|
||||
)
|
||||
.route(
|
||||
"/api/disk_images/{filename}",
|
||||
web::delete().to(disk_images_controller::delete),
|
||||
|
Reference in New Issue
Block a user