feat(admin): 完善代理节点与 OAuth 授权管理

This commit is contained in:
fawney19
2026-04-14 14:09:24 +08:00
parent 593640ac19
commit 861ae81ff0
44 changed files with 2757 additions and 365 deletions

View File

@@ -1,11 +1,12 @@
use super::{
AuthApiKeyLookupKey, CreateManagementTokenRecord, DataLayerError, GatewayAuthApiKeySnapshot,
GatewayDataState, ManagementTokenListQuery, ProxyNodeHeartbeatMutation,
ProxyNodeRegistrationMutation, ProxyNodeRemoteConfigMutation, ProxyNodeTunnelStatusMutation,
RegenerateManagementTokenSecret, StoredAuthApiKeyExportRecord, StoredAuthApiKeySnapshot,
StoredLdapModuleConfig, StoredManagementToken, StoredManagementTokenListPage,
StoredManagementTokenWithUser, StoredOAuthProviderConfig, StoredOAuthProviderModuleConfig,
StoredProxyNode, StoredProxyNodeEvent, StoredUserAuthRecord, StoredUserPreferenceRecord,
ProxyNodeManualCreateMutation, ProxyNodeManualUpdateMutation, ProxyNodeRegistrationMutation,
ProxyNodeRemoteConfigMutation, ProxyNodeTunnelStatusMutation, RegenerateManagementTokenSecret,
StoredAuthApiKeyExportRecord, StoredAuthApiKeySnapshot, StoredLdapModuleConfig,
StoredManagementToken, StoredManagementTokenListPage, StoredManagementTokenWithUser,
StoredOAuthProviderConfig, StoredOAuthProviderModuleConfig, StoredProxyNode,
StoredProxyNodeEvent, StoredUserAuthRecord, StoredUserPreferenceRecord,
StoredUserSessionRecord, StoredWalletSnapshot, UpdateManagementTokenRecord,
UpsertOAuthProviderConfigRecord,
};
@@ -2270,6 +2271,26 @@ impl GatewayDataState {
}
}
pub(crate) async fn create_manual_proxy_node(
&self,
mutation: &ProxyNodeManualCreateMutation,
) -> Result<Option<StoredProxyNode>, DataLayerError> {
match &self.proxy_node_writer {
Some(repository) => repository.create_manual_node(mutation).await.map(Some),
None => Ok(None),
}
}
pub(crate) async fn update_manual_proxy_node(
&self,
mutation: &ProxyNodeManualUpdateMutation,
) -> Result<Option<StoredProxyNode>, DataLayerError> {
match &self.proxy_node_writer {
Some(repository) => repository.update_manual_node(mutation).await,
None => Ok(None),
}
}
pub(crate) async fn reset_stale_proxy_node_tunnel_statuses(
&self,
) -> Result<usize, DataLayerError> {
@@ -2309,6 +2330,16 @@ impl GatewayDataState {
}
}
pub(crate) async fn delete_proxy_node(
&self,
node_id: &str,
) -> Result<Option<StoredProxyNode>, DataLayerError> {
match &self.proxy_node_writer {
Some(repository) => repository.delete_node(node_id).await,
None => Ok(None),
}
}
pub(crate) async fn update_proxy_node_remote_config(
&self,
mutation: &ProxyNodeRemoteConfigMutation,

View File

@@ -40,9 +40,9 @@ use aether_data::repository::oauth_providers::{
UpsertOAuthProviderConfigRecord,
};
use aether_data::repository::proxy_nodes::{
ProxyNodeHeartbeatMutation, ProxyNodeReadRepository, ProxyNodeRegistrationMutation,
ProxyNodeRemoteConfigMutation, ProxyNodeTunnelStatusMutation, ProxyNodeWriteRepository,
StoredProxyNode, StoredProxyNodeEvent,
ProxyNodeHeartbeatMutation, ProxyNodeManualCreateMutation, ProxyNodeManualUpdateMutation,
ProxyNodeReadRepository, ProxyNodeRegistrationMutation, ProxyNodeRemoteConfigMutation,
ProxyNodeTunnelStatusMutation, ProxyNodeWriteRepository, StoredProxyNode, StoredProxyNodeEvent,
};
pub(crate) use aether_data::repository::system::{AdminSystemStats, StoredSystemConfigEntry};
use aether_data::repository::users::{