1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
#[macro_use] pub mod result; #[macro_use] extern crate lazy_static; mod api; mod registry_api; mod git; mod config; mod git_manager; use actix_web::{web, App, HttpServer, middleware::Logger}; use std::thread; use std::sync::Arc; pub use config::*; pub use result::*; pub use async_trait::async_trait; pub use semver::{ Version, VersionReq }; async fn index() -> String { format!("registry_api crate") } async fn me() -> String { format!("registry_api crate me") } pub async fn spawn_within_actix(config: Config) { let config = Arc::new(config.clone()); let bind_addr = config.bind_addr.clone(); tokio::spawn(config.git_manager.clone().reset_git_worker(config.clone())); HttpServer::new(move || { App::new() .wrap(Logger::new(r#"%a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T"#)) .app_data(config.clone()) .route("/", web::get().to(index)) .route("/registry/me", web::get().to(me)) .service( web::scope("/api") ) .service( web::scope("/registry/api/v1/crates") .route("/new", web::put().to(registry_api::new)) .route("/{crate_name}/{version}/yank", web::delete().to(registry_api::yank)) .route("/{crate_name}/{version}/unyank", web::put().to(registry_api::unyank)) .route("/{crate_name}/{version}/download", web::get().to(registry_api::download)) .route("/{crate_name}/owners", web::get().to(registry_api::get_owners)) .route("/{crate_name}/owners", web::put().to(registry_api::add_owners)) .route("/{crate_name}/owners", web::delete().to(registry_api::remove_owners)) .route("", web::get().to(registry_api::search)) ) .service( web::scope("/registry/index.git") .route("/", web::get().to(git::info)) .route("/info/refs", web::get().to(git::refs)) .route("/git-upload-pack", web::post().to(git::upload_pack)) .route("/git-receive-pack", web::post().to(git::receive_pack)) ) }) .bind(&bind_addr) .unwrap() .run() .await .unwrap(); } #[actix_rt::main] pub async fn spawn_actix(config: Config) { spawn_within_actix(config).await; } pub fn spawn_thread(config: Config) { thread::spawn(move || { spawn_actix(config); }); }