use actix_web::{get, web, HttpResponse, Scope}; use actix_web_httpauth::extractors::bearer::BearerAuth; use crate::config::Config; use crate::database::{Pool, get_database_client}; use crate::errors::HttpError; use crate::mastodon_api::oauth::auth::get_current_user; use super::helpers::{export_followers, export_follows}; #[get("/export_followers")] async fn export_followers_view( auth: BearerAuth, config: web::Data, db_pool: web::Data, ) -> Result { let db_client = &**get_database_client(&db_pool).await?; let current_user = get_current_user(db_client, auth.token()).await?; let csv = export_followers( db_client, &config.instance().hostname(), ¤t_user.id, ).await?; let response = HttpResponse::Ok() .content_type("text/csv") .body(csv); Ok(response) } #[get("/export_follows")] async fn export_follows_view( auth: BearerAuth, config: web::Data, db_pool: web::Data, ) -> Result { let db_client = &**get_database_client(&db_pool).await?; let current_user = get_current_user(db_client, auth.token()).await?; let csv = export_follows( db_client, &config.instance().hostname(), ¤t_user.id, ).await?; let response = HttpResponse::Ok() .content_type("text/csv") .body(csv); Ok(response) } pub fn settings_api_scope() -> Scope { web::scope("/api/v1/settings") .service(export_followers_view) .service(export_follows_view) }