haste_server/auth_n/oidc/hardcoded_clients/
admin_app.rs1use crate::config::ServerConfig;
2use haste_fhir_model::r4::generated::{
3 resources::ClientApplication,
4 terminology::{ClientapplicationGrantType, ClientapplicationResponseTypes},
5 types::FHIRString,
6};
7use haste_jwt::{ProjectId, TenantId};
8
9pub fn get_admin_app(config: &ServerConfig) -> Option<ClientApplication> {
10 let redirect_uri = &config.admin_app_redirect_uri;
11
12 Some(ClientApplication {
13 id: Some("admin-app".to_string()),
14 name: Box::new(FHIRString {
15 value: Some("Admin Application".to_string()),
16 ..Default::default()
17 }),
18 responseTypes: ClientapplicationResponseTypes::code(),
19 scope: Some(Box::new(FHIRString {
20 value: Some("offline_access openid email profile fhirUser system/*.*".to_string()),
21 ..Default::default()
22 })),
23 grantType: vec![
24 ClientapplicationGrantType::authorization_code(),
25 ClientapplicationGrantType::refresh_token(),
26 ],
27 redirectUri: Some(vec![FHIRString {
28 value: Some(redirect_uri.clone()),
29 ..Default::default()
30 }]),
31 ..Default::default()
32 })
33}
34
35pub fn redirect_url(
37 config: &ServerConfig,
38 tenant_id: &TenantId,
39 project_id: &ProjectId,
40) -> Option<String> {
41 let admin_app = get_admin_app(config);
42
43 if let Some(app) = admin_app {
44 app.redirectUri
45 .as_ref()
46 .and_then(|uris| uris.first())
47 .and_then(|uri| uri.value.as_ref())
48 .map(|uri| {
49 uri.replace(
50 "*",
51 &(tenant_id.as_ref().to_string() + "_" + project_id.as_ref()),
52 )
53 })
54 } else {
55 None
56 }
57}