diff --git a/src/main/java/bio/terra/common/iam/IamUtils.java b/src/main/java/bio/terra/common/iam/IamUtils.java new file mode 100644 index 00000000..a9ec203d --- /dev/null +++ b/src/main/java/bio/terra/common/iam/IamUtils.java @@ -0,0 +1,18 @@ +package bio.terra.common.iam; + +public final class IamUtils { + + /** + * Check whether the provided email address is a service account. + * + * @param email + * @return true if the email address is a service account + */ + public static boolean isServiceAccount(String email) { + if (email == null) { + return false; + } + return email.matches("\\S+@\\S*gserviceaccount\\.com$"); + } + +} diff --git a/src/test/java/bio/terra/common/iam/IamUtilsTest.java b/src/test/java/bio/terra/common/iam/IamUtilsTest.java new file mode 100644 index 00000000..81a628bb --- /dev/null +++ b/src/test/java/bio/terra/common/iam/IamUtilsTest.java @@ -0,0 +1,33 @@ +package bio.terra.common.iam; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class IamUtilsTest { + + @Test + public void isServiceAccountWithValidServiceAccountEmail() { + assertTrue(IamUtils.isServiceAccount("user@gserviceaccount.com")); + } + + @Test + public void isServiceAccountWithInvalidServiceAccountEmail() { + assertFalse(IamUtils.isServiceAccount("user@verily.com")); + } + + @Test + public void isServiceAccountWithWhitespaceInEmail() { + assertFalse(IamUtils.isServiceAccount(" user@gserviceaccount.com")); + } + + @Test + public void isServiceAccountWithEmptyEmail() { + assertFalse(IamUtils.isServiceAccount("")); + } + + @Test + public void isServiceAccountWithNullEmail() { + assertFalse(IamUtils.isServiceAccount(null)); + } +} \ No newline at end of file