Skip to content

Commit e9b341d

Browse files
authored
feat: add get 3th kind cert by ak api (#731)
1 parent 8f30d93 commit e9b341d

File tree

12 files changed

+123
-24
lines changed

12 files changed

+123
-24
lines changed

backend/basic/src/rbum/dto/rbum_filer_dto.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ pub struct RbumCertFilterReq {
145145
///
146146
/// 凭证状态
147147
pub status: Option<RbumCertStatusKind>,
148+
/// Certificate extension information
149+
///
150+
/// 凭证扩展信息
151+
pub ext: Option<String>,
148152
/// Association type
149153
///
150154
/// 关联类型

backend/basic/src/rbum/serv/rbum_cert_serv.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,9 @@ impl RbumCrudOperation<rbum_cert::ActiveModel, RbumCertAddReq, RbumCertModifyReq
703703
if let Some(status) = &filter.status {
704704
query.and_where(Expr::col((rbum_cert::Entity, rbum_cert::Column::Status)).eq(status.to_int()));
705705
}
706+
if let Some(ext) = &filter.ext {
707+
query.and_where(Expr::col((rbum_cert::Entity, rbum_cert::Column::Ext)).eq(ext.to_string()));
708+
}
706709
if let Some(rel_rbum_cert_conf_ids) = &filter.rel_rbum_cert_conf_ids {
707710
query.and_where(Expr::col((rbum_cert::Entity, rbum_cert::Column::RelRbumCertConfId)).is_in(rel_rbum_cert_conf_ids.clone()));
708711
}

backend/gateways/spacegate-plugins/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![warn(clippy::unwrap_used)]
22

3-
use crate::plugin::{anti_replay, anti_xss, audit_log, auth, ip_time, rewrite_ns_b_ip};
3+
pub use crate::plugin::{anti_replay, anti_xss, audit_log, auth, ip_time, rewrite_ns_b_ip};
44

55
mod consts;
66
mod extension;

backend/gateways/spacegate-plugins/tests/export_schemas.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use spacegate_plugin::{plugins, Plugin, PluginSchemaExt};
1+
use spacegate_plugin::{Plugin, PluginSchemaExt};
2+
use spacegate_plugins::{anti_replay::AntiReplayPlugin, anti_xss::AntiXssPlugin, audit_log::AuditLogPlugin};
23
use tardis::serde_json;
34
fn export_plugin<P: PluginSchemaExt + Plugin>(dir: std::path::PathBuf) {
45
let schema = P::schema();
@@ -18,15 +19,12 @@ macro_rules! export_plugins {
1819

1920
#[test]
2021
fn export_schema() {
21-
use spacegate_lib::plugin::{
22-
anti_replay::AntiReplayPlugin, anti_xss::AntiXssPlugin, audit_log::AuditLogPlugin, auth::AuthPlugin, ip_time::IpTimePlugin, rewrite_ns_b_ip::RewriteNsPlugin,
23-
};
2422
export_plugins!("schema":
2523
AntiReplayPlugin
2624
AntiXssPlugin
2725
AuditLogPlugin
2826
// AuthPlugin
2927
// SgIpTimePlugin
30-
RewriteNsPlugin
28+
// RewriteNsPlugin
3129
);
3230
}

backend/supports/iam/src/basic/serv/iam_cert_serv.rs

Lines changed: 72 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -670,9 +670,11 @@ impl IamCertServ {
670670
}
671671
}
672672

673+
/// 通过关联rbum_item id 查询三方凭证
673674
pub async fn get_3th_kind_cert_by_rel_rbum_id(
674675
rel_rbum_id: &str,
675676
cert_supplier: Vec<String>,
677+
show_sk: bool,
676678
funs: &TardisFunsInst,
677679
ctx: &TardisContext,
678680
) -> TardisResult<RbumCertSummaryWithSkResp> {
@@ -688,8 +690,12 @@ impl IamCertServ {
688690
)
689691
.await?;
690692
if let Some(ext_cert) = ext_cert {
691-
let now_sk = RbumCertServ::show_sk(ext_cert.id.as_str(), &RbumCertFilterReq::default(), funs, ctx).await?;
692-
let encoded_sk = encode_cert(&ext_cert.id, now_sk, ext_cert.sk_invisible)?;
693+
let encoded_sk = if show_sk {
694+
let now_sk = RbumCertServ::show_sk(ext_cert.id.as_str(), &RbumCertFilterReq::default(), funs, ctx).await?;
695+
encode_cert(&ext_cert.id, now_sk, ext_cert.sk_invisible)?
696+
} else {
697+
"".to_string()
698+
};
693699
Ok(RbumCertSummaryWithSkResp {
694700
id: ext_cert.id,
695701
ak: ext_cert.ak,
@@ -721,7 +727,8 @@ impl IamCertServ {
721727
}
722728
}
723729

724-
pub async fn get_3th_kind_cert_by_id(id: &str, funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<RbumCertSummaryWithSkResp> {
730+
/// 通过cert id 查询三方凭证
731+
pub async fn get_3th_kind_cert_by_id(id: &str, show_sk: bool, funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<RbumCertSummaryWithSkResp> {
725732
// query rel ,get owner
726733
let rels = IamRelServ::find_rels(
727734
&RbumRelFilterReq {
@@ -760,9 +767,12 @@ impl IamCertServ {
760767
)
761768
.await?;
762769
if let Some(ext_cert) = ext_cert {
763-
let now_sk = RbumCertServ::show_sk(ext_cert.id.as_str(), &RbumCertFilterReq::default(), funs, &mock_ctx).await?;
764-
let encoded_sk = encode_cert(&ext_cert.id, now_sk, ext_cert.sk_invisible)?;
765-
// let encoded_sk = now_sk;
770+
let encoded_sk = if show_sk {
771+
let now_sk = RbumCertServ::show_sk(ext_cert.id.as_str(), &RbumCertFilterReq::default(), funs, ctx).await?;
772+
encode_cert(&ext_cert.id, now_sk, ext_cert.sk_invisible)?
773+
} else {
774+
"".to_string()
775+
};
766776
Ok(RbumCertSummaryWithSkResp {
767777
id: ext_cert.id,
768778
ak: ext_cert.ak,
@@ -794,6 +804,62 @@ impl IamCertServ {
794804
}
795805
}
796806

807+
/// 通过ak supplier 查询三方凭证
808+
pub async fn get_3th_kind_cert_by_ak(supplier: &str, ak: &str, show_sk: bool, funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<RbumCertSummaryWithSkResp> {
809+
let query_cert = RbumCertServ::find_one_detail_rbum(
810+
&RbumCertFilterReq {
811+
basic: RbumBasicFilterReq {
812+
own_paths: Some(ctx.own_paths.clone()),
813+
..Default::default()
814+
},
815+
ak: Some(ak.to_string()),
816+
status: Some(RbumCertStatusKind::Enabled),
817+
kind: Some(IamCertExtKind::ThirdParty.to_string()),
818+
suppliers: Some(vec![supplier.to_string()]),
819+
..Default::default()
820+
},
821+
funs,
822+
ctx,
823+
)
824+
.await?;
825+
if let Some(ext_cert) = query_cert {
826+
let encoded_sk = if show_sk {
827+
let now_sk = RbumCertServ::show_sk(ext_cert.id.as_str(), &RbumCertFilterReq::default(), funs, ctx).await?;
828+
encode_cert(&ext_cert.id, now_sk, ext_cert.sk_invisible)?
829+
} else {
830+
"".to_string()
831+
};
832+
Ok(RbumCertSummaryWithSkResp {
833+
id: ext_cert.id,
834+
ak: ext_cert.ak,
835+
sk: encoded_sk,
836+
sk_invisible: ext_cert.sk_invisible,
837+
ext: ext_cert.ext,
838+
conn_uri: ext_cert.conn_uri,
839+
start_time: ext_cert.start_time,
840+
end_time: ext_cert.end_time,
841+
status: ext_cert.status,
842+
kind: ext_cert.kind,
843+
supplier: ext_cert.supplier,
844+
rel_rbum_cert_conf_id: ext_cert.rel_rbum_cert_conf_id,
845+
rel_rbum_cert_conf_name: ext_cert.rel_rbum_cert_conf_name,
846+
rel_rbum_kind: ext_cert.rel_rbum_kind,
847+
rel_rbum_id: ext_cert.rel_rbum_id,
848+
own_paths: ext_cert.own_paths,
849+
owner: ext_cert.owner,
850+
create_time: ext_cert.create_time,
851+
update_time: ext_cert.update_time,
852+
})
853+
} else {
854+
Err(funs.err().not_found(
855+
"iam_cert",
856+
"get_3th_kind_cert_by_rel_rbum_id",
857+
&format!("not found credential of ak {ak}"),
858+
"404-iam-cert-kind-not-exist",
859+
))
860+
}
861+
}
862+
797863
pub async fn paginate_certs(
798864
filter: &RbumCertFilterReq,
799865
page_number: u32,

backend/supports/iam/src/console_app/api/iam_ca_cert_manage_api.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ impl IamCaCertManageApi {
2525
try_set_real_ip_from_req_to_ctx(request, &ctx.0).await?;
2626
let funs = iam_constants::get_tardis_inst();
2727
let ctx = IamCertServ::use_sys_or_tenant_ctx_unsafe(ctx.0)?;
28-
let cert = IamCertServ::get_3th_kind_cert_by_id(&id.0, &funs, &ctx).await?;
28+
let cert = IamCertServ::get_3th_kind_cert_by_id(&id.0, true, &funs, &ctx).await?;
2929
ctx.execute_task().await?;
3030
TardisResp::ok(cert)
3131
}

backend/supports/iam/src/console_interface/api/iam_ci_account_api.rs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,8 @@ impl IamCiAccountApi {
164164
TardisResp::ok(result)
165165
}
166166

167-
/// Find Account Id By Ak
168-
/// 通过Ak查找帐户Id
167+
/// Find Account By Ak
168+
/// 通过Ak查找帐户
169169
///
170170
/// if kind is none,query default kind(UserPwd)
171171
/// 如果kind为空,则查询默认kind(UserPwd)
@@ -230,6 +230,32 @@ impl IamCiAccountApi {
230230
TardisResp::ok(result)
231231
}
232232

233+
/// Find Account By ThirdParty Cert ak
234+
/// 通过三方凭证ak查找帐户
235+
///
236+
#[oai(path = "/:supplier/:ak/third-party", method = "get")]
237+
async fn find_by_third_party(&self, supplier: Path<String>, ak: Path<String>, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<IamAccountDetailResp> {
238+
let funs = iam_constants::get_tardis_inst();
239+
check_without_owner_and_unsafe_fill_ctx(request, &funs, &mut ctx.0)?;
240+
let cert = IamCertServ::get_3th_kind_cert_by_ak(&supplier.0, &ak.0, true, &funs, &ctx.0).await?;
241+
let result = IamAccountServ::get_item(
242+
&cert.rel_rbum_id,
243+
&IamAccountFilterReq {
244+
basic: RbumBasicFilterReq {
245+
own_paths: Some("".to_string()),
246+
with_sub_own_paths: true,
247+
..Default::default()
248+
},
249+
..Default::default()
250+
},
251+
&funs,
252+
&ctx.0,
253+
)
254+
.await?;
255+
256+
TardisResp::ok(result)
257+
}
258+
233259
/// Find App Set Items (Account) ctx
234260
/// 查找应用集合项(帐户)上下文
235261
#[oai(path = "/apps/item/ctx", method = "get")]

backend/supports/iam/src/console_interface/api/iam_ci_cert_api.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ impl IamCiCertApi {
162162
}
163163

164164
/// Add Third-kind Cert
165+
///
165166
/// 添加第三方证书
166167
#[oai(path = "/third-kind", method = "put")]
167168
async fn add_third_cert(
@@ -182,6 +183,7 @@ impl IamCiCertApi {
182183
}
183184

184185
/// Get Third-kind Certs By Account Id
186+
///
185187
/// 根据账号id获取第三方证书
186188
#[oai(path = "/third-kind", method = "get")]
187189
async fn get_third_cert(
@@ -194,7 +196,7 @@ impl IamCiCertApi {
194196
let funs = iam_constants::get_tardis_inst();
195197
check_without_owner_and_unsafe_fill_ctx(request, &funs, &mut ctx.0)?;
196198
try_set_real_ip_from_req_to_ctx(request, &ctx.0).await?;
197-
let rbum_cert = IamCertServ::get_3th_kind_cert_by_rel_rbum_id(&account_id.0, vec![supplier.0], &funs, &ctx.0).await?;
199+
let rbum_cert = IamCertServ::get_3th_kind_cert_by_rel_rbum_id(&account_id.0, vec![supplier.0], true, &funs, &ctx.0).await?;
198200
ctx.0.execute_task().await?;
199201
TardisResp::ok(rbum_cert)
200202
}
@@ -212,7 +214,8 @@ impl IamCiCertApi {
212214
TardisResp::ok(msg)
213215
}
214216

215-
/// decode cert
217+
/// Decode cert
218+
///
216219
/// 解码证书
217220
#[oai(path = "/decode", method = "post")]
218221
async fn decode_certs(&self, body: Json<IamCertDecodeRequest>, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<HashMap<String, String>> {

backend/supports/iam/src/console_passport/api/iam_cp_cert_api.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,7 @@ impl IamCpCertApi {
137137
async fn get_third_cert(&self, supplier: Query<String>, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<RbumCertSummaryWithSkResp> {
138138
try_set_real_ip_from_req_to_ctx(request, &ctx.0).await?;
139139
let funs = iam_constants::get_tardis_inst();
140-
// let ctx = IamCertServ::try_use_tenant_ctx(ctx.0, tenant_id.0)?;
141-
let rbum_cert = IamCertServ::get_3th_kind_cert_by_rel_rbum_id(&ctx.0.owner, vec![supplier.0], &funs, &ctx.0).await?;
140+
let rbum_cert = IamCertServ::get_3th_kind_cert_by_rel_rbum_id(&ctx.0.owner, vec![supplier.0], true, &funs, &ctx.0).await?;
142141
ctx.0.execute_task().await?;
143142
TardisResp::ok(rbum_cert)
144143
}

backend/supports/iam/src/console_tenant/api/iam_ct_cert_api.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ impl IamCtCertApi {
8585
let ctx = IamCertServ::try_use_tenant_ctx(ctx.0, tenant_id.0)?;
8686
try_set_real_ip_from_req_to_ctx(request, &ctx).await?;
8787
let funs = iam_constants::get_tardis_inst();
88-
let rbum_cert = IamCertServ::get_3th_kind_cert_by_rel_rbum_id(&account_id.0, vec![cert_supplier.0], &funs, &ctx).await?;
88+
let rbum_cert = IamCertServ::get_3th_kind_cert_by_rel_rbum_id(&account_id.0, vec![cert_supplier.0], true, &funs, &ctx).await?;
8989
ctx.execute_task().await?;
9090
TardisResp::ok(rbum_cert)
9191
}

backend/supports/iam/src/console_tenant/api/iam_ct_cert_manage_api.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ impl IamCtCertManageApi {
100100
let funs = iam_constants::get_tardis_inst();
101101
let ctx = IamCertServ::use_sys_or_tenant_ctx_unsafe(ctx.0)?;
102102
try_set_real_ip_from_req_to_ctx(request, &ctx).await?;
103-
let cert = IamCertServ::get_3th_kind_cert_by_id(&id.0, &funs, &ctx).await?;
103+
let cert = IamCertServ::get_3th_kind_cert_by_id(&id.0, true, &funs, &ctx).await?;
104104
ctx.execute_task().await?;
105105
TardisResp::ok(cert)
106106
}
@@ -112,7 +112,7 @@ impl IamCtCertManageApi {
112112
try_set_real_ip_from_req_to_ctx(request, &ctx.0).await?;
113113
let mut funs = iam_constants::get_tardis_inst();
114114
funs.begin().await?;
115-
let cert = IamCertServ::get_3th_kind_cert_by_id(&id.0, &funs, &ctx.0).await?;
115+
let cert = IamCertServ::get_3th_kind_cert_by_id(&id.0, false, &funs, &ctx.0).await?;
116116
IamCertServ::delete_manage_cert(&id.0, &funs, &ctx.0).await?;
117117
let _ = SpiLogClient::add_dynamic_log(
118118
&LogDynamicContentReq {

backend/supports/iam/tests/test_cc_cert.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ async fn test_single_level(context: &TardisContext, ak: &str, another_context: &
167167
.await?;
168168

169169
info!("【test_cc_cert】 : test_single_level : Add Ext Cert - Gitlab");
170-
assert!(IamCertServ::get_3th_kind_cert_by_rel_rbum_id(&account_info.account_id, vec!["gitlab".to_string()], &funs, context).await.is_err());
170+
assert!(IamCertServ::get_3th_kind_cert_by_rel_rbum_id(&account_info.account_id, vec!["gitlab".to_string()], false, &funs, context).await.is_err());
171171
IamCertServ::add_3th_kind_cert(
172172
&mut IamThirdPartyCertExtAddReq {
173173
ak: "GitlabUserId".to_string(),
@@ -181,7 +181,7 @@ async fn test_single_level(context: &TardisContext, ak: &str, another_context: &
181181
)
182182
.await?;
183183
assert_eq!(
184-
IamCertServ::get_3th_kind_cert_by_rel_rbum_id(&account_info.account_id, vec!["gitlab".to_string()], &funs, context).await?.ak,
184+
IamCertServ::get_3th_kind_cert_by_rel_rbum_id(&account_info.account_id, vec!["gitlab".to_string()], false, &funs, context).await?.ak,
185185
"GitlabUserId"
186186
);
187187

0 commit comments

Comments
 (0)