Monorepo for Tangled
Something went wrong. Try again.
2.6 kB · 90 lines
Rust
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091mod did_ext;mod diff;mod error;mod git_transport;mod merge;mod routes;
use std::{path::PathBuf, sync::Arc};
use axum::{ Router, routing::{get, post},};use bobbin_runtime::{Clock, ReqwestHttp};use gitmirror_git::layout::Layout;use jacquard_axum::service_auth::{self, ServiceAuthError};use jacquard_common::service_auth::ServiceAuthClaims;use jacquard_identity::JacquardResolver;use tangled_axum::atproto::{AtprotoService, ClaimsPolicy, Verified};
pub(crate) type Directory = JacquardResolver<ReqwestHttp>;
#[derive(Clone)]pub struct AppState { pub(crate) layout: Arc<Layout>, pub(crate) http: reqwest::Client, pub(crate) service_auth: service_auth::ServiceAuthConfig<Arc<Directory>>, pub(crate) knot_policy: KnotPolicy, pub(crate) clock: Arc<dyn Clock>, pub(crate) stats: Arc<diff::StatCache>,}
impl AppState { #[allow(clippy::too_many_arguments)] pub fn new( repo_base: Arc<PathBuf>, http: reqwest::Client, service_auth: service_auth::ServiceAuthConfig<Arc<Directory>>, knot_policy: KnotPolicy, clock: Arc<dyn Clock>, ) -> Self { let layout = Arc::new(Layout::new((*repo_base).clone())); Self { layout, http, service_auth, knot_policy, clock, stats: Arc::default(), } }}
impl AtprotoService for AppState { type Resolver = Directory;
fn resolver(&self) -> &Self::Resolver { self.service_auth.resolver() }
async fn verify_claims( &self, claims: &ServiceAuthClaims, ) -> Result<Verified, ServiceAuthError> { ClaimsPolicy::from(&self.service_auth) .skip_audience() .check(claims, self.clock.now_unix_micros()) .await }}
#[rustfmt::skip]pub fn router(state: AppState) -> Router { use routes::*; Router::new() .route("/xrpc/sh.tangled.git.temp2.getBlame", get(git::get_blame)) .route("/xrpc/sh.tangled.git.temp2.getDiff", get(git::get_diff)) .route("/xrpc/sh.tangled.git.temp2.getInterdiff", get(git::get_interdiff)) .route("/xrpc/sh.tangled.git.temp2.listCommits", get(git::list_commits)) .route("/xrpc/sh.tangled.git.temp2.mergeCheck", get(git::merge_check)) .route("/xrpc/sh.tangled.git.mergeCommit", post(git::merge_commit)) .route("/xrpc/org.tangled.temp.git.deleteBranch", post(git::delete_branch)) .with_state(state)}
#[derive(Debug, Clone, Copy)]pub struct KnotPolicy { pub allow_private: bool, pub require_https: bool,}