diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/beacon/BeaconDetail.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/beacon/BeaconDetail.java index 24c9ccbc4..ac690b1cb 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/beacon/BeaconDetail.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/beacon/BeaconDetail.java @@ -1,8 +1,10 @@ package edu.internet2.tier.shibboleth.admin.ui.beacon; import lombok.Data; +import lombok.experimental.Accessors; @Data +@Accessors(chain = true) public class BeaconDetail { private String msgType = "TIERBEACON"; private String msgName = "TIER"; @@ -14,8 +16,4 @@ public class BeaconDetail { private String tbMaintainer = "Unicon"; private ShibuiDetail shibui; -} - -// "tbProduct": "ShibUI (shibui.beacon.productName)", -// "tbProductVersion": "1.17.4 (can we get this from the app?)", -// "tbTIERRelease": "(if the TAP container: 1.17.4; if the Unicon package, INTERNAL_1.17.4)", \ No newline at end of file +} \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/beacon/ShibuiDetail.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/beacon/ShibuiDetail.java index fdf0abf6b..ec89e5f00 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/beacon/ShibuiDetail.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/beacon/ShibuiDetail.java @@ -1,21 +1,19 @@ package edu.internet2.tier.shibboleth.admin.ui.beacon; +import lombok.Builder; import lombok.Data; +import java.util.List; + @Data +@Builder public class ShibuiDetail { - - - // "shibui": { - // "authMechanisms": [ - // "pac4j-saml" - // ], - // "numberOfMetadataSources": 25, - // "numberOfMetadataProviders": 3, - // "numberOfFilters": 0, - // "dailyLogins": 12, - // "numberOfGroups": 15, - // "numberOfRoles": 5, - // "installationID": "4813c762-4a90-40a2-9c01-81bf67647da4" - // } + private List authMechanisms; + private int numberOfMetadataSources; + private int numberOfMetadataProviders; + private int numberOfFilters; + private int dailyLogins; + private int numberOfGroups; + private int numberOfRoles; + private String installationID; } \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/CoreShibUiConfiguration.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/CoreShibUiConfiguration.java index f059b5fc6..d6d137e50 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/CoreShibUiConfiguration.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/CoreShibUiConfiguration.java @@ -5,6 +5,7 @@ import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects; import edu.internet2.tier.shibboleth.admin.ui.repository.BeaconConfigurationRepository; import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorRepository; +import edu.internet2.tier.shibboleth.admin.ui.repository.FilterRepository; import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository; import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolversPositionOrderContainerRepository; import edu.internet2.tier.shibboleth.admin.ui.scheduled.EntityDescriptorFilesScheduledTasks; @@ -270,8 +271,10 @@ public String getBeaconCronValue(BeaconConfigurationRepository repo) } @Bean - public IBeaconDataService getBeaconDataService(@Value("${shibui.beacon.productName:ShibUi}") String productName, InfoEndpoint info, @Value("#{environment.TIERVERSION}") String tierVersion) { - BeaconDataServiceImpl result = new BeaconDataServiceImpl(productName, info); + public IBeaconDataService getBeaconDataService(@Value("${shibui.beacon.productName:ShibUi}") String productName, InfoEndpoint info, @Value("#{environment.TIERVERSION}") String tierVersion, + EntityDescriptorRepository entityDescriptorRepository, MetadataResolverRepository metadataResolverRepository, FilterRepository filterRepository, + GroupsRepository groupsRepository, RoleRepository roleRepository, BeaconConfigurationRepository beaconConfigurationRepository, UserService userService) { + BeaconDataServiceImpl result = new BeaconDataServiceImpl(productName, info, tierVersion, entityDescriptorRepository, metadataResolverRepository, filterRepository, groupsRepository, roleRepository, beaconConfigurationRepository, userService); return result; } } \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/BeaconController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/BeaconController.java new file mode 100644 index 000000000..f5ece2032 --- /dev/null +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/BeaconController.java @@ -0,0 +1,25 @@ +package edu.internet2.tier.shibboleth.admin.ui.controller; + +import com.fasterxml.jackson.core.JsonProcessingException; +import edu.internet2.tier.shibboleth.admin.ui.service.IBeaconDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Profile({"dev", "very-dangerous"}) +@RestController +@RequestMapping(value = "/api/beacon") +public class BeaconController { + + @Autowired + private IBeaconDataService service; + + + @GetMapping(value = "/detail") + public ResponseEntity getDetail() throws JsonProcessingException { + return ResponseEntity.ok(service.getBeaconData()); + } +} \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/BeaconConfiguration.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/BeaconConfiguration.java index 93d76fdc3..c3b263c77 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/BeaconConfiguration.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/BeaconConfiguration.java @@ -1,9 +1,11 @@ package edu.internet2.tier.shibboleth.admin.ui.domain; import lombok.Data; +import lombok.Setter; import javax.persistence.Entity; import javax.persistence.Id; +import javax.persistence.Transient; @Data @Entity @@ -15,6 +17,15 @@ public class BeaconConfiguration { private String sendCron; + // Comma separated list of the auth mechanisms used. + @Setter + @Transient + private static String authMechanisms = "unset"; + + public static String getAuthMechanisms() { + return authMechanisms; + } + /** * enforce that id will only ever be 1 */ diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/EntityDescriptorRepository.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/EntityDescriptorRepository.java index 7fb999568..44ca96afe 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/EntityDescriptorRepository.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/EntityDescriptorRepository.java @@ -60,4 +60,6 @@ public interface EntityDescriptorRepository extends JpaRepository getEntityDescriptorsNeedingApproval(@Param("groupIds") List groupIds); + @Query("SELECT COUNT(ed) FROM EntityDescriptor ed WHERE ed.serviceEnabled = true") + int getActiveEntityCount(); } \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/FilterRepository.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/FilterRepository.java index 8c2273d77..e36d55d3c 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/FilterRepository.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/FilterRepository.java @@ -1,8 +1,12 @@ package edu.internet2.tier.shibboleth.admin.ui.repository; import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; public interface FilterRepository extends CrudRepository { MetadataFilter findByResourceId(String resourceId); -} + + @Query("SELECT COUNT(f) FROM MetadataFilter f WHERE f.filterEnabled = true") + int getActiveFilterCount(); +} \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/MetadataResolverRepository.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/MetadataResolverRepository.java index 07835ea9a..333fb2c11 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/MetadataResolverRepository.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/MetadataResolverRepository.java @@ -1,6 +1,7 @@ package edu.internet2.tier.shibboleth.admin.ui.repository; import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; /** @@ -11,4 +12,7 @@ public interface MetadataResolverRepository extends CrudRepository