Skip to content

Commit

Permalink
Fmt
Browse files Browse the repository at this point in the history
  • Loading branch information
augustuswm committed Mar 27, 2024
1 parent e6035cb commit d0afc32
Show file tree
Hide file tree
Showing 20 changed files with 141 additions and 145 deletions.
96 changes: 52 additions & 44 deletions v-api-permission-derive/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ use heck::ToSnakeCase;
use proc_macro::TokenStream;
use proc_macro2::Literal;
use quote::{format_ident, quote, quote_spanned};
use std::{collections::HashMap, hash::{Hash, Hasher}};
use std::{
collections::HashMap,
hash::{Hash, Hasher},
};
use syn::{
parse::{Parse, ParseStream},
parse_macro_input,
Expand Down Expand Up @@ -179,9 +182,10 @@ impl Parse for ExpandSettings {
.find(|s| s.name == "variant")
.expect("Expand must contain a \"variant\" setting")
.value,
value: settings.iter().find(|s| s.name == "value").map(|s| {
s.value.clone()
}),
value: settings
.iter()
.find(|s| s.name == "value")
.map(|s| s.value.clone()),
source: settings.iter().find(|s| s.name == "source").map(|s| {
match s.value.to_string().as_str() {
"actor" => ExternalSource::Actor,
Expand Down Expand Up @@ -223,7 +227,7 @@ pub fn v_api(attr: TokenStream, input: TokenStream) -> TokenStream {
let mut input = parse_macro_input!(input as DeriveInput);
input = match inject_system_permission_variants(input) {
Ok(input) => input,
Err(err) => return err.to_compile_error().into()
Err(err) => return err.to_compile_error().into(),
};
let input_span = input.span();

Expand All @@ -241,15 +245,12 @@ pub fn v_api(attr: TokenStream, input: TokenStream) -> TokenStream {
Ok(VariantSettings(settings)) => {
for setting in settings {
match setting {
VariantSetting::Contract(setting) => {
contract_settings.push((variant_clone.clone(), setting.clone()))
}
VariantSetting::Expand(setting) => {
expand_settings.push((variant_clone.clone(), setting.clone()))
}
VariantSetting::Scope(setting) => {
scope_settings.push((variant_clone.clone(), setting.clone()))
}
VariantSetting::Contract(setting) => contract_settings
.push((variant_clone.clone(), setting.clone())),
VariantSetting::Expand(setting) => expand_settings
.push((variant_clone.clone(), setting.clone())),
VariantSetting::Scope(setting) => scope_settings
.push((variant_clone.clone(), setting.clone())),
}
}
}
Expand All @@ -261,12 +262,14 @@ pub fn v_api(attr: TokenStream, input: TokenStream) -> TokenStream {
variant.attrs.retain(|attr| !attr.path.is_ident(MACRO_ID));
}
let as_scope_out = as_scope_trait_tokens(input.ident.clone(), scope_settings);
let permission_storage_out = permission_storage_trait_tokens(&input.ident, contract_settings, expand_settings);
let permission_storage_out =
permission_storage_trait_tokens(&input.ident, contract_settings, expand_settings);

quote! {
#as_scope_out
#permission_storage_out
}.into()
}
.into()
}
_ => quote_spanned! {
input_span => compile_error!("v_api may only be applied to enums");
Expand All @@ -285,7 +288,8 @@ pub fn v_api(attr: TokenStream, input: TokenStream) -> TokenStream {
#input
#from
#trait_impl_tokens
}.into()
}
.into()
}

struct LiteralKey {
Expand Down Expand Up @@ -316,7 +320,10 @@ impl Hash for LiteralKey {
}
}

fn from_system_permission_tokens(source: &Ident, permission_type: &Ident) -> proc_macro2::TokenStream {
fn from_system_permission_tokens(
source: &Ident,
permission_type: &Ident,
) -> proc_macro2::TokenStream {
if source != permission_type {
quote! {
impl From<#source> for #permission_type {
Expand Down Expand Up @@ -387,10 +394,8 @@ fn inject_system_permission_variants(mut input: DeriveInput) -> Result<DeriveInp
let tokens = system_permission_tokens();
let system_permissions: DeriveInput = syn::parse(tokens).unwrap();
let system_variants = match system_permissions.data {
Data::Enum(data_enum) => {
data_enum.variants
}
_ => unreachable!("System permissions are always an enum")
Data::Enum(data_enum) => data_enum.variants,
_ => unreachable!("System permissions are always an enum"),
};

match input.data {
Expand Down Expand Up @@ -609,30 +614,29 @@ fn system_permission_tokens() -> TokenStream {
#[serde(other)]
Removed,
}
}.into()
}
.into()
}

fn as_scope_trait_tokens(
permission_type: Ident,
scope_settings: Vec<(Variant, ScopeSettings)>,
) -> proc_macro2::TokenStream {
let as_scope_mapping = scope_settings.iter().filter_map(|(variant, settings)| {
settings
.to
.as_ref()
.map(|to| {
let fields = if variant.fields.len() > 0 {
let mut fields = quote! {};
variant.fields.iter().for_each(|_| {
fields = quote! { _, #fields }
});
quote! { (#fields) }
} else {
quote! { }
};
let variant_ident = variant.ident.clone();
quote! { #permission_type::#variant_ident #fields => Some(#to) }
})
settings.to.as_ref().map(|to| {
let fields = if variant.fields.len() > 0 {
let mut fields = quote! {};
variant
.fields
.iter()
.for_each(|_| fields = quote! { _, #fields });
quote! { (#fields) }
} else {
quote! {}
};
let variant_ident = variant.ident.clone();
quote! { #permission_type::#variant_ident #fields => Some(#to) }
})
});
let from_scope_mapping = scope_settings
.iter()
Expand Down Expand Up @@ -730,13 +734,17 @@ fn permission_storage_contract_tokens(

let fields = if variant.fields.len() > 0 {
let mut fields = quote! {};
variant.fields.iter().enumerate().for_each(|(index, field)| {
let field_ident = field.ident.as_ref().unwrap_or(&stock_field_names[index]);
fields = quote! { #field_ident, #fields }
});
variant
.fields
.iter()
.enumerate()
.for_each(|(index, field)| {
let field_ident = field.ident.as_ref().unwrap_or(&stock_field_names[index]);
fields = quote! { #field_ident, #fields }
});
fields
} else {
quote! { }
quote! {}
};

branches.push(match setting.kind {
Expand Down
16 changes: 14 additions & 2 deletions v-api-permission-derive/tests/derive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ use std::collections::BTreeSet;
use uuid::Uuid;
use v_api::permissions::VPermission;
use v_api_permission_derive::v_api;
use v_model::{permissions::{AsScope, PermissionStorage}, Permissions};
use v_model::{
permissions::{AsScope, PermissionStorage},
Permissions,
};

#[test]
fn test_derive() {
Expand All @@ -11,7 +14,16 @@ fn test_derive() {
// }
#[v_api(From(VPermission))]
#[derive(
Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, schemars::JsonSchema, PartialOrd, Ord,
Debug,
Clone,
PartialEq,
Eq,
Hash,
serde::Serialize,
serde::Deserialize,
schemars::JsonSchema,
PartialOrd,
Ord,
)]
enum AppPermissions {
#[v_api(contract(kind = append, variant = CreateItems))]
Expand Down
10 changes: 2 additions & 8 deletions v-api/src/authn/jwt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,9 @@ use rsa::traits::PublicKeyParts;
use serde::{Deserialize, Serialize};
use thiserror::Error;
use tracing::instrument;
use v_model::{
AccessTokenId, ApiUser, ApiUserProvider, UserId, UserProviderId,
};
use v_model::{AccessTokenId, ApiUser, ApiUserProvider, UserId, UserProviderId};

use crate::{
config::AsymmetricKey,
context::VContext,
permissions::VAppPermission,
};
use crate::{config::AsymmetricKey, context::VContext, permissions::VAppPermission};

use super::{Signer, SigningKeyError};

Expand Down
24 changes: 18 additions & 6 deletions v-api/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ use thiserror::Error;
use tracing::{info_span, instrument, Instrument};
use uuid::Uuid;
use v_model::{
permissions::{AsScopeInternal, Caller, Permission, PermissionError, PermissionStorageInternal, Permissions},
permissions::{
AsScopeInternal, Caller, Permission, PermissionError, PermissionStorageInternal,
Permissions,
},
schema_ext::LoginAttemptState,
storage::{
AccessGroupFilter, AccessGroupStore, AccessTokenStore, ApiKeyFilter, ApiKeyStore,
Expand Down Expand Up @@ -350,8 +353,11 @@ where
let combined_permissions = match &base_permissions {
BasePermissions::Full => user_permissions.clone(),
BasePermissions::Restricted(permissions) => {
let token_permissions =
<T as PermissionStorageInternal>::expand(permissions, &user.id, Some(&user_permissions));
let token_permissions = <T as PermissionStorageInternal>::expand(
permissions,
&user.id,
Some(&user_permissions),
);
token_permissions.intersect(&user_permissions)
}
};
Expand Down Expand Up @@ -810,7 +816,11 @@ where
.await
.map(|opt| {
opt.map(|mut user| {
user.permissions = <T as PermissionStorageInternal>::expand(&user.permissions, &user.id, None);
user.permissions = <T as PermissionStorageInternal>::expand(
&user.permissions,
&user.id,
None,
);
user
})
})
Expand Down Expand Up @@ -853,7 +863,8 @@ where
permissions: permissions,
groups: groups,
};
new_user.permissions = <T as PermissionStorageInternal>::contract(&new_user.permissions);
new_user.permissions =
<T as PermissionStorageInternal>::contract(&new_user.permissions);
ApiUserStore::upsert(&*self.storage, new_user)
.await
.to_resource_result()
Expand All @@ -872,7 +883,8 @@ where
&VPermission::ManageApiUser(api_user.id).into(),
&VPermission::ManageApiUsersAll.into(),
]) {
api_user.permissions = <T as PermissionStorageInternal>::contract(&api_user.permissions);
api_user.permissions =
<T as PermissionStorageInternal>::contract(&api_user.permissions);
ApiUserStore::upsert(&*self.storage, api_user)
.await
.to_resource_result()
Expand Down
2 changes: 1 addition & 1 deletion v-api/src/endpoints/api_user.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use tap::TapFallible;
use tracing::instrument;
use uuid::Uuid;
use v_model::{
permissions::{Caller, Permission, Permissions, PermissionStorage},
permissions::{Caller, Permission, PermissionStorage, Permissions},
storage::{ApiUserProviderFilter, ListPagination},
AccessGroupId, ApiKeyId, ApiUser, ApiUserProvider, NewApiKey, NewApiUser, UserId,
};
Expand Down
8 changes: 2 additions & 6 deletions v-api/src/endpoints/api_user_provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,9 @@ use newtype_uuid::TypedUuid;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use tracing::instrument;
use v_model::{UserId, UserProviderId, permissions::PermissionStorage};
use v_model::{permissions::PermissionStorage, UserId, UserProviderId};

use crate::{
context::ApiContext,
permissions::VAppPermission,
secrets::OpenApiSecretString,
};
use crate::{context::ApiContext, permissions::VAppPermission, secrets::OpenApiSecretString};

#[derive(Debug, Deserialize, JsonSchema)]
pub struct ApiUserProviderPath {
Expand Down
7 changes: 2 additions & 5 deletions v-api/src/endpoints/group.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,11 @@ use schemars::JsonSchema;
use serde::Deserialize;
use tracing::instrument;
use v_model::{
permissions::{Permission, Permissions, PermissionStorage},
permissions::{Permission, PermissionStorage, Permissions},
AccessGroup, AccessGroupId, NewAccessGroup,
};

use crate::{
context::ApiContext,
permissions::VAppPermission,
};
use crate::{context::ApiContext, permissions::VAppPermission};

fn into_group_response<T, U>(group: AccessGroup<T>) -> AccessGroup<U>
where
Expand Down
5 changes: 3 additions & 2 deletions v-api/src/endpoints/login/oauth/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use tracing::instrument;
use v_model::{
permissions::{Caller, PermissionStorage}, OAuthClient, OAuthClientId, OAuthClientRedirectUri, OAuthClientSecret,
OAuthRedirectUriId, OAuthSecretId,
permissions::{Caller, PermissionStorage},
OAuthClient, OAuthClientId, OAuthClientRedirectUri, OAuthClientSecret, OAuthRedirectUriId,
OAuthSecretId,
};

use crate::{
Expand Down
4 changes: 2 additions & 2 deletions v-api/src/endpoints/login/oauth/code.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ use std::{fmt::Debug, ops::Add};
use tap::TapFallible;
use tracing::instrument;
use v_model::{
schema_ext::LoginAttemptState, LoginAttempt, LoginAttemptId, NewLoginAttempt, OAuthClient,
OAuthClientId, permissions::PermissionStorage
permissions::PermissionStorage, schema_ext::LoginAttemptState, LoginAttempt, LoginAttemptId,
NewLoginAttempt, OAuthClient, OAuthClientId,
};

use super::{OAuthProvider, OAuthProviderNameParam, UserInfoProvider};
Expand Down
7 changes: 2 additions & 5 deletions v-api/src/endpoints/login/oauth/device_token.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,8 @@ use super::{
ClientType, OAuthProvider, OAuthProviderInfo, OAuthProviderNameParam, UserInfoProvider,
};
use crate::{
context::ApiContext,
endpoints::login::LoginError,
error::ApiError,
permissions::VAppPermission,
util::response::bad_request,
context::ApiContext, endpoints::login::LoginError, error::ApiError,
permissions::VAppPermission, util::response::bad_request,
};

#[instrument(skip(rqctx), err(Debug))]
Expand Down
5 changes: 4 additions & 1 deletion v-api/src/endpoints/mappers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ use newtype_uuid::TypedUuid;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use tracing::instrument;
use v_model::{permissions::{Permission, AsScope, PermissionStorage}, Mapper, MapperId, NewMapper};
use v_model::{
permissions::{AsScope, Permission, PermissionStorage},
Mapper, MapperId, NewMapper,
};

use crate::{
context::ApiContext,
Expand Down
5 changes: 1 addition & 4 deletions v-api/src/endpoints/well_known/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ use serde::{Deserialize, Serialize};
use tracing::instrument;
use v_model::permissions::PermissionStorage;

use crate::{
context::ApiContext,
permissions::VAppPermission,
};
use crate::{context::ApiContext, permissions::VAppPermission};

#[derive(Debug, Deserialize, Serialize, JsonSchema)]
pub struct OpenIdConfiguration {
Expand Down
Loading

0 comments on commit d0afc32

Please sign in to comment.