Skip to content
This repository was archived by the owner on Apr 5, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
Expand Down Expand Up @@ -97,6 +103,14 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/de/filefighter/rest/RestApplication.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package de.filefighter.rest;

import de.filefighter.rest.configuration.FileFighterProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableConfigurationProperties(FileFighterProperties.class)
public class RestApplication {
public static void main(String[] args) {
SpringApplication.run(RestApplication.class, args);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package de.filefighter.rest.configuration;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = "filefighter")
public class FileFighterProperties {

/**
* Version String.
*/
private String version = "undefined";
private String date = "undefined";

public String getVersion() {
return version;
}

public void setVersion(String version) {
this.version = version;
}

public String getDate() {
return date;
}

public void setDate(String date) {
this.date = date;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ public class PrepareDataBase {
@Value("${server.port}")
int serverPort;

@Value("${filefighter.version}")
String version;

@Value("${filefighter.date}")
String date;

private static final Logger LOG = LoggerFactory.getLogger(PrepareDataBase.class);

@Bean
Expand All @@ -39,7 +45,7 @@ CommandLineRunner veryImportantFileFighterStartScript() {
System.out.println(" | _| | | | | | __/ | _| | | | (_| | | | | | | |_ | __/ | | ");
System.out.println(" |_| |_| |_| \\___| |_| |_| \\__, | |_| |_| \\__| \\___| |_| ");
System.out.println(" |___/ ");
System.out.println(" Version 0.2 Last updated at 03.11.20 ");
System.out.println(" Version v"+version+" Last updated at "+date+" ");
System.out.println(" Developed by Gimleux, Valentin, Open-Schnick. ");
System.out.println(" Development Blog: https://filefighter.github.io ");
System.out.println(" The code can be found at: https://www.github.com/filefighter ");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.filefighter.rest.configuration;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.RequestHandlerSelectors;
Expand All @@ -15,6 +16,9 @@
@EnableSwagger2
public class SwaggerConfiguration {

@Value("${filefighter.version}")
String version;

@Bean
public Docket swaggerConfig() {
return new Docket(DocumentationType.SWAGGER_2)
Expand All @@ -28,7 +32,7 @@ private ApiInfo apiInfo() {
return new ApiInfo(
"FileFighter REST",
"REST-API of the FileFighter application.",
"0.2",
version,
null,
new Contact("FileFighter Dev-Team", "https://github.com/filefighter/", "filefighter@t-online.de"),
"MIT License",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package de.filefighter.rest.domain.health.business;

import de.filefighter.rest.domain.health.data.SystemHealth;
import de.filefighter.rest.domain.health.data.SystemHealth.DataIntegrity;
import de.filefighter.rest.domain.token.business.AccessTokenBusinessService;
import de.filefighter.rest.domain.user.business.UserBusinessService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.time.Instant;
Expand All @@ -10,10 +13,15 @@
public class SystemHealthBusinessService {

private final UserBusinessService userBusinessService;
private final AccessTokenBusinessService accessTokenBusinessService;
private final long serverStartedAt;

public SystemHealthBusinessService(UserBusinessService userBusinessService) {
@Value("${filefighter.version}")
String version;

public SystemHealthBusinessService(UserBusinessService userBusinessService, AccessTokenBusinessService accessTokenBusinessService) {
this.userBusinessService = userBusinessService;
this.accessTokenBusinessService = accessTokenBusinessService;
this.serverStartedAt = this.getCurrentEpochSeconds();
}

Expand All @@ -22,9 +30,23 @@ public SystemHealth getCurrentSystemHealthInfo(){
return SystemHealth.builder()
.uptimeInSeconds(currentEpoch - serverStartedAt)
.userCount(userBusinessService.getUserCount())
.dataIntegrity(calculateDataIntegrity())
.version("v"+this.version)
.build();
}

private DataIntegrity calculateDataIntegrity() {
long userCount = userBusinessService.getUserCount();
long accessTokenCount = accessTokenBusinessService.getAccessTokenCount();

// Risk / Unstable Cases.
if(userCount < accessTokenCount){
return DataIntegrity.POSSIBLE_RISK;
}

return DataIntegrity.STABLE;
}

public long getCurrentEpochSeconds(){
return Instant.now().getEpochSecond();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,10 @@
public class SystemHealth {
private final long uptimeInSeconds;
private final long userCount;
private final DataIntegrity dataIntegrity;
private final String version;

public enum DataIntegrity {
STABLE, POSSIBLE_RISK, UNSTABLE
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,18 @@ public AccessToken findAccessTokenByValue(String accessTokenValue) {
return accessTokenDtoService.createDto(accessTokenEntity);
}

public String generateRandomTokenValue() {
return UUID.randomUUID().toString();
}

public String checkBearerHeader(String accessTokenValue) {
if (!accessTokenValue.matches("^" + AUTHORIZATION_BEARER_PREFIX + "[^\\s](.*)$"))
throw new RequestDidntMeetFormalRequirementsException("Header does not contain '" + AUTHORIZATION_BEARER_PREFIX + "', or format is invalid.");
return accessTokenValue.split(AUTHORIZATION_BEARER_PREFIX)[1];
}

public String generateRandomTokenValue() {
return UUID.randomUUID().toString();
}

public long getAccessTokenCount() {
return accessTokenRepository.count();
}
}
6 changes: 4 additions & 2 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
server.servlet.context-path=/
server.port=8080
server.error.whitelabel.enabled=false

#-------------------MONGO---------------
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.database=filefighter
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.port=27017
#-------------------Custom------------------
filefighter.version=0.0.3
filefighter.date=11.11.2020
Binary file removed src/main/resources/filefighter.png
Binary file not shown.
Binary file removed src/main/resources/rest.png
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package de.filefighter.rest.domain.health.business;

import de.filefighter.rest.domain.health.data.SystemHealth;
import de.filefighter.rest.domain.health.data.SystemHealth.DataIntegrity;
import de.filefighter.rest.domain.token.business.AccessTokenBusinessService;
import de.filefighter.rest.domain.user.business.UserBusinessService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand All @@ -15,11 +17,12 @@
class SystemHealthBusinessServiceUnitTest {

private final UserBusinessService userBusinessServiceMock = mock(UserBusinessService.class);
private final AccessTokenBusinessService accessTokenBusinessServiceMock = mock(AccessTokenBusinessService.class);
private SystemHealthBusinessService systemHealthBusinessService;

@BeforeEach
void setUp() {
systemHealthBusinessService = new SystemHealthBusinessService(userBusinessServiceMock);
systemHealthBusinessService = new SystemHealthBusinessService(userBusinessServiceMock, accessTokenBusinessServiceMock);
}

@Test
Expand All @@ -40,4 +43,31 @@ void getCurrentEpochSecondsReturnsEpochSeconds() {
long epochSeconds = systemHealthBusinessService.getCurrentEpochSeconds();
assertEquals(expectedSeconds, epochSeconds);
}

@Test
void calculateDataIntegrityReturnsStable(){
when(userBusinessServiceMock.getUserCount()).thenReturn(2L);
when(accessTokenBusinessServiceMock.getAccessTokenCount()).thenReturn(2L);

DataIntegrity dataIntegrity = DataIntegrity.STABLE;
DataIntegrity actual = systemHealthBusinessService.getCurrentSystemHealthInfo().getDataIntegrity();
assertEquals(dataIntegrity, actual);

when(userBusinessServiceMock.getUserCount()).thenReturn(3L);
when(accessTokenBusinessServiceMock.getAccessTokenCount()).thenReturn(2L);

dataIntegrity = DataIntegrity.STABLE;
actual = systemHealthBusinessService.getCurrentSystemHealthInfo().getDataIntegrity();
assertEquals(dataIntegrity, actual);
}

@Test
void calculateDataIntegrityReturnsRisk(){
when(userBusinessServiceMock.getUserCount()).thenReturn(2L);
when(accessTokenBusinessServiceMock.getAccessTokenCount()).thenReturn(3L);

DataIntegrity dataIntegrity = DataIntegrity.POSSIBLE_RISK;
DataIntegrity actual = systemHealthBusinessService.getCurrentSystemHealthInfo().getDataIntegrity();
assertEquals(dataIntegrity, actual);
}
}