Skip to content
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.objectcomputing.checkins.configuration;

import io.micronaut.context.annotation.ConfigurationProperties;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@ConfigurationProperties("check-ins")
public class CheckInsConfiguration {

@NotBlank
private String webAddress;

@NotNull
private ApplicationConfig application;

@Getter
@Setter
@ConfigurationProperties("application")
public static class ApplicationConfig {

@NotBlank
private String name;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.objectcomputing.checkins.services.feedback_request;

import com.objectcomputing.checkins.configuration.CheckInsConfiguration;
import com.objectcomputing.checkins.exceptions.BadArgException;
import com.objectcomputing.checkins.exceptions.NotFoundException;
import com.objectcomputing.checkins.exceptions.PermissionException;
Expand Down Expand Up @@ -36,7 +37,6 @@ public class FeedbackRequestServicesImpl implements FeedbackRequestServices {

public static final String FEEDBACK_REQUEST_NOTIFICATION_SUBJECT = "check-ins.application.feedback.notifications.subject";
public static final String FEEDBACK_REQUEST_NOTIFICATION_CONTENT = "check-ins.application.feedback.notifications.content";
public static final String WEB_UI_URL = "check-ins.web-address";
private final FeedbackRequestRepository feedbackReqRepository;
private final CurrentUserServices currentUserServices;
private final MemberProfileServices memberProfileServices;
Expand All @@ -51,15 +51,15 @@ public FeedbackRequestServicesImpl(FeedbackRequestRepository feedbackReqReposito
ReviewPeriodRepository reviewPeriodRepository,
@Named(MailJetFactory.HTML_FORMAT) EmailSender emailSender,
@Property(name = FEEDBACK_REQUEST_NOTIFICATION_SUBJECT) String notificationSubject,
@Property(name = WEB_UI_URL) String webURL
CheckInsConfiguration checkInsConfiguration
) {
this.feedbackReqRepository = feedbackReqRepository;
this.currentUserServices = currentUserServices;
this.memberProfileServices = memberProfileServices;
this.reviewPeriodRepository = reviewPeriodRepository;
this.emailSender = emailSender;
this.notificationSubject = notificationSubject;
this.webURL = webURL;
this.webURL = checkInsConfiguration.getWebAddress();
}

public void setEmailSender(EmailSender emailSender) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.auth.http.HttpCredentialsAdapter;
import io.micronaut.context.annotation.Property;
import com.objectcomputing.checkins.configuration.CheckInsConfiguration;

import jakarta.inject.Singleton;
import java.io.IOException;
Expand All @@ -21,10 +21,12 @@ public class GoogleDriveAccessor {
private final String applicationName;
private final GoogleAuthenticator authenticator;

public GoogleDriveAccessor(@Property(name = "check-ins.application.name") String applicationName,
GoogleAuthenticator authenticator) throws GeneralSecurityException, IOException {
public GoogleDriveAccessor(
GoogleAuthenticator authenticator,
CheckInsConfiguration checkInsConfiguration
) throws GeneralSecurityException, IOException {
this.httpTransport = GoogleNetHttpTransport.newTrustedTransport();
this.applicationName = applicationName;
this.applicationName = checkInsConfiguration.getApplication().getName();
this.authenticator = authenticator;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.objectcomputing.checkins.services.guild;

import com.objectcomputing.checkins.Environments;
import com.objectcomputing.checkins.configuration.CheckInsConfiguration;
import com.objectcomputing.checkins.exceptions.BadArgException;
import com.objectcomputing.checkins.exceptions.NotFoundException;
import com.objectcomputing.checkins.exceptions.PermissionException;
Expand All @@ -14,7 +15,6 @@
import com.objectcomputing.checkins.services.memberprofile.MemberProfile;
import com.objectcomputing.checkins.services.memberprofile.MemberProfileServices;
import com.objectcomputing.checkins.services.memberprofile.currentuser.CurrentUserServices;
import io.micronaut.context.annotation.Property;
import io.micronaut.context.env.Environment;
import jakarta.inject.Named;
import jakarta.inject.Singleton;
Expand All @@ -38,8 +38,6 @@
@Singleton
public class GuildServicesImpl implements GuildServices {

public static final String WEB_ADDRESS = "check-ins.web-address";

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

private final GuildRepository guildsRepo;
Expand All @@ -59,7 +57,7 @@ public GuildServicesImpl(GuildRepository guildsRepo,
GuildMemberServices guildMemberServices,
@Named(MailJetFactory.HTML_FORMAT) EmailSender emailSender,
Environment environment,
@Property(name = WEB_ADDRESS) String webAddress
CheckInsConfiguration checkInsConfiguration
) {
this.guildsRepo = guildsRepo;
this.guildMemberRepo = guildMemberRepo;
Expand All @@ -68,7 +66,7 @@ public GuildServicesImpl(GuildRepository guildsRepo,
this.memberProfileServices = memberProfileServices;
this.guildMemberServices = guildMemberServices;
this.emailSender = emailSender;
this.webAddress = webAddress;
this.webAddress = checkInsConfiguration.getWebAddress();
this.environment = environment;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.objectcomputing.checkins.services.guild.member;

import com.objectcomputing.checkins.configuration.CheckInsConfiguration;
import com.objectcomputing.checkins.exceptions.BadArgException;
import com.objectcomputing.checkins.exceptions.NotFoundException;
import com.objectcomputing.checkins.exceptions.PermissionException;
Expand All @@ -10,7 +11,6 @@
import com.objectcomputing.checkins.services.memberprofile.MemberProfile;
import com.objectcomputing.checkins.services.memberprofile.MemberProfileRepository;
import com.objectcomputing.checkins.services.memberprofile.currentuser.CurrentUserServices;
import io.micronaut.context.annotation.Property;
import io.micronaut.core.annotation.Nullable;
import jakarta.inject.Named;
import jakarta.inject.Singleton;
Expand All @@ -28,8 +28,6 @@
@Singleton
public class GuildMemberServicesImpl implements GuildMemberServices {

public static final String WEB_ADDRESS = "check-ins.web-address";

private final GuildRepository guildRepo;
private final GuildMemberRepository guildMemberRepo;
private final MemberProfileRepository memberRepo;
Expand All @@ -44,15 +42,15 @@ public GuildMemberServicesImpl(GuildRepository guildRepo,
CurrentUserServices currentUserServices,
GuildMemberHistoryRepository guildMemberHistoryRepository,
@Named(MailJetFactory.HTML_FORMAT) EmailSender emailSender,
@Property(name = WEB_ADDRESS) String webAddress
CheckInsConfiguration checkInsConfiguration
) {
this.guildRepo = guildRepo;
this.guildMemberRepo = guildMemberRepo;
this.memberRepo = memberRepo;
this.currentUserServices = currentUserServices;
this.guildMemberHistoryRepository=guildMemberHistoryRepository;
this.emailSender = emailSender;
this.webAddress = webAddress;
this.webAddress = checkInsConfiguration.getWebAddress();
}

public void setEmailSender(EmailSender emailSender) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.objectcomputing.checkins.configuration.CheckInsConfiguration;
import com.objectcomputing.checkins.exceptions.BadArgException;
import io.micronaut.context.annotation.Value;
import jakarta.inject.Singleton;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -17,13 +17,14 @@ public class ServiceAccountVerifier {

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

@Value("${check-ins.web-address}")
private String webAddress;
private final GoogleIdTokenVerifier verifier =
new GoogleIdTokenVerifier.Builder(new NetHttpTransport(), new GsonFactory())
//one dev and one prod client id
.setAudience(Collections.singletonList(webAddress + "/services/feedback/daily-request-check"))
.build();
private final GoogleIdTokenVerifier verifier;

ServiceAccountVerifier(CheckInsConfiguration checkInsConfiguration) {
verifier = new GoogleIdTokenVerifier.Builder(new NetHttpTransport(), new GsonFactory())
//one dev and one prod client id
.setAudience(Collections.singletonList(checkInsConfiguration.getWebAddress() + "/services/feedback/daily-request-check"))
.build();
}

public void verify(String authorization) {
try {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.objectcomputing.checkins.services.reviews;

import com.objectcomputing.checkins.Environments;
import com.objectcomputing.checkins.configuration.CheckInsConfiguration;
import com.objectcomputing.checkins.exceptions.AlreadyExistsException;
import com.objectcomputing.checkins.exceptions.BadArgException;
import com.objectcomputing.checkins.notifications.email.EmailSender;
import com.objectcomputing.checkins.notifications.email.MailJetFactory;
import com.objectcomputing.checkins.services.feedback_request.FeedbackRequestServices;
import com.objectcomputing.checkins.services.memberprofile.MemberProfileRepository;
import io.micronaut.context.annotation.Property;
import io.micronaut.context.env.Environment;
import jakarta.inject.Named;
import jakarta.inject.Singleton;
Expand Down Expand Up @@ -36,24 +36,23 @@ class ReviewPeriodServicesImpl implements ReviewPeriodServices {
private EmailSender emailSender;
private final Environment environment;
private final String webAddress;
public static final String WEB_ADDRESS = "check-ins.web-address";

public ReviewPeriodServicesImpl(ReviewPeriodRepository reviewPeriodRepository,
ReviewPeriodServicesImpl(ReviewPeriodRepository reviewPeriodRepository,
ReviewAssignmentRepository reviewAssignmentRepository,
MemberProfileRepository memberProfileRepository,
FeedbackRequestServices feedbackRequestServices,
ReviewStatusTransitionValidator reviewStatusTransitionValidator,
@Named(MailJetFactory.HTML_FORMAT) EmailSender emailSender,
Environment environment,
@Property(name = WEB_ADDRESS) String webAddress) {
CheckInsConfiguration checkInsConfiguration) {
this.reviewPeriodRepository = reviewPeriodRepository;
this.reviewAssignmentRepository = reviewAssignmentRepository;
this.memberProfileRepository = memberProfileRepository;
this.feedbackRequestServices = feedbackRequestServices;
this.reviewStatusTransitionValidator = reviewStatusTransitionValidator;
this.emailSender = emailSender;
this.environment = environment;
this.webAddress = webAddress;
this.webAddress = checkInsConfiguration.getWebAddress();
}

void setEmailSender(EmailSender emailSender) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
import com.google.api.services.directory.Directory;
import com.google.api.services.drive.Drive;
import com.google.auth.http.HttpCredentialsAdapter;
import io.micronaut.context.annotation.Property;
import com.objectcomputing.checkins.configuration.CheckInsConfiguration;
import io.micronaut.context.annotation.Requires;
import io.micronaut.context.env.Environment;

import jakarta.inject.Singleton;

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Arrays;
Expand All @@ -29,10 +29,12 @@ public class GoogleAccessor {
private final GoogleAuthenticator authenticator;
private final Environment environment;

public GoogleAccessor(@Property(name = "check-ins.application.name") String applicationName,
GoogleAuthenticator authenticator,
Environment environment) throws GeneralSecurityException, IOException {
this.applicationName = applicationName;
public GoogleAccessor(
GoogleAuthenticator authenticator,
Environment environment,
CheckInsConfiguration checkInsConfiguration
) throws GeneralSecurityException, IOException {
this.applicationName = checkInsConfiguration.getApplication().getName();
this.authenticator = authenticator;
this.environment = environment;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.objectcomputing.checkins.configuration;

import io.micronaut.context.ApplicationContext;
import io.micronaut.context.exceptions.BeanInstantiationException;
import org.junit.jupiter.api.Test;

import java.util.Map;

import static org.junit.jupiter.api.AssertionFailureBuilder.assertionFailure;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

class CheckInsConfigurationTest {

@Test
void checkConfigurationGetsParsed() {
try (var ctx = ApplicationContext.run(Map.of(
"datasources.enabled", false,
"check-ins.web-address", "http://google.com",
"check-ins.application.name", "Fancy app"
))) {
var config = ctx.getBean(CheckInsConfiguration.class);
assertEquals("http://google.com", config.getWebAddress());
assertEquals("Fancy app", config.getApplication().getName());
}
}

@Test
void checkWebAddressGetsValidated() {
try (var ctx = ApplicationContext.run(Map.of(
"datasources.enabled", false,
"check-ins.web-address", "",
"check-ins.application.name", "Fancy app"
))) {
var beanInstantiationException = assertThrows(BeanInstantiationException.class, () -> ctx.getBean(CheckInsConfiguration.class));
assertContains("CheckInsConfiguration.webAddress - must not be blank", beanInstantiationException.getMessage());
}
}

@Test
void checkApplicationNameGetsValidated() {
try (var ctx = ApplicationContext.run(Map.of(
"datasources.enabled", false,
"check-ins.web-address", "http://google.com",
"check-ins.application.name", ""
))) {
var beanInstantiationException = assertThrows(BeanInstantiationException.class, () -> ctx.getBean(CheckInsConfiguration.class));
assertContains("CheckInsConfiguration$ApplicationConfig.name - must not be blank", beanInstantiationException.getMessage());
}
}

private void assertContains(String expected, String actual) {
if (!actual.contains(expected)) {
assertionFailure()
.message("Expected:\n'%s'\nto contain: '%s'".formatted(actual, expected))
.expected(expected)
.actual(actual)
.buildAndThrow();
}
}
}
Loading