Rust implementation of OCI Distribution Spec with granular access control
at main 61 lines 1.6 kB view raw
1use utoipa::OpenApi; 2 3use crate::{admin, state}; 4 5#[derive(OpenApi)] 6#[openapi( 7 paths( 8 admin::list_users, 9 admin::create_user, 10 admin::delete_user, 11 admin::add_permission 12 ), 13 components( 14 schemas( 15 admin::CreateUserRequest, 16 admin::AddPermissionRequest, 17 state::User, 18 state::Permission 19 ) 20 ), 21 tags( 22 (name = "admin", description = "User and permission management endpoints") 23 ), 24 info( 25 title = "Grain Registry - Admin API", 26 version = "0.1.0", 27 description = "Administration API for the Grain registry. Provides endpoints for managing users and their granular tag-level permissions.", 28 contact( 29 name = "Grain Registry", 30 url = "https://github.com/pierrelefevre/grain" 31 ), 32 license( 33 name = "MIT" 34 ) 35 ), 36 servers( 37 (url = "/", description = "Local server") 38 ), 39 security( 40 ("basic_auth" = []) 41 ), 42 modifiers(&SecurityAddon) 43)] 44pub struct AdminApiDoc; 45 46struct SecurityAddon; 47 48impl utoipa::Modify for SecurityAddon { 49 fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) { 50 if let Some(components) = openapi.components.as_mut() { 51 components.add_security_scheme( 52 "basic_auth", 53 utoipa::openapi::security::SecurityScheme::Http( 54 utoipa::openapi::security::Http::new( 55 utoipa::openapi::security::HttpAuthScheme::Basic, 56 ), 57 ), 58 ); 59 } 60 } 61}