From 5b3dec5a157d038066d259c2ea60b2100ad4dee8 Mon Sep 17 00:00:00 2001 From: williambl Date: Thu, 22 Oct 2020 20:37:18 +0100 Subject: [PATCH 1/7] Add checkstyle --- build.gradle | 9 +++---- .../checkstyle/checkstyle.xml | 27 +++++++------------ 2 files changed, 14 insertions(+), 22 deletions(-) rename checkstyle.xml => config/checkstyle/checkstyle.xml (94%) diff --git a/build.gradle b/build.gradle index 38d23462..510e7ca0 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java' id 'jacoco' id 'com.google.cloud.tools.jib' version '2.5.0' - // id "checkstyle" + id 'checkstyle' } version = "${project_version}" + (isSnapshot() ? '.' + getBuildNumber() : '') @@ -86,10 +86,9 @@ jib { } } -//checkstyle { -// configFile = file("checkstyle.xml") -// toolVersion = '8.10' -//} +checkstyle { + toolVersion "8.36.2" +} static String getBuildNumber() { return System.getenv("GITHUB_RUN_NUMBER") ?: "0" diff --git a/checkstyle.xml b/config/checkstyle/checkstyle.xml similarity index 94% rename from checkstyle.xml rename to config/checkstyle/checkstyle.xml index 35fc1d13..3bccb3f2 100644 --- a/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -83,14 +83,9 @@ - - - - - + @@ -240,14 +235,12 @@ - - - - - - - + + + + + @@ -300,13 +293,13 @@ - + - + From 7135ad16d20e436ec3f0dbeb2dc2506f8e93a360 Mon Sep 17 00:00:00 2001 From: williambl Date: Thu, 22 Oct 2020 20:49:34 +0100 Subject: [PATCH 2/7] Remove 'avoidstarimport' --- config/checkstyle/checkstyle.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index 3bccb3f2..88c21634 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -57,7 +57,6 @@ - From e0b8d2754f261a94813002df3a442defb5f64db2 Mon Sep 17 00:00:00 2001 From: williambl Date: Thu, 22 Oct 2020 21:20:53 +0100 Subject: [PATCH 3/7] Tweak checkstyle rules --- config/checkstyle/checkstyle.xml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index 88c21634..8e979213 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -82,7 +82,7 @@ @@ -167,7 +167,7 @@ value="Type name ''{0}'' must match pattern ''{1}''."/> - + @@ -232,7 +232,10 @@ value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF, ANNOTATION_FIELD_DEF, PARAMETER_DEF, VARIABLE_DEF, METHOD_DEF"/> + + LT, MINUS, MOD, NOT_EQUAL, PLUS, SL, SR, STAR, METHOD_REF "/> @@ -310,7 +313,7 @@ - + From 2f93a01a4d4d32c728b05d1ab9374fa3ec21466b Mon Sep 17 00:00:00 2001 From: williambl Date: Thu, 22 Oct 2020 21:22:37 +0100 Subject: [PATCH 4/7] Fix non-linelength and non-javadoc checkstyle errors --- build.gradle | 2 +- .../com/diluv/api/data/DataProjectType.java | 2 +- .../data/site/DataSiteProjectFilePage.java | 2 -- .../com/diluv/api/graphql/GameResolver.java | 1 - .../api/graphql/ProjectTypeResolver.java | 4 +-- .../java/com/diluv/api/graphql/Query.java | 1 - .../api/provider/CustomAtomFeedProvider.java | 8 ++++- .../com/diluv/api/utils/AuthUtilities.java | 6 ++-- .../java/com/diluv/api/utils/Constants.java | 30 +++++++++---------- .../java/com/diluv/api/utils/ImageUtil.java | 8 ++--- .../com/diluv/api/utils/auth/Validator.java | 8 ++++- .../api/utils/auth/tokens/ErrorToken.java | 4 +-- .../diluv/api/utils/error/ErrorMessage.java | 3 +- .../utils/permissions/ProjectPermissions.java | 3 +- .../utils/permissions/UserPermissions.java | 7 ++--- .../api/utils/query/PaginationQuery.java | 2 +- src/main/java/com/diluv/api/v1/APIV1.java | 23 ++++++++------ .../java/com/diluv/api/v1/admin/AdminAPI.java | 13 ++++---- .../com/diluv/api/v1/admin/AdminGameData.java | 2 -- .../com/diluv/api/v1/admin/AdminGameForm.java | 4 +-- .../java/com/diluv/api/v1/games/GamesAPI.java | 14 ++++----- .../diluv/api/v1/internal/InternalAPI.java | 20 ++++++------- .../diluv/api/v1/projects/ProjectsAPI.java | 7 ++--- .../java/com/diluv/api/v1/site/SiteAPI.java | 3 +- .../api/v1/utilities/ProjectService.java | 3 +- .../com/diluv/api/endpoints/v1/GameTest.java | 3 +- .../diluv/api/endpoints/v1/ProjectTest.java | 20 ++++++------- .../com/diluv/api/endpoints/v1/SiteTest.java | 3 -- .../java/com/diluv/api/utils/TestUtil.java | 8 ++--- 29 files changed, 109 insertions(+), 105 deletions(-) diff --git a/build.gradle b/build.gradle index 510e7ca0..f61bfd3a 100644 --- a/build.gradle +++ b/build.gradle @@ -95,7 +95,7 @@ static String getBuildNumber() { } static boolean isSnapshot() { - String ref = System.getenv("GITHUB_REF"); + String ref = System.getenv("GITHUB_REF") if (ref != null && ref.startsWith("refs/tags/v")) { return false } diff --git a/src/main/java/com/diluv/api/data/DataProjectType.java b/src/main/java/com/diluv/api/data/DataProjectType.java index 2c866040..da319833 100644 --- a/src/main/java/com/diluv/api/data/DataProjectType.java +++ b/src/main/java/com/diluv/api/data/DataProjectType.java @@ -32,7 +32,7 @@ public DataProjectType (ProjectTypesEntity rs) { this.game = new DataBaseGame(rs.getGame()); this.tags = rs.getTags().stream().map(DataTag::new).collect(Collectors.toList()); this.projectCount = null; - this.loaders= rs.getProjectTypeLoaders().stream().map(DataLoader::new).collect(Collectors.toList()); + this.loaders = rs.getProjectTypeLoaders().stream().map(DataLoader::new).collect(Collectors.toList()); } public DataProjectType (ProjectTypesEntity rs, long projectCount) { diff --git a/src/main/java/com/diluv/api/data/site/DataSiteProjectFilePage.java b/src/main/java/com/diluv/api/data/site/DataSiteProjectFilePage.java index a82a76dd..06d68a1e 100644 --- a/src/main/java/com/diluv/api/data/site/DataSiteProjectFilePage.java +++ b/src/main/java/com/diluv/api/data/site/DataSiteProjectFilePage.java @@ -1,7 +1,5 @@ package com.diluv.api.data.site; -import java.util.List; - import com.diluv.api.data.DataBaseProject; import com.google.gson.annotations.Expose; diff --git a/src/main/java/com/diluv/api/graphql/GameResolver.java b/src/main/java/com/diluv/api/graphql/GameResolver.java index 7eb74f5e..f557373b 100644 --- a/src/main/java/com/diluv/api/graphql/GameResolver.java +++ b/src/main/java/com/diluv/api/graphql/GameResolver.java @@ -3,7 +3,6 @@ import java.util.List; import java.util.stream.Collectors; -import com.diluv.api.data.DataImage; import graphql.kickstart.tools.GraphQLResolver; public class GameResolver implements GraphQLResolver { diff --git a/src/main/java/com/diluv/api/graphql/ProjectTypeResolver.java b/src/main/java/com/diluv/api/graphql/ProjectTypeResolver.java index acaf3f5c..d7fcad60 100644 --- a/src/main/java/com/diluv/api/graphql/ProjectTypeResolver.java +++ b/src/main/java/com/diluv/api/graphql/ProjectTypeResolver.java @@ -1,10 +1,10 @@ package com.diluv.api.graphql; -import graphql.kickstart.tools.GraphQLResolver; - import java.util.List; import java.util.stream.Collectors; +import graphql.kickstart.tools.GraphQLResolver; + public class ProjectTypeResolver implements GraphQLResolver { public List tags (ProjectType projectType) { diff --git a/src/main/java/com/diluv/api/graphql/Query.java b/src/main/java/com/diluv/api/graphql/Query.java index 4c8143e5..386db3f6 100644 --- a/src/main/java/com/diluv/api/graphql/Query.java +++ b/src/main/java/com/diluv/api/graphql/Query.java @@ -5,7 +5,6 @@ import com.diluv.api.utils.query.PaginationQuery; import com.diluv.confluencia.Confluencia; -import com.diluv.confluencia.database.sort.GameSort; import com.diluv.confluencia.database.sort.ProjectSort; import com.diluv.confluencia.database.sort.Sort; import graphql.kickstart.tools.GraphQLQueryResolver; diff --git a/src/main/java/com/diluv/api/provider/CustomAtomFeedProvider.java b/src/main/java/com/diluv/api/provider/CustomAtomFeedProvider.java index a74ff0d3..a1b5ebe7 100644 --- a/src/main/java/com/diluv/api/provider/CustomAtomFeedProvider.java +++ b/src/main/java/com/diluv/api/provider/CustomAtomFeedProvider.java @@ -25,15 +25,21 @@ import com.sun.xml.bind.marshaller.NamespacePrefixMapper; /** - * This class was created by . It's distributed as + *

+ * This class was created by Bill Burke. It's distributed as * part of Resteasy. Get the Source Code in github: * https://github.com/resteasy/Resteasy/ + *

* + *

* Resteasy is Apache License 2.0 and distributed under the * Resteasy License: https://github.com/resteasy/Resteasy/blob/master/License.html + *

* + *

* Changes * - Removed if check from getPreferredPrefix to not include a prefix + *

*/ public class CustomAtomFeedProvider extends AtomFeedProvider { diff --git a/src/main/java/com/diluv/api/utils/AuthUtilities.java b/src/main/java/com/diluv/api/utils/AuthUtilities.java index 70b5bafa..3dff4dc5 100644 --- a/src/main/java/com/diluv/api/utils/AuthUtilities.java +++ b/src/main/java/com/diluv/api/utils/AuthUtilities.java @@ -27,16 +27,18 @@ public static String getBcrypt (char[] password) { public static String getSecureRandomAlphanumeric (int length) { final char[] buf = new char[length]; - for (int i = 0; i < buf.length; ++i) + for (int i = 0; i < buf.length; ++i) { buf[i] = ALPHANUMERIC.charAt(random.nextInt(ALPHANUMERIC.length())); + } return new String(buf); } public static String getSecureRandomNumeric (int length) { final char[] buf = new char[length]; - for (int i = 0; i < buf.length; ++i) + for (int i = 0; i < buf.length; ++i) { buf[i] = NUMERIC.charAt(random.nextInt(NUMERIC.length())); + } return new String(buf); } diff --git a/src/main/java/com/diluv/api/utils/Constants.java b/src/main/java/com/diluv/api/utils/Constants.java index 8a952337..64ee6316 100644 --- a/src/main/java/com/diluv/api/utils/Constants.java +++ b/src/main/java/com/diluv/api/utils/Constants.java @@ -104,6 +104,21 @@ private static String getValueOrDefault (String name, String defaultValue) { return value == null ? defaultValue : value; } + /** + * Reads an integer from a system environment variable. If the variable can not be found or + * is not mapped to a valid integer a default value will be returned. + * + * @param name The name of the environment variable. + * @param defaultValue The default value to use when the variable is missing or can not be + * used. + * @return The integer variable, or the default value if it is not usable. + */ + private static int getValueOrDefault (String name, int defaultValue) { + + final String value = System.getenv(name); + return value == null || !GenericValidator.isInt(value) ? defaultValue : Integer.parseInt(value); + } + /** * Reads an immutable set of strings from an environment variable. If the variable can not * be found or is not mapped to a valid value the default values will be returned. @@ -135,21 +150,6 @@ private static Set getValuesOrDefaults (String name, Set default return value == null ? defaultValues : Arrays.stream(value.split(",")).collect(Collectors.toSet()); } - /** - * Reads an integer from a system environment variable. If the variable can not be found or - * is not mapped to a valid integer a default value will be returned. - * - * @param name The name of the environment variable. - * @param defaultValue The default value to use when the variable is missing or can not be - * used. - * @return The integer variable, or the default value if it is not usable. - */ - private static int getValueOrDefault (String name, int defaultValue) { - - final String value = System.getenv(name); - return value == null || !GenericValidator.isInt(value) ? defaultValue : Integer.parseInt(value); - } - @Nullable public static ConfigurableJWTProcessor getJWTProcessor () { diff --git a/src/main/java/com/diluv/api/utils/ImageUtil.java b/src/main/java/com/diluv/api/utils/ImageUtil.java index 18f35dc5..62b3e116 100644 --- a/src/main/java/com/diluv/api/utils/ImageUtil.java +++ b/src/main/java/com/diluv/api/utils/ImageUtil.java @@ -1,15 +1,15 @@ package com.diluv.api.utils; -import org.apache.james.mime4j.io.LimitedInputStream; - -import javax.imageio.ImageIO; - import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; +import javax.imageio.ImageIO; + +import org.apache.james.mime4j.io.LimitedInputStream; + public class ImageUtil { public static BufferedImage isValidImage (String url) { diff --git a/src/main/java/com/diluv/api/utils/auth/Validator.java b/src/main/java/com/diluv/api/utils/auth/Validator.java index d9b8a41d..45b291e9 100644 --- a/src/main/java/com/diluv/api/utils/auth/Validator.java +++ b/src/main/java/com/diluv/api/utils/auth/Validator.java @@ -9,7 +9,6 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import com.diluv.confluencia.database.record.*; import org.apache.commons.validator.GenericValidator; import org.apache.commons.validator.routines.EmailValidator; @@ -17,6 +16,13 @@ import com.diluv.api.utils.error.ErrorMessage; import com.diluv.api.v1.games.FileDependency; import com.diluv.confluencia.Confluencia; +import com.diluv.confluencia.database.record.GameVersionsEntity; +import com.diluv.confluencia.database.record.GamesEntity; +import com.diluv.confluencia.database.record.ProjectFileDependenciesEntity; +import com.diluv.confluencia.database.record.ProjectTypeLoadersEntity; +import com.diluv.confluencia.database.record.ProjectTypesEntity; +import com.diluv.confluencia.database.record.ProjectsEntity; +import com.diluv.confluencia.database.record.TagsEntity; public class Validator { diff --git a/src/main/java/com/diluv/api/utils/auth/tokens/ErrorToken.java b/src/main/java/com/diluv/api/utils/auth/tokens/ErrorToken.java index 7c6f6023..84c25c9a 100644 --- a/src/main/java/com/diluv/api/utils/auth/tokens/ErrorToken.java +++ b/src/main/java/com/diluv/api/utils/auth/tokens/ErrorToken.java @@ -1,9 +1,9 @@ package com.diluv.api.utils.auth.tokens; -import javax.ws.rs.core.Response; - import java.util.Collections; +import javax.ws.rs.core.Response; + public class ErrorToken extends Token { private final Response response; diff --git a/src/main/java/com/diluv/api/utils/error/ErrorMessage.java b/src/main/java/com/diluv/api/utils/error/ErrorMessage.java index 427f352e..67a86d41 100644 --- a/src/main/java/com/diluv/api/utils/error/ErrorMessage.java +++ b/src/main/java/com/diluv/api/utils/error/ErrorMessage.java @@ -1,10 +1,11 @@ package com.diluv.api.utils.error; +import static com.diluv.api.utils.error.ErrorType.*; + import javax.ws.rs.core.Response; import com.diluv.api.utils.response.ErrorResponse; -import static com.diluv.api.utils.error.ErrorType.*; public enum ErrorMessage { diff --git a/src/main/java/com/diluv/api/utils/permissions/ProjectPermissions.java b/src/main/java/com/diluv/api/utils/permissions/ProjectPermissions.java index 83b010b6..be79c78e 100644 --- a/src/main/java/com/diluv/api/utils/permissions/ProjectPermissions.java +++ b/src/main/java/com/diluv/api/utils/permissions/ProjectPermissions.java @@ -33,8 +33,9 @@ private String getName () { public static boolean hasPermission (ProjectsEntity project, @Nullable Token token, ProjectPermissions permissions) { - if (token == null) + if (token == null) { return false; + } List userPermissions = getAuthorizedUserPermissions(project, token); diff --git a/src/main/java/com/diluv/api/utils/permissions/UserPermissions.java b/src/main/java/com/diluv/api/utils/permissions/UserPermissions.java index 2317b569..e4a57207 100644 --- a/src/main/java/com/diluv/api/utils/permissions/UserPermissions.java +++ b/src/main/java/com/diluv/api/utils/permissions/UserPermissions.java @@ -29,8 +29,9 @@ public String getName () { public static boolean hasPermission (@Nullable Token token, UserPermissions permissions) { - if (token == null) + if (token == null) { return false; + } UsersEntity user = Confluencia.USER.findOneByUserId(token.getUserId()); if (user == null) { @@ -41,9 +42,7 @@ public static boolean hasPermission (@Nullable Token token, UserPermissions perm return false; } if ("admin".equals(userRole.getRole().getName())) { - if (ADMIN.contains(permissions)) { - return true; - } + return ADMIN.contains(permissions); } return false; diff --git a/src/main/java/com/diluv/api/utils/query/PaginationQuery.java b/src/main/java/com/diluv/api/utils/query/PaginationQuery.java index 424a388e..74f54161 100644 --- a/src/main/java/com/diluv/api/utils/query/PaginationQuery.java +++ b/src/main/java/com/diluv/api/utils/query/PaginationQuery.java @@ -20,7 +20,7 @@ public long getPage () { return getPage(this.page); } - public int getLimit(){ + public int getLimit () { return getLimit(this.limit); } diff --git a/src/main/java/com/diluv/api/v1/APIV1.java b/src/main/java/com/diluv/api/v1/APIV1.java index fa3c86f5..c86d2e67 100644 --- a/src/main/java/com/diluv/api/v1/APIV1.java +++ b/src/main/java/com/diluv/api/v1/APIV1.java @@ -1,6 +1,19 @@ package com.diluv.api.v1; -import com.diluv.api.provider.*; +import java.util.HashSet; +import java.util.Set; + +import javax.ws.rs.core.Application; + +import org.jboss.resteasy.plugins.interceptors.CorsFilter; +import org.jboss.resteasy.plugins.interceptors.GZIPEncodingInterceptor; + +import com.diluv.api.provider.CustomAtomFeedProvider; +import com.diluv.api.provider.GenericExceptionMapper; +import com.diluv.api.provider.GsonProvider; +import com.diluv.api.provider.NotFoundExceptionMapper; +import com.diluv.api.provider.ParameterProviderV1; +import com.diluv.api.provider.ResponseExceptionMapper; import com.diluv.api.utils.Constants; import com.diluv.api.v1.admin.AdminAPI; import com.diluv.api.v1.featured.FeaturedAPI; @@ -11,14 +24,6 @@ import com.diluv.api.v1.site.SiteAPI; import com.diluv.api.v1.users.UsersAPI; -import org.jboss.resteasy.plugins.interceptors.CorsFilter; -import org.jboss.resteasy.plugins.interceptors.GZIPEncodingInterceptor; - -import javax.ws.rs.core.Application; - -import java.util.HashSet; -import java.util.Set; - public class APIV1 extends Application { @Override diff --git a/src/main/java/com/diluv/api/v1/admin/AdminAPI.java b/src/main/java/com/diluv/api/v1/admin/AdminAPI.java index 53c9aaa3..d9cd465b 100644 --- a/src/main/java/com/diluv/api/v1/admin/AdminAPI.java +++ b/src/main/java/com/diluv/api/v1/admin/AdminAPI.java @@ -19,10 +19,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import com.diluv.api.utils.auth.JWTUtil; - -import com.diluv.api.utils.auth.tokens.ErrorToken; - import org.apache.commons.validator.GenericValidator; import org.jboss.resteasy.annotations.GZIP; import org.jboss.resteasy.annotations.providers.multipart.MultipartForm; @@ -38,6 +34,7 @@ import com.diluv.api.graphql.TagResolver; import com.diluv.api.utils.Constants; import com.diluv.api.utils.ImageUtil; +import com.diluv.api.utils.auth.tokens.ErrorToken; import com.diluv.api.utils.auth.tokens.Token; import com.diluv.api.utils.error.ErrorMessage; import com.diluv.api.utils.permissions.UserPermissions; @@ -63,7 +60,7 @@ public static void init () { SchemaParserOptions options = SchemaParserOptions .newOptions() -// .fieldVisibility(DefaultGraphqlFieldVisibility.DEFAULT_FIELD_VISIBILITY) + //.fieldVisibility(DefaultGraphqlFieldVisibility.DEFAULT_FIELD_VISIBILITY) .build(); GraphQLSchema schema = SchemaParser.newParser() @@ -254,11 +251,11 @@ public Response postGraphQL (@HeaderParam("Authorization") Token token, @Context public Response hasPermission (Token token) { - if (token instanceof ErrorToken ) { - return ((ErrorToken)token).getResponse(); + if (token instanceof ErrorToken) { + return ((ErrorToken) token).getResponse(); } - if(token.isApiToken()){ + if (token.isApiToken()) { return ErrorMessage.USER_INVALID_TOKEN.respond("Can't use an API token for this request"); } diff --git a/src/main/java/com/diluv/api/v1/admin/AdminGameData.java b/src/main/java/com/diluv/api/v1/admin/AdminGameData.java index e8b106ff..27eb8eb4 100644 --- a/src/main/java/com/diluv/api/v1/admin/AdminGameData.java +++ b/src/main/java/com/diluv/api/v1/admin/AdminGameData.java @@ -2,8 +2,6 @@ import com.google.gson.annotations.Expose; -import javax.validation.constraints.NotNull; - public class AdminGameData { @Expose diff --git a/src/main/java/com/diluv/api/v1/admin/AdminGameForm.java b/src/main/java/com/diluv/api/v1/admin/AdminGameForm.java index 4ea8d64b..67ab56e1 100644 --- a/src/main/java/com/diluv/api/v1/admin/AdminGameForm.java +++ b/src/main/java/com/diluv/api/v1/admin/AdminGameForm.java @@ -1,11 +1,11 @@ package com.diluv.api.v1.admin; -import org.jboss.resteasy.annotations.providers.multipart.PartType; +import java.io.InputStream; import javax.ws.rs.FormParam; import javax.ws.rs.core.MediaType; -import java.io.InputStream; +import org.jboss.resteasy.annotations.providers.multipart.PartType; public class AdminGameForm { diff --git a/src/main/java/com/diluv/api/v1/games/GamesAPI.java b/src/main/java/com/diluv/api/v1/games/GamesAPI.java index 87f7e0d9..f7bd9660 100644 --- a/src/main/java/com/diluv/api/v1/games/GamesAPI.java +++ b/src/main/java/com/diluv/api/v1/games/GamesAPI.java @@ -19,8 +19,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import com.diluv.api.utils.auth.tokens.ErrorToken; - import org.apache.commons.validator.GenericValidator; import org.jboss.resteasy.annotations.GZIP; import org.jboss.resteasy.annotations.Query; @@ -35,8 +33,8 @@ import com.diluv.api.provider.ResponseException; import com.diluv.api.utils.Constants; import com.diluv.api.utils.ImageUtil; -import com.diluv.api.utils.auth.JWTUtil; import com.diluv.api.utils.auth.Validator; +import com.diluv.api.utils.auth.tokens.ErrorToken; import com.diluv.api.utils.auth.tokens.Token; import com.diluv.api.utils.error.ErrorMessage; import com.diluv.api.utils.error.ErrorType; @@ -376,8 +374,8 @@ public Response getProjectFiles (@HeaderParam("Authorization") Token token, @Pat @Consumes(MediaType.MULTIPART_FORM_DATA) public Response postProject (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @MultipartForm ProjectForm form) { - if (token instanceof ErrorToken ) { - return ((ErrorToken)token).getResponse(); + if (token instanceof ErrorToken) { + return ((ErrorToken) token).getResponse(); } ProjectTypesEntity projectType = Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(gameSlug, projectTypeSlug); @@ -417,9 +415,9 @@ public Response postProject (@HeaderParam("Authorization") Token token, @PathPar return ErrorMessage.REQUIRES_IMAGE.respond(); } - String name = form.data.name.trim(); - String summary = form.data.summary.trim(); - String description = form.data.description.trim(); + final String name = form.data.name.trim(); + final String summary = form.data.summary.trim(); + final String description = form.data.description.trim(); final String projectSlug = this.slugify.slugify(name); diff --git a/src/main/java/com/diluv/api/v1/internal/InternalAPI.java b/src/main/java/com/diluv/api/v1/internal/InternalAPI.java index 93c29d7e..b8deaa49 100644 --- a/src/main/java/com/diluv/api/v1/internal/InternalAPI.java +++ b/src/main/java/com/diluv/api/v1/internal/InternalAPI.java @@ -1,14 +1,8 @@ package com.diluv.api.v1.internal; -import com.diluv.api.utils.Constants; -import com.diluv.api.utils.error.ErrorMessage; -import com.diluv.confluencia.Confluencia; -import com.diluv.confluencia.database.record.NodeCDNCommitsEntity; -import com.diluv.schoomp.Webhook; -import com.diluv.schoomp.message.Message; - -import org.jboss.resteasy.annotations.GZIP; +import java.io.IOException; +import java.time.Instant; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -17,8 +11,14 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.io.IOException; -import java.time.Instant; +import org.jboss.resteasy.annotations.GZIP; + +import com.diluv.api.utils.Constants; +import com.diluv.api.utils.error.ErrorMessage; +import com.diluv.confluencia.Confluencia; +import com.diluv.confluencia.database.record.NodeCDNCommitsEntity; +import com.diluv.schoomp.Webhook; +import com.diluv.schoomp.message.Message; @GZIP @Path("/internal") diff --git a/src/main/java/com/diluv/api/v1/projects/ProjectsAPI.java b/src/main/java/com/diluv/api/v1/projects/ProjectsAPI.java index e38b7183..93d24a32 100644 --- a/src/main/java/com/diluv/api/v1/projects/ProjectsAPI.java +++ b/src/main/java/com/diluv/api/v1/projects/ProjectsAPI.java @@ -16,8 +16,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import com.diluv.api.utils.auth.tokens.ErrorToken; - import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.jboss.resteasy.annotations.GZIP; @@ -30,8 +28,8 @@ import com.diluv.api.provider.ResponseException; import com.diluv.api.utils.FileUtil; import com.diluv.api.utils.MismatchException; -import com.diluv.api.utils.auth.JWTUtil; import com.diluv.api.utils.auth.Validator; +import com.diluv.api.utils.auth.tokens.ErrorToken; import com.diluv.api.utils.auth.tokens.Token; import com.diluv.api.utils.error.ErrorMessage; import com.diluv.api.utils.permissions.ProjectPermissions; @@ -239,7 +237,8 @@ public Response postProjectFile (@HeaderParam("Authorization") Token token, @Pat e.printStackTrace(); System.out.println("ERROR_WRITING"); return ErrorMessage.THROWABLE.respond(); - } finally { + } + finally { tempFile.delete(); tempFile.getParentFile().delete(); } diff --git a/src/main/java/com/diluv/api/v1/site/SiteAPI.java b/src/main/java/com/diluv/api/v1/site/SiteAPI.java index a0181d6b..2a25d4b5 100644 --- a/src/main/java/com/diluv/api/v1/site/SiteAPI.java +++ b/src/main/java/com/diluv/api/v1/site/SiteAPI.java @@ -11,8 +11,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import com.diluv.api.data.site.DataSiteProjectFilePage; - import org.jboss.resteasy.annotations.GZIP; import org.jboss.resteasy.annotations.Query; @@ -23,6 +21,7 @@ import com.diluv.api.data.site.DataSiteGameProjects; import com.diluv.api.data.site.DataSiteIndex; import com.diluv.api.data.site.DataSiteProjectFileDisplay; +import com.diluv.api.data.site.DataSiteProjectFilePage; import com.diluv.api.data.site.DataSiteProjectFilesPage; import com.diluv.api.provider.ResponseException; import com.diluv.api.utils.auth.tokens.Token; diff --git a/src/main/java/com/diluv/api/v1/utilities/ProjectService.java b/src/main/java/com/diluv/api/v1/utilities/ProjectService.java index 63bcccbc..26007054 100644 --- a/src/main/java/com/diluv/api/v1/utilities/ProjectService.java +++ b/src/main/java/com/diluv/api/v1/utilities/ProjectService.java @@ -45,8 +45,9 @@ public static DataProject getDataProject (ProjectsEntity project, Token token) t if (!project.isReleased()) { - if (token == null) + if (token == null) { throw new ResponseException(ErrorMessage.NOT_FOUND_PROJECT.respond()); + } List permissions = ProjectPermissions.getAuthorizedUserPermissions(project, token); diff --git a/src/test/java/com/diluv/api/endpoints/v1/GameTest.java b/src/test/java/com/diluv/api/endpoints/v1/GameTest.java index b5170964..13471418 100644 --- a/src/test/java/com/diluv/api/endpoints/v1/GameTest.java +++ b/src/test/java/com/diluv/api/endpoints/v1/GameTest.java @@ -4,14 +4,13 @@ import java.util.HashMap; import java.util.Map; -import com.diluv.api.v1.games.ProjectCreate; - import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import com.diluv.api.utils.Request; import com.diluv.api.utils.TestUtil; import com.diluv.api.utils.error.ErrorMessage; +import com.diluv.api.v1.games.ProjectCreate; public class GameTest { diff --git a/src/test/java/com/diluv/api/endpoints/v1/ProjectTest.java b/src/test/java/com/diluv/api/endpoints/v1/ProjectTest.java index 1fcb5b27..badd8c45 100644 --- a/src/test/java/com/diluv/api/endpoints/v1/ProjectTest.java +++ b/src/test/java/com/diluv/api/endpoints/v1/ProjectTest.java @@ -1,5 +1,15 @@ package com.diluv.api.endpoints.v1; +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.io.FileUtils; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + import com.diluv.api.DiluvAPIServer; import com.diluv.api.utils.Constants; import com.diluv.api.utils.Request; @@ -8,16 +18,6 @@ import com.diluv.api.v1.games.FileDependency; import com.diluv.api.v1.games.ProjectFileUpload; -import org.apache.commons.io.FileUtils; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - public class ProjectTest { private static final String URL = "/v1/projects"; diff --git a/src/test/java/com/diluv/api/endpoints/v1/SiteTest.java b/src/test/java/com/diluv/api/endpoints/v1/SiteTest.java index b5f5d63c..812dd2c3 100644 --- a/src/test/java/com/diluv/api/endpoints/v1/SiteTest.java +++ b/src/test/java/com/diluv/api/endpoints/v1/SiteTest.java @@ -1,8 +1,5 @@ package com.diluv.api.endpoints.v1; -import java.util.HashMap; -import java.util.Map; - import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/diluv/api/utils/TestUtil.java b/src/test/java/com/diluv/api/utils/TestUtil.java index cf2b7283..5215cb34 100644 --- a/src/test/java/com/diluv/api/utils/TestUtil.java +++ b/src/test/java/com/diluv/api/utils/TestUtil.java @@ -1,13 +1,13 @@ package com.diluv.api.utils; -import com.diluv.api.DiluvAPIServer; -import com.diluv.confluencia.Confluencia; -import io.restassured.RestAssured; - import org.junit.jupiter.api.Assertions; import org.testcontainers.containers.MariaDBContainer; import org.testcontainers.junit.jupiter.Testcontainers; +import com.diluv.api.DiluvAPIServer; +import com.diluv.confluencia.Confluencia; +import io.restassured.RestAssured; + @Testcontainers public class TestUtil { From 9f65ab45a02f2205d07cab8f2810d3638627a8c8 Mon Sep 17 00:00:00 2001 From: williambl Date: Thu, 22 Oct 2020 22:03:12 +0100 Subject: [PATCH 5/7] Add SuppressionCommentFilter --- config/checkstyle/checkstyle.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index 8e979213..625f807d 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -30,6 +30,7 @@ default="checkstyle-suppressions.xml" />
+ From a7066c083904eb5766195fe1f3f9c63777ec1944 Mon Sep 17 00:00:00 2001 From: williambl Date: Thu, 22 Oct 2020 22:03:42 +0100 Subject: [PATCH 6/7] Fix line length checkstyle issues --- .../DataAuthorizedProjectContributor.java | 3 +- .../com/diluv/api/data/DataBaseProject.java | 3 +- .../java/com/diluv/api/data/DataFeatured.java | 3 +- .../com/diluv/api/data/DataProjectFile.java | 10 +- .../api/data/DataProjectFileAvailable.java | 3 +- .../api/data/DataProjectFileInQueue.java | 3 +- .../api/data/site/DataSiteGameProjects.java | 3 +- .../diluv/api/data/site/DataSiteIndex.java | 3 +- .../data/site/DataSiteProjectFileDisplay.java | 3 +- .../java/com/diluv/api/graphql/Mutation.java | 15 ++- .../diluv/api/graphql/ProjectResolver.java | 3 +- .../java/com/diluv/api/graphql/Query.java | 33 +++--- .../api/provider/CustomAtomFeedProvider.java | 4 +- .../com/diluv/api/provider/GsonProvider.java | 6 +- .../java/com/diluv/api/utils/Constants.java | 26 +++-- .../java/com/diluv/api/utils/FileUtil.java | 6 +- .../com/diluv/api/utils/auth/JWTUtil.java | 3 +- .../com/diluv/api/utils/auth/Validator.java | 34 ++++-- .../diluv/api/utils/error/ErrorMessage.java | 63 ++++++---- .../utils/permissions/ProjectPermissions.java | 10 +- .../java/com/diluv/api/v1/GenericAPI.java | 9 +- .../java/com/diluv/api/v1/admin/AdminAPI.java | 6 +- .../java/com/diluv/api/v1/games/GamesAPI.java | 101 ++++++++++------ .../java/com/diluv/api/v1/news/NewsAPI.java | 3 +- .../diluv/api/v1/projects/ProjectsAPI.java | 15 ++- .../java/com/diluv/api/v1/site/SiteAPI.java | 109 ++++++++++++------ .../java/com/diluv/api/v1/users/UsersAPI.java | 9 +- .../api/v1/utilities/ProjectService.java | 9 +- 28 files changed, 332 insertions(+), 166 deletions(-) diff --git a/src/main/java/com/diluv/api/data/DataAuthorizedProjectContributor.java b/src/main/java/com/diluv/api/data/DataAuthorizedProjectContributor.java index f8351048..33162fe0 100644 --- a/src/main/java/com/diluv/api/data/DataAuthorizedProjectContributor.java +++ b/src/main/java/com/diluv/api/data/DataAuthorizedProjectContributor.java @@ -21,6 +21,7 @@ public class DataAuthorizedProjectContributor extends DataProjectContributor { public DataAuthorizedProjectContributor (ProjectAuthorsEntity projectAuthor) { super(projectAuthor); - this.permissions = projectAuthor.getPermissions().stream().map(ProjectAuthorPermissionsEntity::getPermission).collect(Collectors.toList()); + this.permissions = projectAuthor.getPermissions().stream().map(ProjectAuthorPermissionsEntity::getPermission) + .collect(Collectors.toList()); } } \ No newline at end of file diff --git a/src/main/java/com/diluv/api/data/DataBaseProject.java b/src/main/java/com/diluv/api/data/DataBaseProject.java index 4ee811c8..f702740d 100644 --- a/src/main/java/com/diluv/api/data/DataBaseProject.java +++ b/src/main/java/com/diluv/api/data/DataBaseProject.java @@ -103,7 +103,8 @@ public DataBaseProject (ProjectsEntity rs) { this.projectType = new DataBaseProjectType(rs.getProjectType()); this.contributors.add(new DataProjectContributor(rs.getOwner(), "owner")); if (!rs.getAuthors().isEmpty()) { - this.contributors.addAll(rs.getAuthors().stream().map(DataProjectContributor::new).collect(Collectors.toList())); + this.contributors.addAll(rs.getAuthors().stream().map(DataProjectContributor::new) + .collect(Collectors.toList())); } } } \ No newline at end of file diff --git a/src/main/java/com/diluv/api/data/DataFeatured.java b/src/main/java/com/diluv/api/data/DataFeatured.java index 615450ed..8dd68ee2 100644 --- a/src/main/java/com/diluv/api/data/DataFeatured.java +++ b/src/main/java/com/diluv/api/data/DataFeatured.java @@ -18,7 +18,8 @@ public class DataFeatured { @Expose private final long contributorCount; - public DataFeatured (List games, List projects, long projectCount, long contributorCount) { + public DataFeatured (List games, List projects, long projectCount, + long contributorCount) { this.games = games; this.projects = projects; diff --git a/src/main/java/com/diluv/api/data/DataProjectFile.java b/src/main/java/com/diluv/api/data/DataProjectFile.java index 4ff1e50a..5d9986ac 100644 --- a/src/main/java/com/diluv/api/data/DataProjectFile.java +++ b/src/main/java/com/diluv/api/data/DataProjectFile.java @@ -119,7 +119,8 @@ public DataProjectFile (ProjectFilesEntity rs, String gameSlug, String projectTy this.id = rs.getId(); this.name = rs.getName(); - this.downloadURL = Constants.getDiluvCDN(gameSlug, projectTypeSlug, rs.getProject().getId(), rs.getId(), rs.getName()); + this.downloadURL = + Constants.getDiluvCDN(gameSlug, projectTypeSlug, rs.getProject().getId(), rs.getId(), rs.getName()); this.size = rs.getSize(); this.changelog = rs.getChangelog(); this.sha512 = rs.getSha512(); @@ -130,8 +131,11 @@ public DataProjectFile (ProjectFilesEntity rs, String gameSlug, String projectTy this.uploaderUserId = rs.getUser().getId(); this.uploaderUsername = rs.getUser().getUsername(); this.uploaderDisplayName = rs.getUser().getDisplayName(); - this.dependencies = rs.getDependencies().stream().map(a -> a.getDependencyProject().getId()).collect(Collectors.toList()); - this.gameVersions = rs.getGameVersions().stream().map(a -> new DataGameVersion(a.getGameVersion())).collect(Collectors.toList()); + this.dependencies = + rs.getDependencies().stream().map(a -> a.getDependencyProject().getId()).collect(Collectors.toList()); + this.gameVersions = + rs.getGameVersions().stream().map(a -> new DataGameVersion(a.getGameVersion())) + .collect(Collectors.toList()); this.gameSlug = gameSlug; this.projectTypeSlug = projectTypeSlug; this.projectSlug = projectSlug; diff --git a/src/main/java/com/diluv/api/data/DataProjectFileAvailable.java b/src/main/java/com/diluv/api/data/DataProjectFileAvailable.java index 4bea0178..c7aa904d 100644 --- a/src/main/java/com/diluv/api/data/DataProjectFileAvailable.java +++ b/src/main/java/com/diluv/api/data/DataProjectFileAvailable.java @@ -14,7 +14,8 @@ public class DataProjectFileAvailable extends DataProjectFile { @Expose private final long updatedAt; - public DataProjectFileAvailable (ProjectFilesEntity rs, String projectSlug, String projectTypeSlug, String gameSlug) { + public DataProjectFileAvailable (ProjectFilesEntity rs, String projectSlug, String projectTypeSlug, + String gameSlug) { super(rs, projectSlug, projectTypeSlug, gameSlug); this.updatedAt = rs.getUpdatedAt().getTime(); diff --git a/src/main/java/com/diluv/api/data/DataProjectFileInQueue.java b/src/main/java/com/diluv/api/data/DataProjectFileInQueue.java index c656dc6e..d7f2158f 100644 --- a/src/main/java/com/diluv/api/data/DataProjectFileInQueue.java +++ b/src/main/java/com/diluv/api/data/DataProjectFileInQueue.java @@ -20,7 +20,8 @@ public class DataProjectFileInQueue extends DataProjectFile { @Expose private final long lastStatusChanged; - public DataProjectFileInQueue (ProjectFilesEntity record, String gameSlug, String projectTypeSlug, String projectSlug) { + public DataProjectFileInQueue (ProjectFilesEntity record, String gameSlug, String projectTypeSlug, + String projectSlug) { super(record, gameSlug, projectTypeSlug, projectSlug); this.status = record.getProcessingStatus().toString(); diff --git a/src/main/java/com/diluv/api/data/site/DataSiteGameProjects.java b/src/main/java/com/diluv/api/data/site/DataSiteGameProjects.java index 0486f1b9..efcaa820 100644 --- a/src/main/java/com/diluv/api/data/site/DataSiteGameProjects.java +++ b/src/main/java/com/diluv/api/data/site/DataSiteGameProjects.java @@ -22,7 +22,8 @@ public class DataSiteGameProjects { @Expose private final List sorts; - public DataSiteGameProjects (List projects, List types, DataProjectType currentType, List sorts) { + public DataSiteGameProjects (List projects, List types, + DataProjectType currentType, List sorts) { this.projects = projects; this.types = types; diff --git a/src/main/java/com/diluv/api/data/site/DataSiteIndex.java b/src/main/java/com/diluv/api/data/site/DataSiteIndex.java index 673aae40..e7102362 100644 --- a/src/main/java/com/diluv/api/data/site/DataSiteIndex.java +++ b/src/main/java/com/diluv/api/data/site/DataSiteIndex.java @@ -21,7 +21,8 @@ public class DataSiteIndex { @Expose private final long projectTypeCount; - public DataSiteIndex (List featuredGames, long projectCount, long contributorCount, long gameCount, long projectTypeCount) { + public DataSiteIndex (List featuredGames, long projectCount, long contributorCount, long gameCount, + long projectTypeCount) { this.featuredGames = featuredGames; this.projectCount = projectCount; diff --git a/src/main/java/com/diluv/api/data/site/DataSiteProjectFileDisplay.java b/src/main/java/com/diluv/api/data/site/DataSiteProjectFileDisplay.java index 3fa62776..f41ace4d 100644 --- a/src/main/java/com/diluv/api/data/site/DataSiteProjectFileDisplay.java +++ b/src/main/java/com/diluv/api/data/site/DataSiteProjectFileDisplay.java @@ -114,7 +114,8 @@ public DataSiteProjectFileDisplay (ProjectFilesEntity rs, List this.gameSlug = rs.getProject().getGame().getSlug(); this.projectTypeSlug = rs.getProject().getProjectType().getSlug(); this.projectSlug = rs.getProject().getSlug(); - this.downloadURL = Constants.getDiluvCDN(this.gameSlug, this.projectTypeSlug, rs.getProject().getId(), rs.getId(), rs.getName()); + this.downloadURL = Constants.getDiluvCDN( + this.gameSlug, this.projectTypeSlug, rs.getProject().getId(), rs.getId(), rs.getName()); this.size = rs.getSize(); this.sha512 = rs.getSha512(); this.downloads = rs.getDownloads(); diff --git a/src/main/java/com/diluv/api/graphql/Mutation.java b/src/main/java/com/diluv/api/graphql/Mutation.java index 2fbc7ba2..98c92407 100644 --- a/src/main/java/com/diluv/api/graphql/Mutation.java +++ b/src/main/java/com/diluv/api/graphql/Mutation.java @@ -18,7 +18,8 @@ public class Mutation implements GraphQLMutationResolver { - public ProjectType addProjectType (String gameSlug, String projectTypeSlug, String projectTypeName, boolean isDefault, Long maxFileSize) { + public ProjectType addProjectType (String gameSlug, String projectTypeSlug, String projectTypeName, + boolean isDefault, Long maxFileSize) { return Confluencia.getTransaction(session -> { GamesEntity game = Confluencia.GAME.findOneBySlug(session, gameSlug); @@ -47,10 +48,12 @@ public ProjectType addProjectType (String gameSlug, String projectTypeSlug, Stri }); } - public ProjectType updateProjectType (String gameSlug, String projectTypeSlug, String projectTypeName, Boolean isDefault, Long maxFileSize) { + public ProjectType updateProjectType (String gameSlug, String projectTypeSlug, String projectTypeName, + Boolean isDefault, Long maxFileSize) { return Confluencia.getTransaction(session -> { - ProjectTypesEntity projectType = Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); + ProjectTypesEntity projectType = + Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); if (projectType == null) { throw new GraphQLException("Project Type doesn't exists"); } @@ -109,7 +112,8 @@ public Project reviewed (long projectId, boolean requestChange, String reason, D public ProjectType addTag (String gameSlug, String projectTypeSlug, String tagSlug, String tagName) { return Confluencia.getTransaction(session -> { - ProjectTypesEntity projectType = Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); + ProjectTypesEntity projectType = + Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); if (projectType == null) { throw new GraphQLException("Project Type doesn't exists"); } @@ -126,7 +130,8 @@ public ProjectType addLoader (String gameSlug, String projectTypeSlug, String lo return Confluencia.getTransaction(session -> { - ProjectTypesEntity projectType = Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); + ProjectTypesEntity projectType = + Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); if (projectType == null) { throw new GraphQLException("Project Type doesn't exists"); } diff --git a/src/main/java/com/diluv/api/graphql/ProjectResolver.java b/src/main/java/com/diluv/api/graphql/ProjectResolver.java index 1081b372..f5b6dc70 100644 --- a/src/main/java/com/diluv/api/graphql/ProjectResolver.java +++ b/src/main/java/com/diluv/api/graphql/ProjectResolver.java @@ -12,7 +12,8 @@ public List authors (Project project) { List authors = new ArrayList<>(); authors.add(new Author(new User(project.getEntity().getOwner()), "owner")); - authors.addAll(project.getEntity().getAuthors().stream().map(a -> new Author(new User(a.getUser()), a.getRole())).collect(Collectors.toList())); + authors.addAll(project.getEntity().getAuthors().stream().map(a -> + new Author(new User(a.getUser()), a.getRole())).collect(Collectors.toList())); return authors; } diff --git a/src/main/java/com/diluv/api/graphql/Query.java b/src/main/java/com/diluv/api/graphql/Query.java index 4ce8152a..424f5cd9 100644 --- a/src/main/java/com/diluv/api/graphql/Query.java +++ b/src/main/java/com/diluv/api/graphql/Query.java @@ -13,23 +13,21 @@ public class Query implements GraphQLQueryResolver { public List games (long page, int limit, String sort) { - return Confluencia.getTransaction(session -> { - return Confluencia.GAME.findAll(session, page, limit, getSortOrDefault(sort, ProjectSort.LIST, ProjectSort.NEW), "").stream().map(Game::new).collect(Collectors.toList()); - }); + return Confluencia.getTransaction(session -> + Confluencia.GAME.findAll(session, page, limit, getSortOrDefault(sort, ProjectSort.LIST, ProjectSort.NEW), + "").stream().map(Game::new).collect(Collectors.toList())); } public Game game (String gameSlug) { - return Confluencia.getTransaction(session -> { - return new Game(Confluencia.GAME.findOneBySlug(session, gameSlug)); - }); + return Confluencia.getTransaction(session -> new Game(Confluencia.GAME.findOneBySlug(session, gameSlug))); } public ProjectType projectType (String gameSlug, String projectTypeSlug) { - return Confluencia.getTransaction(session -> { - return new ProjectType(Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug)); - }); + return Confluencia.getTransaction(session -> + new ProjectType(Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug( + session, gameSlug, projectTypeSlug))); } public Project project (String gameSlug, String projectTypeSlug, String projectSlug) { @@ -48,9 +46,9 @@ public Project projectById (long projectId) { public List projectTypes (String gameSlug) { - return Confluencia.getTransaction(session -> { - return Confluencia.GAME.findAllProjectTypesByGameSlug(session, gameSlug).stream().map(ProjectType::new).collect(Collectors.toList()); - }); + return Confluencia.getTransaction(session -> + Confluencia.GAME.findAllProjectTypesByGameSlug(session, gameSlug).stream().map(ProjectType::new) + .collect(Collectors.toList())); } public List projects (String gameSlug, String projectTypeSlug, Long page, Integer limit, String sort) { @@ -58,18 +56,17 @@ public List projects (String gameSlug, String projectTypeSlug, Long pag long p = PaginationQuery.getPage(page); int l = PaginationQuery.getLimit(limit); Sort s = getSortOrDefault(sort, ProjectSort.LIST, ProjectSort.NEW); - return Confluencia.getTransaction(session -> { - return Confluencia.PROJECT.findAllByGameAndProjectType(session, gameSlug, projectTypeSlug, "", p, l, s).stream().map(Project::new).collect(Collectors.toList()); - }); + return Confluencia.getTransaction(session -> + Confluencia.PROJECT.findAllByGameAndProjectType(session, gameSlug, projectTypeSlug, "", p, l, s).stream() + .map(Project::new).collect(Collectors.toList())); } public List projectReviews (Long page, Integer limit) { long p = PaginationQuery.getPage(page); int l = PaginationQuery.getLimit(limit); - return Confluencia.getTransaction(session -> { - return Confluencia.PROJECT.findAllByReview(session, p, l).stream().map(Project::new).collect(Collectors.toList()); - }); + return Confluencia.getTransaction(session -> + Confluencia.PROJECT.findAllByReview(session, p, l).stream().map(Project::new).collect(Collectors.toList())); } public Sort getSortOrDefault (String sort, List sortList, Sort defaultSort) { diff --git a/src/main/java/com/diluv/api/provider/CustomAtomFeedProvider.java b/src/main/java/com/diluv/api/provider/CustomAtomFeedProvider.java index a1b5ebe7..3b945f0d 100644 --- a/src/main/java/com/diluv/api/provider/CustomAtomFeedProvider.java +++ b/src/main/java/com/diluv/api/provider/CustomAtomFeedProvider.java @@ -44,7 +44,9 @@ public class CustomAtomFeedProvider extends AtomFeedProvider { @Override - public void writeTo (Feed feed, Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { + public void writeTo (Feed feed, Class type, Type genericType, Annotation[] annotations, MediaType mediaType, + MultivaluedMap httpHeaders, OutputStream entityStream) + throws IOException, WebApplicationException { LogMessages.LOGGER.debugf("Provider : %s, Method : writeTo", getClass().getName()); JAXBContextFinder finder = getFinder(mediaType); diff --git a/src/main/java/com/diluv/api/provider/GsonProvider.java b/src/main/java/com/diluv/api/provider/GsonProvider.java index 9122ddd8..ef7588e9 100644 --- a/src/main/java/com/diluv/api/provider/GsonProvider.java +++ b/src/main/java/com/diluv/api/provider/GsonProvider.java @@ -33,7 +33,8 @@ public boolean isReadable (Class type, Type genericType, Annotation[] annotat } @Override - public Object readFrom (Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, InputStream entityStream) throws IOException { + public Object readFrom (Class type, Type genericType, Annotation[] annotations, MediaType mediaType, + MultivaluedMap httpHeaders, InputStream entityStream) throws IOException { try (InputStreamReader reader = new InputStreamReader(entityStream, StandardCharsets.UTF_8)) { @@ -54,7 +55,8 @@ public boolean isWriteable (Class type, Type genericType, Annotation[] annota } @Override - public void writeTo (Object object, Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, OutputStream entityStream) throws IOException { + public void writeTo (Object object, Class type, Type genericType, Annotation[] annotations, MediaType mediaType, + MultivaluedMap httpHeaders, OutputStream entityStream) throws IOException { try (OutputStreamWriter out = new OutputStreamWriter(entityStream, StandardCharsets.UTF_8)) { diff --git a/src/main/java/com/diluv/api/utils/Constants.java b/src/main/java/com/diluv/api/utils/Constants.java index 64ee6316..55ce2e85 100644 --- a/src/main/java/com/diluv/api/utils/Constants.java +++ b/src/main/java/com/diluv/api/utils/Constants.java @@ -52,7 +52,8 @@ public final class Constants { public static final String WEBSITE_URL = getValueOrDefault("WEBSITE_URL", "https://diluv.com"); public static final String DILUV_CDN_URL = getValueOrDefault("DILUV_CDN_URL", "https://cdn.diluv.com"); - public static final Set ALLOWED_ORIGINS = getValuesOrDefaultImmutable("ALLOWED_ORIGINS", Collections.singleton(WEBSITE_URL)); + public static final Set ALLOWED_ORIGINS = + getValuesOrDefaultImmutable("ALLOWED_ORIGINS", Collections.singleton(WEBSITE_URL)); public static final int BCRYPT_COST = getValueOrDefault("BCRYPT_COST", 14); public static final Salt SALT = getFileSalt(); @@ -161,9 +162,11 @@ public static ConfigurableJWTProcessor getJWTProcessor () { new JWTClaimsSet.Builder().issuer(AUTH_ISSUER).build(), new HashSet<>(Arrays.asList("sub", /*"iat",*/ "exp"/*, "jti"*/)))); - JWKSource keySource = new RemoteJWKSet<>(new URL(AUTH_BASE_URL + "/.well-known/openid-configuration/jwks")); + JWKSource keySource = + new RemoteJWKSet<>(new URL(AUTH_BASE_URL + "/.well-known/openid-configuration/jwks")); - JWSKeySelector keySelector = new JWSVerificationKeySelector<>(JWSAlgorithm.RS256, keySource); + JWSKeySelector keySelector = + new JWSVerificationKeySelector<>(JWSAlgorithm.RS256, keySource); jwtProcessor.setJWSKeySelector(keySelector); @@ -266,7 +269,10 @@ public static DataImage getGameLogoURL (String gameSlug) { if (isDevelopment()) { final String url = "https://images.placeholders.dev/?width=250&height=130"; - return new DataImage(new DataImageSource(url + "&text=fallback", "image/png"), new DataImageSource[]{new DataImageSource(url + "&text=" + gameSlug, "image/svg+xml")}); + return new DataImage( + new DataImageSource(url + "&text=fallback", "image/png"), + new DataImageSource[]{new DataImageSource(url + "&text=" + gameSlug, "image/svg+xml")} + ); } final String baseURL = String.format("%s/games/%s/logo", CDN_URL, gameSlug); @@ -276,14 +282,18 @@ public static DataImage getGameLogoURL (String gameSlug) { }); } - public static String getDiluvCDN (String gameSlug, String projectTypeSlug, long projectId, long fileId, String fileName) { + public static String getDiluvCDN (String gameSlug, String projectTypeSlug, long projectId, long fileId, + String fileName) { - return String.format("%s/games/%s/%s/%d/%d/%s", Constants.DILUV_CDN_URL, gameSlug, projectTypeSlug, projectId, fileId, fileName); + return String.format( + "%s/games/%s/%s/%d/%d/%s", Constants.DILUV_CDN_URL, gameSlug, projectTypeSlug, projectId, fileId, fileName); } - public static URI getNodeCDNFileURL (String gameSlug, String projectTypeSlug, long projectId, long fileId, String fileName) throws URISyntaxException { + public static URI getNodeCDNFileURL (String gameSlug, String projectTypeSlug, long projectId, long fileId, + String fileName) throws URISyntaxException { - return new URI(String.format("%s/games/%s/%s/%d/%d/%s", Constants.CDN_URL, gameSlug, projectTypeSlug, projectId, fileId, fileName)); + return new URI(String.format( + "%s/games/%s/%s/%d/%d/%s", Constants.CDN_URL, gameSlug, projectTypeSlug, projectId, fileId, fileName)); } public static Salt getSalt () { diff --git a/src/main/java/com/diluv/api/utils/FileUtil.java b/src/main/java/com/diluv/api/utils/FileUtil.java index d00c47b9..0b50650d 100644 --- a/src/main/java/com/diluv/api/utils/FileUtil.java +++ b/src/main/java/com/diluv/api/utils/FileUtil.java @@ -19,7 +19,8 @@ public class FileUtil { public static String writeFile (InputStream input, long limit, File destination) { - try (DigestInputStream hashStream = new DigestInputStream(input, new SHA3.Digest512()); LimitedInputStream in = new LimitedInputStream(hashStream, limit)) { + try (DigestInputStream hashStream = new DigestInputStream(input, new SHA3.Digest512()); + LimitedInputStream in = new LimitedInputStream(hashStream, limit)) { FileUtils.copyInputStreamToFile(in, destination); return Hex.toHexString(hashStream.getMessageDigest().digest()); @@ -49,6 +50,7 @@ public static File getTempFile (long project, String fileName) { public static File getOutputLocation (String game, String type, long project, long id, String inputFileName) { - return new File(Constants.PROCESSING_FOLDER, game + "/" + type + "/" + project + "/" + id + "/" + inputFileName); + return new File( + Constants.PROCESSING_FOLDER, game + "/" + type + "/" + project + "/" + id + "/" + inputFileName); } } \ No newline at end of file diff --git a/src/main/java/com/diluv/api/utils/auth/JWTUtil.java b/src/main/java/com/diluv/api/utils/auth/JWTUtil.java index b948c621..f4d1b926 100644 --- a/src/main/java/com/diluv/api/utils/auth/JWTUtil.java +++ b/src/main/java/com/diluv/api/utils/auth/JWTUtil.java @@ -71,7 +71,8 @@ public static Token getToken (String rawToken) { return Confluencia.getTransaction(session -> { byte[] sha256 = DigestUtils.sha256(token + ":" + TOKEN_TYPE); String key = Base64.getEncoder().encodeToString(sha256); - PersistedGrantsEntity record = Confluencia.SECURITY.findPersistedGrantByKeyAndType(session, key, TOKEN_TYPE); + PersistedGrantsEntity record = + Confluencia.SECURITY.findPersistedGrantByKeyAndType(session, key, TOKEN_TYPE); if (record == null) { return new ErrorToken(ErrorMessage.USER_INVALID_TOKEN.respond("API token not found")); } diff --git a/src/main/java/com/diluv/api/utils/auth/Validator.java b/src/main/java/com/diluv/api/utils/auth/Validator.java index 05c5ad70..537bf584 100644 --- a/src/main/java/com/diluv/api/utils/auth/Validator.java +++ b/src/main/java/com/diluv/api/utils/auth/Validator.java @@ -30,7 +30,9 @@ public class Validator { /** * A RegEx pattern for matching valid semantic versions according to the https://semver.org guidelines. */ + //CHECKSTYLE:OFF private static final Pattern SEM_VER = Pattern.compile("^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"); + //CHECKSTYLE:ON private static final List DEP_TYPES = Arrays.asList("required", "optional", "incompatible"); public static boolean validateEmail (String email) { @@ -55,7 +57,8 @@ public static boolean validateProjectSummary (String summary) { public static boolean validateProjectDescription (String description) { - return !GenericValidator.isBlankOrNull(description) && description.length() <= 10000 && description.length() >= 50; + return !GenericValidator.isBlankOrNull(description) && description.length() <= 10000 + && description.length() >= 50; } public static boolean validateProjectFileChangelog (String changelog) { @@ -63,8 +66,10 @@ public static boolean validateProjectFileChangelog (String changelog) { return changelog == null || changelog.length() <= 2000; } - private static final Set VALID_RELEASE_TYPES = Collections.unmodifiableSet(new HashSet<>(Arrays.asList("release", "beta", "alpha"))); - private static final Set VALID_CLASSIFIERS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList("binary"))); + private static final Set VALID_RELEASE_TYPES = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList("release", "beta", "alpha"))); + private static final Set VALID_CLASSIFIERS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList("binary"))); public static boolean validateReleaseType (String releaseType) { @@ -76,7 +81,8 @@ public static boolean validateClassifier (String classifier) { return classifier != null && VALID_CLASSIFIERS.contains(classifier.toLowerCase()); } - public static List validateGameVersions (GamesEntity game, List gameVersions) throws MismatchException { + public static List validateGameVersions (GamesEntity game, List gameVersions) + throws MismatchException { final List gameVersionRecords = new ArrayList<>(); if (gameVersions != null && !gameVersions.isEmpty()) { @@ -90,19 +96,23 @@ public static List validateGameVersions (GamesEntity game, L } } if (!versionNotFound.isEmpty()) { - throw new MismatchException(ErrorMessage.PROJECT_FILE_INVALID_GAME_VERSION, String.join(", ", versionNotFound)); + throw new MismatchException(ErrorMessage.PROJECT_FILE_INVALID_GAME_VERSION, + String.join(", ", versionNotFound)); } } return gameVersionRecords; } - public static List validateDependencies (Session session, long projectId, List dependencies) throws NumberFormatException, MismatchException { + public static List validateDependencies (Session session, long projectId, + List dependencies) + throws NumberFormatException, MismatchException { if (dependencies != null && !dependencies.isEmpty()) { Set projectIds = new HashSet<>(); for (FileDependency dependency : dependencies) { if (dependency.projectId == null) { - throw new MismatchException(ErrorMessage.PROJECT_FILE_INVALID_DEPENDENCY_ID, "Dependency projectId can't be null"); + throw new MismatchException(ErrorMessage.PROJECT_FILE_INVALID_DEPENDENCY_ID, + "Dependency projectId can't be null"); } if (projectId == dependency.projectId) { throw new MismatchException(ErrorMessage.PROJECT_FILE_INVALID_DEPEND_SELF, null); @@ -117,7 +127,8 @@ public static List validateDependencies (Session if (projects.size() != dependencies.size()) { projectIds.removeAll(projects); String missing = projectIds.stream().map(Object::toString).collect(Collectors.joining(", ")); - throw new MismatchException(ErrorMessage.PROJECT_FILE_INVALID_DEPENDENCY_ID, "Project ID not found: " + missing); + throw new MismatchException(ErrorMessage.PROJECT_FILE_INVALID_DEPENDENCY_ID, + "Project ID not found: " + missing); } List projectFile = new ArrayList<>(); @@ -166,7 +177,9 @@ public static boolean validateVersion (String version) { return version != null && version.length() <= 20 && SEM_VER.matcher(version).matches(); } - public static List validateProjectTypeLoaders (ProjectTypesEntity projectType, List loaders) throws MismatchException { + public static List validateProjectTypeLoaders (ProjectTypesEntity projectType, + List loaders) + throws MismatchException { final List loadersRecords = new ArrayList<>(); if (loaders != null && !loaders.isEmpty()) { @@ -180,7 +193,8 @@ public static List validateProjectTypeLoaders (Project } } if (!loadersNotFound.isEmpty()) { - throw new MismatchException(ErrorMessage.PROJECT_FILE_INVALID_LOADER, String.join(", ", loadersNotFound)); + throw new MismatchException(ErrorMessage.PROJECT_FILE_INVALID_LOADER, + String.join(", ", loadersNotFound)); } } return loadersRecords; diff --git a/src/main/java/com/diluv/api/utils/error/ErrorMessage.java b/src/main/java/com/diluv/api/utils/error/ErrorMessage.java index 67a86d41..5b57112a 100644 --- a/src/main/java/com/diluv/api/utils/error/ErrorMessage.java +++ b/src/main/java/com/diluv/api/utils/error/ErrorMessage.java @@ -12,36 +12,54 @@ public enum ErrorMessage { // User Errors USER_INVALID_TOKEN(UNAUTHORIZED, "invalid_token", "The token is invalid."), USER_REQUIRED_TOKEN(UNAUTHORIZED, "required_token", "A token is required for this request."), - USER_NOT_AUTHORIZED(UNAUTHORIZED, "user_unauthorized", "The user is not authorized to make this request."), - USER_INVALID_DISPLAY_NAME(BAD_REQUEST, "invalid_display_name", "The display name for the user is not valid. Can only change the case of the username"), - USER_INVALID_PASSWORD(BAD_REQUEST, "invalid_password", "The password is invalid, must match the current password."), - USER_INVALID_NEW_PASSWORD(BAD_REQUEST, "invalid_new_password", "The password is invalid, password must be between 8 and 70 characters."), + USER_NOT_AUTHORIZED(UNAUTHORIZED, "user_unauthorized", + "The user is not authorized to make this request."), + USER_INVALID_DISPLAY_NAME(BAD_REQUEST, "invalid_display_name", + "The display name for the user is not valid. Can only change the case of the username"), + USER_INVALID_PASSWORD(BAD_REQUEST, "invalid_password", + "The password is invalid, must match the current password."), + USER_INVALID_NEW_PASSWORD(BAD_REQUEST, "invalid_new_password", + "The password is invalid, password must be between 8 and 70 characters."), USER_INVALID_EMAIL(BAD_REQUEST, "invalid_email", "The email is not valid."), USER_INVALID_MFA(BAD_REQUEST, "invalid_mfa", "MFA is required for the request."), - USER_INVALID_MFA_SECRET(BAD_REQUEST, "invalid_mfa_secret", "The MFA secret is required, and must be base64."), - USER_INVALID_MFA_AND_MFA_SECRET(BAD_REQUEST, "invalid_mfa_and_mfa_secret", "The MFA is invalid for."), + USER_INVALID_MFA_SECRET(BAD_REQUEST, "invalid_mfa_secret", + "The MFA secret is required, and must be base64."), + USER_INVALID_MFA_AND_MFA_SECRET(BAD_REQUEST, "invalid_mfa_and_mfa_secret", + "The MFA is invalid for."), USER_TAKEN_EMAIL(BAD_REQUEST, "taken_email", "The email is already taken."), // Project Errors PROJECT_INVALID_NAME(BAD_REQUEST, "invalid_name", "The name is not valid"), - INVALID_IMAGE(BAD_REQUEST, "invalid_image", "The image is not valid, please verify you are sending an image."), + INVALID_IMAGE(BAD_REQUEST, "invalid_image", + "The image is not valid, please verify you are sending an image."), PROJECT_INVALID_TAGS(BAD_REQUEST, "invalid_tags", null), - PROJECT_INVALID_SUMMARY(BAD_REQUEST, "invalid_summary", "The summary must be less then 250 characters"), - PROJECT_INVALID_DESCRIPTION(BAD_REQUEST, "invalid_description", "The description must be greater then 50 characters but less then 10000."), + PROJECT_INVALID_SUMMARY(BAD_REQUEST, "invalid_summary", + "The summary must be less then 250 characters"), + PROJECT_INVALID_DESCRIPTION(BAD_REQUEST, "invalid_description", + "The description must be greater then 50 characters but less then 10000."), PROJECT_TAKEN_SLUG(BAD_REQUEST, "project.taken.slug", ""), - PROJECT_FILE_INVALID_DEPEND_SELF(BAD_REQUEST, "invalid_depend_self", "The file can't depend on itself."), + PROJECT_FILE_INVALID_DEPEND_SELF(BAD_REQUEST, "invalid_depend_self", + "The file can't depend on itself."), PROJECT_FILE_INVALID_DEPENDENCY_ID(BAD_REQUEST, "invalid_dependency_id", null), - PROJECT_FILE_INVALID_DEPENDENCY_TYPE(BAD_REQUEST, "invalid_dependency_type", "Dependency type must be required, optional or incompatible"), - PROJECT_FILE_INVALID_CHANGELOG(BAD_REQUEST, "invalid_changelog", "The changelog is not valid, must be null or below 2000 characters."), - PROJECT_FILE_INVALID_FILENAME(BAD_REQUEST, "invalid_filename", "The file name is invalid, must be allowed by the project type"), - PROJECT_FILE_INVALID_FILE(BAD_REQUEST, "invalid_file", "File is invalid, cannot be null"), - PROJECT_FILE_INVALID_RELEASE_TYPE(BAD_REQUEST, "invalid_release_type", "Must be release, beta or alpha"), - PROJECT_FILE_INVALID_CLASSIFIER(BAD_REQUEST, "invalid_classifier", "Must be binary"), - PROJECT_FILE_INVALID_VERSION(BAD_REQUEST, "invalid_version", "Must specify a semver version at most 20 characters."), + PROJECT_FILE_INVALID_DEPENDENCY_TYPE(BAD_REQUEST, "invalid_dependency_type", + "Dependency type must be required, optional or incompatible"), + PROJECT_FILE_INVALID_CHANGELOG(BAD_REQUEST, "invalid_changelog", + "The changelog is not valid, must be null or below 2000 characters."), + PROJECT_FILE_INVALID_FILENAME(BAD_REQUEST, "invalid_filename", + "The file name is invalid, must be allowed by the project type"), + PROJECT_FILE_INVALID_FILE(BAD_REQUEST, "invalid_file", + "File is invalid, cannot be null"), + PROJECT_FILE_INVALID_RELEASE_TYPE(BAD_REQUEST, "invalid_release_type", + "Must be release, beta or alpha"), + PROJECT_FILE_INVALID_CLASSIFIER(BAD_REQUEST, "invalid_classifier", + "Must be binary"), + PROJECT_FILE_INVALID_VERSION(BAD_REQUEST, "invalid_version", + "Must specify a semver version at most 20 characters."), PROJECT_FILE_INVALID_GAME_VERSION(BAD_REQUEST, "invalid_game_version", null), PROJECT_FILE_INVALID_LOADER(BAD_REQUEST, "invalid_loader", null), - PROJECT_FILE_TAKEN_VERSION(BAD_REQUEST, "project_file.taken.version", "The file version is taken, must be unique"), + PROJECT_FILE_TAKEN_VERSION(BAD_REQUEST, "project_file.taken.version", + "The file version is taken, must be unique"), NOT_FOUND_GAME(BAD_REQUEST, "notfound.game", "The game was the not found."), NOT_FOUND_PROJECT(BAD_REQUEST, "notfound.project", "The project was not found."), @@ -57,7 +75,8 @@ public enum ErrorMessage { FILE_NOT_FOUND(NOT_FOUND, "file.404", "The file was not found."), ENDPOINT_NOT_FOUND(NOT_FOUND, "generic.404", "The endpoint was not found."), - THROWABLE(INTERNAL_SERVER_ERROR, "generic.throwable", "The request had an error, please try again later."); + THROWABLE(INTERNAL_SERVER_ERROR, "generic.throwable", + "The request had an error, please try again later."); private final ErrorType type; private final String uniqueId; @@ -87,11 +106,13 @@ public String getMessage () { public final Response respond (String message) { - return Response.status(this.type.code).entity(new ErrorResponse(this.type.getError(), this.uniqueId, message)).build(); + return Response.status(this.type.code) + .entity(new ErrorResponse(this.type.getError(), this.uniqueId, message)).build(); } public final Response respond () { - return Response.status(this.type.code).entity(new ErrorResponse(this.type.getError(), this.uniqueId, this.message)).build(); + return Response.status(this.type.code) + .entity(new ErrorResponse(this.type.getError(), this.uniqueId, this.message)).build(); } } diff --git a/src/main/java/com/diluv/api/utils/permissions/ProjectPermissions.java b/src/main/java/com/diluv/api/utils/permissions/ProjectPermissions.java index be79c78e..cf039335 100644 --- a/src/main/java/com/diluv/api/utils/permissions/ProjectPermissions.java +++ b/src/main/java/com/diluv/api/utils/permissions/ProjectPermissions.java @@ -31,7 +31,8 @@ private String getName () { return this.name; } - public static boolean hasPermission (ProjectsEntity project, @Nullable Token token, ProjectPermissions permissions) { + public static boolean hasPermission (ProjectsEntity project, @Nullable Token token, + ProjectPermissions permissions) { if (token == null) { return false; @@ -50,11 +51,14 @@ public static List getAuthorizedUserPermissions (ProjectsEntity project, return getSubsetPermissions(getAllPermissions(), token); } - final Optional record = project.getAuthors().stream().filter(r -> r.getUser().getId() == token.getUserId()).findAny(); + final Optional record = + project.getAuthors().stream().filter(r -> r.getUser().getId() == token.getUserId()).findAny(); if (record.isPresent()) { ProjectAuthorsEntity r = record.get(); - final List permissions = r.getPermissions().stream().map(ProjectAuthorPermissionsEntity::getPermission).collect(Collectors.toList()); + final List permissions = + r.getPermissions().stream().map(ProjectAuthorPermissionsEntity::getPermission) + .collect(Collectors.toList()); return getSubsetPermissions(permissions, token); } diff --git a/src/main/java/com/diluv/api/v1/GenericAPI.java b/src/main/java/com/diluv/api/v1/GenericAPI.java index 000d8c28..c639f36e 100644 --- a/src/main/java/com/diluv/api/v1/GenericAPI.java +++ b/src/main/java/com/diluv/api/v1/GenericAPI.java @@ -35,11 +35,16 @@ public Response ping () { @GET @Path("/download/{gameSlug}/{projectTypeSlug}/{projectId}/{fileId}/{projectFileName}") - public Response getProjectFileDownloads (@HeaderParam("CF-Connecting-IP") String ip, @PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @PathParam("projectId") long projectId, @PathParam("fileId") long fileId, @PathParam("projectFileName") String projectFileName) { + public Response getProjectFileDownloads (@HeaderParam("CF-Connecting-IP") String ip, + @PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug, + @PathParam("projectId") long projectId, @PathParam("fileId") long fileId, + @PathParam("projectFileName") String projectFileName) { return Confluencia.getTransaction(session -> { try { - final URI uri = Constants.getNodeCDNFileURL(gameSlug, projectTypeSlug, projectId, fileId, projectFileName); + final URI uri = + Constants.getNodeCDNFileURL(gameSlug, projectTypeSlug, projectId, fileId, projectFileName); if (ip == null) { return Response.temporaryRedirect(uri).build(); diff --git a/src/main/java/com/diluv/api/v1/admin/AdminAPI.java b/src/main/java/com/diluv/api/v1/admin/AdminAPI.java index 8036e61d..8981c6db 100644 --- a/src/main/java/com/diluv/api/v1/admin/AdminAPI.java +++ b/src/main/java/com/diluv/api/v1/admin/AdminAPI.java @@ -238,14 +238,16 @@ public Response patchGames (@HeaderParam("Authorization") Token token, @Multipar @GET @Path("/graphql") - public Response getGraphQL (@HeaderParam("Authorization") Token token, @Context HttpServletRequest req, @Context HttpServletResponse resp) { + public Response getGraphQL (@HeaderParam("Authorization") Token token, @Context HttpServletRequest req, + @Context HttpServletResponse resp) { return request(token, req, resp); } @POST @Path("/graphql") - public Response postGraphQL (@HeaderParam("Authorization") Token token, @Context HttpServletRequest req, @Context HttpServletResponse resp) { + public Response postGraphQL (@HeaderParam("Authorization") Token token, @Context HttpServletRequest req, + @Context HttpServletResponse resp) { return request(token, req, resp); } diff --git a/src/main/java/com/diluv/api/v1/games/GamesAPI.java b/src/main/java/com/diluv/api/v1/games/GamesAPI.java index 0bd42a64..9b536ae9 100644 --- a/src/main/java/com/diluv/api/v1/games/GamesAPI.java +++ b/src/main/java/com/diluv/api/v1/games/GamesAPI.java @@ -45,8 +45,8 @@ import com.diluv.api.v1.utilities.ProjectService; import com.diluv.confluencia.Confluencia; import com.diluv.confluencia.database.record.GamesEntity; -import com.diluv.confluencia.database.record.ProjectReviewEntity; import com.diluv.confluencia.database.record.ProjectFilesEntity; +import com.diluv.confluencia.database.record.ProjectReviewEntity; import com.diluv.confluencia.database.record.ProjectTagsEntity; import com.diluv.confluencia.database.record.ProjectTypesEntity; import com.diluv.confluencia.database.record.ProjectsEntity; @@ -63,8 +63,10 @@ @Produces(MediaType.APPLICATION_JSON) public class GamesAPI { - public static final List GAME_SORTS = GameSort.LIST.stream().map(DataSort::new).collect(Collectors.toList()); - public static final List PROJECT_SORTS = ProjectSort.LIST.stream().map(DataSort::new).collect(Collectors.toList()); + public static final List GAME_SORTS = + GameSort.LIST.stream().map(DataSort::new).collect(Collectors.toList()); + public static final List PROJECT_SORTS = + ProjectSort.LIST.stream().map(DataSort::new).collect(Collectors.toList()); private final Slugify slugify = new Slugify(); @@ -109,10 +111,12 @@ public Response getGame (@PathParam("gameSlug") String gameSlug) { @GET @Path("/{gameSlug}/{projectTypeSlug}") - public Response getProjectType (@PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug) { + public Response getProjectType (@PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug) { return Confluencia.getTransaction(session -> { - final ProjectTypesEntity projectTypesRecords = Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); + final ProjectTypesEntity projectTypesRecords = + Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); if (projectTypesRecords == null) { @@ -124,14 +128,16 @@ public Response getProjectType (@PathParam("gameSlug") String gameSlug, @PathPar return ErrorMessage.NOT_FOUND_PROJECT_TYPE.respond(); } - final long projectCount = Confluencia.PROJECT.countAllByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); + final long projectCount = + Confluencia.PROJECT.countAllByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); return ResponseUtil.successResponse(new DataProjectType(projectTypesRecords, projectCount)); }); } @GET @Path("/{gameSlug}/{projectTypeSlug}/projects") - public Response getProjects (@PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @Query ProjectQuery query) { + public Response getProjects (@PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug, @Query ProjectQuery query) { final long page = query.getPage(); final int limit = query.getLimit(); @@ -143,7 +149,8 @@ public Response getProjects (@PathParam("gameSlug") String gameSlug, @PathParam( return Confluencia.getTransaction(session -> { - final List projects = Confluencia.PROJECT.findAllByGameAndProjectType(session, gameSlug, projectTypeSlug, search, page, limit, sort, versions, tags, loaders); + final List projects = Confluencia.PROJECT.findAllByGameAndProjectType( + session, gameSlug, projectTypeSlug, search, page, limit, sort, versions, tags, loaders); if (projects.isEmpty()) { @@ -152,13 +159,15 @@ public Response getProjects (@PathParam("gameSlug") String gameSlug, @PathParam( return ErrorMessage.NOT_FOUND_GAME.respond(); } - if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug) == null) { + if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug( + session, gameSlug, projectTypeSlug) == null) { return ErrorMessage.NOT_FOUND_PROJECT_TYPE.respond(); } } - final List dataProjects = projects.stream().map(DataBaseProject::new).collect(Collectors.toList()); + final List dataProjects = + projects.stream().map(DataBaseProject::new).collect(Collectors.toList()); return ResponseUtil.successResponse(dataProjects); }); @@ -167,11 +176,12 @@ public Response getProjects (@PathParam("gameSlug") String gameSlug, @PathParam( @GET @Path("/{gameSlug}/{projectTypeSlug}/feed.atom") @Produces(MediaType.APPLICATION_ATOM_XML) - public Response getProjectFeed (@PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug) { + public Response getProjectFeed (@PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug) { - final List projects = Confluencia.getTransaction(session -> { - return Confluencia.PROJECT.findAllByGameAndProjectType(session, gameSlug, projectTypeSlug, "", 1, 25, ProjectSort.NEW); - }); + final List projects = Confluencia.getTransaction(session -> + Confluencia.PROJECT.findAllByGameAndProjectType( + session, gameSlug, projectTypeSlug, "", 1, 25, ProjectSort.NEW)); if (projects.isEmpty()) { return Response.status(ErrorType.BAD_REQUEST.getCode()).build(); @@ -202,11 +212,14 @@ public Response getProjectFeed (@PathParam("gameSlug") String gameSlug, @PathPar @GET @Path("/{gameSlug}/{projectTypeSlug}/{projectSlug}") - public Response getProject (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @PathParam("projectSlug") String projectSlug) { + public Response getProject (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug, + @PathParam("projectSlug") String projectSlug) { return Confluencia.getTransaction(session -> { try { - final DataProject project = ProjectService.getDataProject(session, gameSlug, projectTypeSlug, projectSlug, token); + final DataProject project = + ProjectService.getDataProject(session, gameSlug, projectTypeSlug, projectSlug, token); return ResponseUtil.successResponse(project); } catch (ResponseException e) { @@ -218,7 +231,9 @@ public Response getProject (@HeaderParam("Authorization") Token token, @PathPara @PATCH @Path("/{gameSlug}/{projectTypeSlug}/{projectSlug}") - public Response patchProject (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @PathParam("projectSlug") String projectSlug, @MultipartForm ProjectForm form) { + public Response patchProject (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug, + @PathParam("projectSlug") String projectSlug, @MultipartForm ProjectForm form) { if (token == null) { return ErrorMessage.USER_REQUIRED_TOKEN.respond(); @@ -234,11 +249,13 @@ public Response patchProject (@HeaderParam("Authorization") Token token, @PathPa return ErrorMessage.NOT_FOUND_GAME.respond(); } - if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug) == null) { + if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug) + == null) { return ErrorMessage.NOT_FOUND_PROJECT_TYPE.respond(); } - ProjectsEntity project = Confluencia.PROJECT.findOneProject(session, gameSlug, projectTypeSlug, projectSlug); + ProjectsEntity project = + Confluencia.PROJECT.findOneProject(session, gameSlug, projectTypeSlug, projectSlug); if (project == null) { return ErrorMessage.NOT_FOUND_PROJECT.respond(); } @@ -319,7 +336,9 @@ public Response patchProject (@HeaderParam("Authorization") Token token, @PathPa return ErrorMessage.INVALID_IMAGE.respond(); } - final File file = new File(Constants.CDN_FOLDER, String.format("games/%s/%s/%d/logo.png", gameSlug, projectTypeSlug, project.getId())); + final File file = new File(Constants.CDN_FOLDER, + String.format("games/%s/%s/%d/logo.png", gameSlug, projectTypeSlug, project.getId())); + if (!ImageUtil.savePNG(image, file)) { // return ErrorMessage.ERROR_SAVING_IMAGE.respond(); return ErrorMessage.THROWABLE.respond(); @@ -333,17 +352,23 @@ public Response patchProject (@HeaderParam("Authorization") Token token, @PathPa @GET @Path("/{gameSlug}/{projectTypeSlug}/{projectSlug}/feed.atom") @Produces(MediaType.APPLICATION_ATOM_XML) - public Response getProjectFileFeed (@PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @PathParam("projectSlug") String projectSlug) { + public Response getProjectFileFeed (@PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug, + @PathParam("projectSlug") String projectSlug) { return Confluencia.getTransaction(session -> { - final ProjectsEntity project = Confluencia.PROJECT.findOneProject(session, gameSlug, projectTypeSlug, projectSlug); + final ProjectsEntity project = Confluencia.PROJECT.findOneProject( + session, gameSlug, projectTypeSlug, projectSlug); + if (project == null) { return Response.status(ErrorType.BAD_REQUEST.getCode()).build(); } - final List projectFiles = Confluencia.FILE.findAllByProject(session, project, false, 1, 25, ProjectFileSort.NEW, null); + final List projectFiles = Confluencia.FILE.findAllByProject( + session, project, false, 1, 25, ProjectFileSort.NEW, null); - final String baseUrl = String.format("%s/games/%s/%s/%s", Constants.WEBSITE_URL, gameSlug, projectTypeSlug, projectSlug); + final String baseUrl = + String.format("%s/games/%s/%s/%s", Constants.WEBSITE_URL, gameSlug, projectTypeSlug, projectSlug); Feed feed = new Feed(); feed.setId(URI.create(baseUrl + "/feed.atom")); feed.getLinks().add(new Link("self", baseUrl + "/")); @@ -367,7 +392,9 @@ public Response getProjectFileFeed (@PathParam("gameSlug") String gameSlug, @Pat @GET @Path("/{gameSlug}/{projectTypeSlug}/{projectSlug}/files") - public Response getProjectFiles (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @PathParam("projectSlug") String projectSlug, @Query ProjectFileQuery query) { + public Response getProjectFiles (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug, + @PathParam("projectSlug") String projectSlug, @Query ProjectFileQuery query) { long page = query.getPage(); int limit = query.getLimit(); @@ -375,26 +402,30 @@ public Response getProjectFiles (@HeaderParam("Authorization") Token token, @Pat String gameVersion = query.getGameVersion(); return Confluencia.getTransaction(session -> { - final ProjectsEntity project = Confluencia.PROJECT.findOneProject(session, gameSlug, projectTypeSlug, projectSlug); + final ProjectsEntity project = + Confluencia.PROJECT.findOneProject(session, gameSlug, projectTypeSlug, projectSlug); if (project == null) { if (Confluencia.GAME.findOneBySlug(session, gameSlug) == null) { return ErrorMessage.NOT_FOUND_GAME.respond(); } - if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug) == null) { + if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug( + session, gameSlug, projectTypeSlug) == null) { return ErrorMessage.NOT_FOUND_PROJECT_TYPE.respond(); } return ErrorMessage.NOT_FOUND_PROJECT.respond(); } - boolean authorized = token != null && ProjectPermissions.hasPermission(project, token, ProjectPermissions.FILE_UPLOAD); - final List projectFileRecords = Confluencia.FILE.findAllByProject(session, project, authorized, page, limit, sort, gameVersion); + boolean authorized = ProjectPermissions.hasPermission(project, token, ProjectPermissions.FILE_UPLOAD); + final List projectFileRecords = + Confluencia.FILE.findAllByProject(session, project, authorized, page, limit, sort, gameVersion); final List projectFiles = projectFileRecords.stream().map(record -> record.isReleased() ? new DataProjectFileAvailable(record, gameSlug, projectTypeSlug, projectSlug) : - new DataProjectFileInQueue(record, gameSlug, projectTypeSlug, projectSlug)).collect(Collectors.toList()); + new DataProjectFileInQueue(record, gameSlug, projectTypeSlug, projectSlug)) + .collect(Collectors.toList()); return ResponseUtil.successResponse(projectFiles); }); } @@ -402,7 +433,9 @@ public Response getProjectFiles (@HeaderParam("Authorization") Token token, @Pat @POST @Path("/{gameSlug}/{projectTypeSlug}") @Consumes(MediaType.MULTIPART_FORM_DATA) - public Response postProject (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @MultipartForm ProjectForm form) { + public Response postProject (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug, + @MultipartForm ProjectForm form) { if (token == null) { return ErrorMessage.USER_REQUIRED_TOKEN.respond(); @@ -414,7 +447,8 @@ public Response postProject (@HeaderParam("Authorization") Token token, @PathPar return Confluencia.getTransaction(session -> { - ProjectTypesEntity projectType = Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); + ProjectTypesEntity projectType = + Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); if (projectType == null) { if (Confluencia.GAME.findOneBySlug(session, gameSlug) == null) { @@ -481,7 +515,8 @@ public Response postProject (@HeaderParam("Authorization") Token token, @PathPar session.flush(); session.refresh(project); - final File file = new File(Constants.CDN_FOLDER, String.format("games/%s/%s/%d/logo.png", gameSlug, projectTypeSlug, project.getId())); + final File file = new File(Constants.CDN_FOLDER, + String.format("games/%s/%s/%d/logo.png", gameSlug, projectTypeSlug, project.getId())); if (!ImageUtil.savePNG(image, file)) { // return ErrorMessage.ERROR_SAVING_IMAGE.respond(); return ErrorMessage.THROWABLE.respond(); diff --git a/src/main/java/com/diluv/api/v1/news/NewsAPI.java b/src/main/java/com/diluv/api/v1/news/NewsAPI.java index fdcd8a79..80e6d393 100644 --- a/src/main/java/com/diluv/api/v1/news/NewsAPI.java +++ b/src/main/java/com/diluv/api/v1/news/NewsAPI.java @@ -37,7 +37,8 @@ public Response getNews (@Query NewsQuery query) { return Confluencia.getTransaction(session -> { final List newsRecords = Confluencia.NEWS.findAll(session, page, limit, sort); - final List newsPosts = newsRecords.stream().map(DataNewsPost::new).collect(Collectors.toList()); + final List newsPosts = + newsRecords.stream().map(DataNewsPost::new).collect(Collectors.toList()); return ResponseUtil.successResponse(newsPosts); }); diff --git a/src/main/java/com/diluv/api/v1/projects/ProjectsAPI.java b/src/main/java/com/diluv/api/v1/projects/ProjectsAPI.java index d1b47e6f..3d06e9e0 100644 --- a/src/main/java/com/diluv/api/v1/projects/ProjectsAPI.java +++ b/src/main/java/com/diluv/api/v1/projects/ProjectsAPI.java @@ -73,7 +73,8 @@ public Response getProject (@HeaderParam("Authorization") Token token, @PathPara @POST @Path("/{id}/files") @Consumes(MediaType.MULTIPART_FORM_DATA) - public Response postProjectFile (@HeaderParam("Authorization") Token token, @PathParam("id") Long projectId, @MultipartForm ProjectFileUploadForm form) { + public Response postProjectFile (@HeaderParam("Authorization") Token token, @PathParam("id") Long projectId, + @MultipartForm ProjectFileUploadForm form) { if (token == null) { return ErrorMessage.USER_REQUIRED_TOKEN.respond(); @@ -229,7 +230,8 @@ public Response postProjectFile (@HeaderParam("Authorization") Token token, @Pat final String gameSlug = project.getGame().getSlug(); final String projectTypeSlug = project.getProjectType().getSlug(); - File destination = FileUtil.getOutputLocation(gameSlug, projectTypeSlug, project.getId(), projectFile.getId(), fileName); + File destination = + FileUtil.getOutputLocation(gameSlug, projectTypeSlug, project.getId(), projectFile.getId(), fileName); destination.getParentFile().mkdirs(); try { FileUtils.copyFile(tempFile, destination); @@ -244,7 +246,8 @@ public Response postProjectFile (@HeaderParam("Authorization") Token token, @Pat tempFile.getParentFile().delete(); } - return ResponseUtil.successResponse(new DataProjectFileInQueue(projectFile, gameSlug, projectTypeSlug, project.getSlug())); + return ResponseUtil.successResponse( + new DataProjectFileInQueue(projectFile, gameSlug, projectTypeSlug, project.getSlug())); }); } @@ -257,9 +260,11 @@ public Response getProjectByHash (@PathParam("hash") String projectFileHash, @Qu final Sort sort = query.getSort(ProjectSort.POPULAR); return Confluencia.getTransaction(session -> { - final List projects = Confluencia.PROJECT.findProjectsByProjectFileHash(session, projectFileHash, page, limit, sort); + final List projects = + Confluencia.PROJECT.findProjectsByProjectFileHash(session, projectFileHash, page, limit, sort); - final List dataProjects = projects.stream().map(DataBaseProject::new).collect(Collectors.toList()); + final List dataProjects = projects.stream().map(DataBaseProject::new) + .collect(Collectors.toList()); return ResponseUtil.successResponse(dataProjects); }); } diff --git a/src/main/java/com/diluv/api/v1/site/SiteAPI.java b/src/main/java/com/diluv/api/v1/site/SiteAPI.java index 6db7cf0f..19b8ef6c 100644 --- a/src/main/java/com/diluv/api/v1/site/SiteAPI.java +++ b/src/main/java/com/diluv/api/v1/site/SiteAPI.java @@ -66,7 +66,8 @@ public Response getIndex () { final long userCount = Confluencia.USER.countAll(session); final long gameCount = Confluencia.GAME.countAllBySearch(session, ""); final long projectTypeCount = Confluencia.GAME.countAllProjectTypes(session); - return ResponseUtil.successResponse(new DataSiteIndex(games, projectCount, userCount, gameCount, projectTypeCount)); + return ResponseUtil.successResponse( + new DataSiteIndex(games, projectCount, userCount, gameCount, projectTypeCount)); }); } @@ -106,7 +107,8 @@ public Response getGameDefaultType (@PathParam("gameSlug") String gameSlug) { @GET @Path("/games/{gameSlug}/{projectTypeSlug}/projects") - public Response getProjects (@PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @Query ProjectQuery query) { + public Response getProjects (@PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug, @Query ProjectQuery query) { final long page = query.getPage(); final int limit = query.getLimit(); @@ -117,7 +119,9 @@ public Response getProjects (@PathParam("gameSlug") String gameSlug, @PathParam( final String[] loaders = query.getLoaders(); return Confluencia.getTransaction(session -> { - final List projects = Confluencia.PROJECT.findAllByGameAndProjectType(session, gameSlug, projectTypeSlug, search, page, limit, sort, versions, tags, loaders); + final List projects = + Confluencia.PROJECT.findAllByGameAndProjectType(session, gameSlug, projectTypeSlug, search, page, limit, + sort, versions, tags, loaders); GamesEntity game = Confluencia.GAME.findOneBySlug(session, gameSlug); if (projects.isEmpty()) { @@ -127,30 +131,39 @@ public Response getProjects (@PathParam("gameSlug") String gameSlug, @PathParam( return ErrorMessage.NOT_FOUND_GAME.respond(); } - if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug) == null) { + if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, + projectTypeSlug) == null) { return ErrorMessage.NOT_FOUND_PROJECT_TYPE.respond(); } } - final List dataProjects = projects.stream().map(DataBaseProject::new).collect(Collectors.toList()); + final List dataProjects = projects.stream().map(DataBaseProject::new) + .collect(Collectors.toList()); - final List types = game.getProjectTypes().stream().map(DataBaseProjectType::new).collect(Collectors.toList()); - final ProjectTypesEntity currentType = Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); + final List types = game.getProjectTypes().stream().map(DataBaseProjectType::new) + .collect(Collectors.toList()); + final ProjectTypesEntity currentType = + Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); - final long projectCount = Confluencia.PROJECT.countAllByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); + final long projectCount = + Confluencia.PROJECT.countAllByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug); - return ResponseUtil.successResponse(new DataSiteGameProjects(dataProjects, types, new DataProjectType(currentType, projectCount), GamesAPI.PROJECT_SORTS)); + return ResponseUtil.successResponse(new DataSiteGameProjects(dataProjects, types, + new DataProjectType(currentType, projectCount), GamesAPI.PROJECT_SORTS)); }); } @GET @Path("/projects/{gameSlug}/{projectTypeSlug}/{projectSlug}") - public Response getProject (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @PathParam("projectSlug") String projectSlug) throws ResponseException { + public Response getProject (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug, + @PathParam("projectSlug") String projectSlug) throws ResponseException { return Confluencia.getTransaction(session -> { try { - final DataProject project = ProjectService.getDataProject(session, gameSlug, projectTypeSlug, projectSlug, token); + final DataProject project = + ProjectService.getDataProject(session, gameSlug, projectTypeSlug, projectSlug, token); return ResponseUtil.successResponse(project); } catch (ResponseException e) { @@ -162,7 +175,10 @@ public Response getProject (@HeaderParam("Authorization") Token token, @PathPara @GET @Path("/games/{gameSlug}/{projectTypeSlug}/{projectSlug}/files") - public Response getProjectFiles (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @PathParam("projectSlug") String projectSlug, @Query ProjectFileQuery query) throws ResponseException { + public Response getProjectFiles (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug, + @PathParam("projectSlug") String projectSlug, @Query ProjectFileQuery query) + throws ResponseException { long page = query.getPage(); int limit = query.getLimit(); @@ -170,14 +186,16 @@ public Response getProjectFiles (@HeaderParam("Authorization") Token token, @Pat String gameVersion = query.getGameVersion(); return Confluencia.getTransaction(session -> { - final ProjectsEntity project = Confluencia.PROJECT.findOneProject(session, gameSlug, projectTypeSlug, projectSlug); + final ProjectsEntity project = + Confluencia.PROJECT.findOneProject(session, gameSlug, projectTypeSlug, projectSlug); if (project == null) { if (Confluencia.GAME.findOneBySlug(session, gameSlug) == null) { return ErrorMessage.NOT_FOUND_GAME.respond(); } - if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug) == null) { + if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, + projectTypeSlug) == null) { return ErrorMessage.NOT_FOUND_PROJECT_TYPE.respond(); } @@ -185,16 +203,20 @@ public Response getProjectFiles (@HeaderParam("Authorization") Token token, @Pat } boolean authorized = ProjectPermissions.hasPermission(project, token, ProjectPermissions.FILE_UPLOAD); - final List projectFileRecords = Confluencia.FILE.findAllByProject(session, project, authorized, page, limit, sort, gameVersion); + final List projectFileRecords = + Confluencia.FILE.findAllByProject(session, project, authorized, page, limit, sort, gameVersion); final List projectFiles = projectFileRecords.stream().map(record -> { - final List gameVersionRecords = record.getGameVersions().stream().map(ProjectFileGameVersionsEntity::getGameVersion).collect(Collectors.toList()); - List gameVersions = gameVersionRecords.stream().map(DataGameVersion::new).collect(Collectors.toList()); + final List gameVersionRecords = record.getGameVersions().stream() + .map(ProjectFileGameVersionsEntity::getGameVersion).collect(Collectors.toList()); + List gameVersions = gameVersionRecords.stream().map(DataGameVersion::new) + .collect(Collectors.toList()); return record.isReleased() ? new DataSiteProjectFileDisplay(record, gameVersions) : new DataSiteProjectFileDisplay(record, gameVersions); }).collect(Collectors.toList()); - return ResponseUtil.successResponse(new DataSiteProjectFilesPage(new DataBaseProject(project), projectFiles)); + return ResponseUtil.successResponse( + new DataSiteProjectFilesPage(new DataBaseProject(project), projectFiles)); }); } @@ -215,8 +237,10 @@ public Response getProjectFile (@HeaderParam("Authorization") Token token, @Path return ErrorMessage.NOT_FOUND_PROJECT_FILE.respond(); } - final List gameVersionRecords = projectFile.getGameVersions().stream().map(ProjectFileGameVersionsEntity::getGameVersion).collect(Collectors.toList()); - final List gameVersions = gameVersionRecords.stream().map(DataGameVersion::new).collect(Collectors.toList()); + final List gameVersionRecords = projectFile.getGameVersions().stream() + .map(ProjectFileGameVersionsEntity::getGameVersion).collect(Collectors.toList()); + final List gameVersions = gameVersionRecords.stream().map(DataGameVersion::new) + .collect(Collectors.toList()); return ResponseUtil.successResponse(new DataSiteProjectFileDisplay(projectFile, gameVersions)); }); @@ -224,17 +248,22 @@ public Response getProjectFile (@HeaderParam("Authorization") Token token, @Path @GET @Path("/games/{gameSlug}/{projectTypeSlug}/{projectSlug}/files/{fileId}") - public Response getProjectFile (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug, @PathParam("projectSlug") String projectSlug, @PathParam("fileId") long fileId, @Query ProjectFileQuery query) throws ResponseException { + public Response getProjectFile (@HeaderParam("Authorization") Token token, @PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug, + @PathParam("projectSlug") String projectSlug, @PathParam("fileId") long fileId, + @Query ProjectFileQuery query) throws ResponseException { return Confluencia.getTransaction(session -> { - final ProjectsEntity project = Confluencia.PROJECT.findOneProject(session, gameSlug, projectTypeSlug, projectSlug); + final ProjectsEntity project = + Confluencia.PROJECT.findOneProject(session, gameSlug, projectTypeSlug, projectSlug); if (project == null) { if (Confluencia.GAME.findOneBySlug(session, gameSlug) == null) { return ErrorMessage.NOT_FOUND_GAME.respond(); } - if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug) == null) { + if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, + projectTypeSlug) == null) { return ErrorMessage.NOT_FOUND_PROJECT_TYPE.respond(); } @@ -252,17 +281,21 @@ public Response getProjectFile (@HeaderParam("Authorization") Token token, @Path return ErrorMessage.NOT_FOUND_PROJECT_FILE.respond(); } - final List gameVersionRecords = projectFile.getGameVersions().stream().map(ProjectFileGameVersionsEntity::getGameVersion).collect(Collectors.toList()); - final List gameVersions = gameVersionRecords.stream().map(DataGameVersion::new).collect(Collectors.toList()); + final List gameVersionRecords = projectFile.getGameVersions().stream() + .map(ProjectFileGameVersionsEntity::getGameVersion).collect(Collectors.toList()); + final List gameVersions = gameVersionRecords.stream().map(DataGameVersion::new) + .collect(Collectors.toList()); - return ResponseUtil.successResponse(new DataSiteProjectFilePage(new DataBaseProject(project), new DataSiteProjectFileDisplay(projectFile, gameVersions))); + return ResponseUtil.successResponse(new DataSiteProjectFilePage(new DataBaseProject(project), + new DataSiteProjectFileDisplay(projectFile, gameVersions))); }); } @GET @Path("/author/{username}") - public Response getUser (@HeaderParam("Authorization") Token token, @PathParam("username") String username, @Query AuthorProjectsQuery query) { + public Response getUser (@HeaderParam("Authorization") Token token, @PathParam("username") String username, + @Query AuthorProjectsQuery query) { return Confluencia.getTransaction(session -> { final UsersEntity userRecord = Confluencia.USER.findOneByUsername(session, username); @@ -274,27 +307,35 @@ public Response getUser (@HeaderParam("Authorization") Token token, @PathParam(" boolean authorized = token != null && token.getUserId() == userRecord.getId(); long projectCount = Confluencia.PROJECT.countAllByUsername(session, username, authorized); - List projects = Confluencia.PROJECT.findAllByUsername(session, username, authorized, query.getPage(), query.getLimit(), query.getSort(ProjectFileSort.NEW)); + List projects = Confluencia.PROJECT.findAllByUsername(session, username, authorized, + query.getPage(), query.getLimit(), query.getSort(ProjectFileSort.NEW)); if (authorized) { - List dataProjects = projects.stream().map(a -> new DataAuthorizedProject(a, ProjectPermissions.getAuthorizedUserPermissions(a, token))).collect(Collectors.toList()); + List dataProjects = projects.stream().map(a -> + new DataAuthorizedProject(a, ProjectPermissions.getAuthorizedUserPermissions(a, token))) + .collect(Collectors.toList()); DataUser user = new DataAuthorizedUser(userRecord); - return ResponseUtil.successResponse(new DataSiteAuthorProjects(user, dataProjects, GamesAPI.GAME_SORTS, projectCount)); + return ResponseUtil.successResponse( + new DataSiteAuthorProjects(user, dataProjects, GamesAPI.GAME_SORTS, projectCount)); } List dataProjects = projects.stream().map(DataProject::new).collect(Collectors.toList()); DataUser user = new DataUser(userRecord); - return ResponseUtil.successResponse(new DataSiteAuthorProjects(user, dataProjects, GamesAPI.GAME_SORTS, projectCount)); + return ResponseUtil.successResponse( + new DataSiteAuthorProjects(user, dataProjects, GamesAPI.GAME_SORTS, projectCount)); }); } @GET @Path("/create/games/{gameSlug}/{projectTypeSlug}") - public Response createProject (@PathParam("gameSlug") String gameSlug, @PathParam("projectTypeSlug") String projectTypeSlug) { + public Response createProject (@PathParam("gameSlug") String gameSlug, + @PathParam("projectTypeSlug") String projectTypeSlug) { return Confluencia.getTransaction(session -> { - List tags = Confluencia.PROJECT.findAllTagsByGameSlugAndProjectTypeSlug(session, new ProjectTypesEntity(new GamesEntity(gameSlug), projectTypeSlug)); - return ResponseUtil.successResponse(new DataCreateProject(tags.stream().map(DataTag::new).collect(Collectors.toList()))); + List tags = Confluencia.PROJECT.findAllTagsByGameSlugAndProjectTypeSlug(session, + new ProjectTypesEntity(new GamesEntity(gameSlug), projectTypeSlug)); + return ResponseUtil.successResponse(new DataCreateProject(tags.stream().map(DataTag::new) + .collect(Collectors.toList()))); }); } } diff --git a/src/main/java/com/diluv/api/v1/users/UsersAPI.java b/src/main/java/com/diluv/api/v1/users/UsersAPI.java index 7810d32e..e25a7c6e 100644 --- a/src/main/java/com/diluv/api/v1/users/UsersAPI.java +++ b/src/main/java/com/diluv/api/v1/users/UsersAPI.java @@ -138,7 +138,8 @@ public Response patchSelf (@HeaderParam("Authorization") Token token, @Multipart return ErrorMessage.USER_INVALID_EMAIL.respond(); } - if (Confluencia.USER.existsByEmail(session, email) || Confluencia.USER.existsTempUserByEmail(session, email)) { + if (Confluencia.USER.existsByEmail(session, email) + || Confluencia.USER.existsTempUserByEmail(session, email)) { return ErrorMessage.USER_TAKEN_EMAIL.respond(); } @@ -254,7 +255,8 @@ public Response getUser (@HeaderParam("Authorization") Token token, @PathParam(" @GET @Path("/{username}/projects") - public Response getProjectsByUsername (@HeaderParam("Authorization") Token token, @PathParam("username") String username, @Query ProjectQuery query) { + public Response getProjectsByUsername (@HeaderParam("Authorization") Token token, + @PathParam("username") String username, @Query ProjectQuery query) { long page = query.getPage(); int limit = query.getLimit(); @@ -272,7 +274,8 @@ public Response getProjectsByUsername (@HeaderParam("Authorization") Token token authorized = userRecord.getUsername().equalsIgnoreCase(username); } - List projects = Confluencia.PROJECT.findAllByUsername(session, username, authorized, page, limit, sort); + List projects = + Confluencia.PROJECT.findAllByUsername(session, username, authorized, page, limit, sort); return ResponseUtil.successResponse(projects.stream().map(DataProject::new).collect(Collectors.toList())); }); } diff --git a/src/main/java/com/diluv/api/v1/utilities/ProjectService.java b/src/main/java/com/diluv/api/v1/utilities/ProjectService.java index 76017439..b645a49f 100644 --- a/src/main/java/com/diluv/api/v1/utilities/ProjectService.java +++ b/src/main/java/com/diluv/api/v1/utilities/ProjectService.java @@ -15,15 +15,18 @@ public class ProjectService { - public static DataProject getDataProject (Session session, String gameSlug, String projectTypeSlug, String projectSlug, Token token) throws ResponseException { + public static DataProject getDataProject (Session session, String gameSlug, String projectTypeSlug, + String projectSlug, Token token) throws ResponseException { - final ProjectsEntity project = Confluencia.PROJECT.findOneProject(session, gameSlug, projectTypeSlug, projectSlug); + final ProjectsEntity project = + Confluencia.PROJECT.findOneProject(session, gameSlug, projectTypeSlug, projectSlug); if (project == null) { if (Confluencia.GAME.findOneBySlug(session, gameSlug) == null) { throw new ResponseException(ErrorMessage.NOT_FOUND_GAME.respond()); } - if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, projectTypeSlug) == null) { + if (Confluencia.PROJECT.findOneProjectTypeByGameSlugAndProjectTypeSlug(session, gameSlug, + projectTypeSlug) == null) { throw new ResponseException(ErrorMessage.NOT_FOUND_PROJECT_TYPE.respond()); } From 777adc9dab8b9f38969f175abf82519963ce923c Mon Sep 17 00:00:00 2001 From: williambl Date: Thu, 22 Oct 2020 22:12:16 +0100 Subject: [PATCH 7/7] Add checkstyle github actions workflow --- .github/workflows/ci_check.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/ci_check.yml diff --git a/.github/workflows/ci_check.yml b/.github/workflows/ci_check.yml new file mode 100644 index 00000000..90f42547 --- /dev/null +++ b/.github/workflows/ci_check.yml @@ -0,0 +1,27 @@ +name: CI Checking + +on: + push: + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Checkout submodules + shell: bash + run: | + auth_header="$(git config --local --get http.https://github.com/.extraheader)" + git submodule sync --recursive + git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 + + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + + - name: Testing Building and Checking Style + run: ./gradlew check + env: + PGP_PASS: ZQz7MqGSX5AQb3XQ