From c6287f74839138aa508d3d3741ae72f959ee0d46 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Fri, 5 Feb 2021 14:54:07 -0800 Subject: [PATCH] custom validation annotation --- frontend/pages/new.vue | 9 +- .../io/papermc/hangar/config/WebConfig.java | 10 +++ .../hangar/config/hangar/ChannelsConfig.java | 4 +- .../api/v1/PermissionsController.java | 4 +- .../controller/api/v1/ProjectsController.java | 2 +- .../v1/interfaces/IProjectsController.java | 8 +- .../v1/interfaces/ISessionsController.java | 2 +- .../v1/interfaces/IVersionsController.java | 6 +- .../controller/extras/HangarApiRequest.java | 2 +- .../controller/extras/HangarRequest.java | 2 +- .../extras/converters/ColorHexConverter.java | 2 +- .../internal/BackendDataController.java | 2 +- .../internal/HangarUsersController.java | 2 +- .../internal/ProjectController.java | 4 +- .../controller/validations/Validate.java | 57 ++++++++++++ .../hangar/controllerold/Apiv1Controller.java | 4 +- .../controllerold/ApplicationController.java | 6 +- .../controllerold/ChannelsController.java | 2 +- .../controllerold/ProjectsController.java | 8 +- .../controllerold/ReviewsController.java | 4 +- .../controllerold/VersionsController.java | 4 +- .../controllerold/api/KeysApiController.java | 6 +- .../api/ProjectsApiController.java | 8 +- .../api/VersionsApiController.java | 6 +- .../controllerold/forms/SaveProjectForm.java | 2 +- .../controllerold/forms/objects/Channel.java | 2 +- .../papermc/hangar/db/dao/PermissionsDAO.java | 2 +- .../dao/internal/table/OrganizationDAO.java | 2 +- .../db/dao/internal/table/roles/RoleDAO.java | 2 +- .../hangar/db/dao/v1/VersionsApiDAO.java | 4 +- .../hangar/db/daoold/OrganizationDao.java | 2 +- .../hangar/db/daoold/PlatformVersionsDao.java | 2 +- .../hangar/db/daoold/ProjectChannelDao.java | 2 +- .../papermc/hangar/db/daoold/ProjectDao.java | 2 +- .../hangar/db/daoold/ProjectVersionDao.java | 2 +- .../db/daoold/api/mappers/VersionMapper.java | 8 +- .../hangar/db/mappers/PermissionMapper.java | 2 +- .../db/mappers/PromotedVersionMapper.java | 2 +- .../hangar/db/mappers/RoleMapperFactory.java | 4 +- .../hangar/db/modelold/ApiKeysTable.java | 2 +- .../db/modelold/PlatformVersionsTable.java | 2 +- .../db/modelold/ProjectChannelsTable.java | 2 +- .../hangar/db/modelold/ProjectFlagsTable.java | 2 +- .../db/modelold/ProjectVersionTagsTable.java | 2 +- .../ProjectVersionVisibilityChangesTable.java | 2 +- .../db/modelold/ProjectVersionsTable.java | 4 +- .../ProjectVisibilityChangesTable.java | 3 +- .../hangar/db/modelold/ProjectsTable.java | 4 +- .../java/io/papermc/hangar/model/Visible.java | 2 +- .../io/papermc/hangar/model/api/User.java | 2 +- .../api/permissions/PermissionCheck.java | 2 +- .../api/permissions/UserPermissions.java | 2 +- .../hangar/model/api/project/Project.java | 4 +- .../model/api/project/ProjectCompact.java | 4 +- .../model/api/project/ProjectMember.java | 2 +- .../project/version/PromotedVersionTag.java | 2 +- .../model/api/project/version/Version.java | 6 +- .../hangar/model/{ => common}/Color.java | 2 +- .../hangar/model/{ => common}/Permission.java | 2 +- .../model/{ => common}/PermissionType.java | 2 +- .../hangar/model/{ => common}/Platform.java | 2 +- .../hangar/model/{ => common}/TagColor.java | 2 +- .../model/{ => common/projects}/Category.java | 2 +- .../{ => common/projects}/FlagReason.java | 2 +- .../{ => common/projects}/ReviewState.java | 2 +- .../{ => common/projects}/Visibility.java | 2 +- .../model/{ => common}/roles/GlobalRole.java | 6 +- .../{ => common}/roles/OrganizationRole.java | 6 +- .../model/{ => common}/roles/ProjectRole.java | 6 +- .../hangar/model/{ => common}/roles/Role.java | 6 +- .../hangar/model/db/auth/ApiKeyTable.java | 2 +- .../model/db/projects/ProjectFlagTable.java | 2 +- .../model/db/projects/ProjectTable.java | 4 +- .../ProjectVisibilityChangeTable.java | 2 +- .../model/db/roles/ExtendedRoleTable.java | 2 +- .../model/db/roles/GlobalRoleTable.java | 2 +- .../model/db/roles/OrganizationRoleTable.java | 2 +- .../model/db/roles/ProjectRoleTable.java | 2 +- .../hangar/model/db/roles/RoleTable.java | 2 +- .../ProjectVersionDependencyTable.java | 2 +- .../db/versions/ProjectVersionTable.java | 4 +- .../model/internal/HangarProjectFlag.java | 4 +- .../api/requests/projects/NewProject.java | 88 ++++++++++++++++++- .../hangar/model/internal/sso/AuthUser.java | 4 +- .../model/internal/sso/SsoSyncData.java | 2 +- .../model/internal/user/HangarUser.java | 4 +- .../user/notifications/HangarInvite.java | 6 +- .../papermc/hangar/modelold/ApiAuthInfo.java | 2 +- .../hangar/modelold/NamedPermission.java | 2 +- .../io/papermc/hangar/modelold/Platform.java | 2 +- .../java/io/papermc/hangar/modelold/Role.java | 4 +- .../hangar/modelold/generated/ApiKey.java | 2 +- .../hangar/modelold/generated/Project.java | 4 +- .../modelold/generated/ProjectCompact.java | 2 +- .../hangar/modelold/generated/Version.java | 4 +- .../hangar/modelold/viewhelpers/ApiKey.java | 2 +- .../modelold/viewhelpers/HeaderData.java | 2 +- .../modelold/viewhelpers/JoinableData.java | 2 +- .../viewhelpers/ProjectApprovalData.java | 3 +- .../modelold/viewhelpers/ProjectData.java | 2 +- .../modelold/viewhelpers/ProjectFlag.java | 2 +- .../viewhelpers/ReviewQueueEntry.java | 2 +- .../viewhelpers/ScopedOrganizationData.java | 2 +- .../viewhelpers/ScopedProjectData.java | 2 +- .../viewhelpers/UnhealthyProject.java | 3 +- .../hangar/modelold/viewhelpers/UserData.java | 2 +- .../modelold/viewhelpers/VersionData.java | 2 +- .../hangar/modelold/viewhelpers/ViewTag.java | 2 +- .../hangar/security/HangarPrincipal.java | 19 ++-- .../annotations/unlocked/Unlocked.java | 17 ++++ .../unlocked/UnlockedMetadataExtractor.java | 27 ++++++ .../annotations/unlocked/UnlockedVoter.java | 35 ++++++++ .../hangar/securityold/UserLockException.java | 1 + .../hangar/service/AuthenticationService.java | 4 +- .../hangar/service/PermissionService.java | 2 +- .../papermc/hangar/service/TokenService.java | 6 +- .../hangar/service/VisibilityService.java | 4 +- .../service/api/ProjectsApiService.java | 4 +- .../hangar/service/api/UsersApiService.java | 2 +- .../service/api/VersionsApiService.java | 2 +- .../service/internal/MemberService.java | 6 +- .../service/internal/OrganizationService.java | 2 +- .../service/internal/ProjectService.java | 27 +++--- .../hangar/service/internal/UserService.java | 2 +- .../internal/VersionDependencyService.java | 2 +- .../internal/factories/ProjectFactory.java | 27 ++++++ .../internal/roles/GlobalRoleService.java | 2 +- .../roles/OrganizationRoleService.java | 2 +- .../internal/roles/ProjectRoleService.java | 2 +- .../service/internal/roles/RoleService.java | 2 +- .../hangar/serviceold/ApiKeyService.java | 2 +- .../serviceold/AuthenticationService.java | 2 +- .../papermc/hangar/serviceold/OrgService.java | 2 +- .../hangar/serviceold/PopulationService.java | 2 +- .../hangar/serviceold/UserService.java | 2 +- .../hangar/serviceold/VersionService.java | 8 +- .../pluginupload/PendingVersion.java | 2 +- .../serviceold/project/ChannelFactory.java | 2 +- .../serviceold/project/ChannelService.java | 2 +- .../serviceold/project/FlagService.java | 2 +- .../serviceold/project/ProjectFactory.java | 6 +- .../serviceold/project/ProjectService.java | 4 +- .../resources/templates/layout/header.ftlh | 2 +- .../projects/helper/inputSettings.ftlh | 2 +- .../projects/versions/unsafeDownload.ftlh | 2 +- .../resources/templates/projects/view.ftlh | 4 +- .../templates/users/admin/reviews.ftlh | 2 +- .../resources/templates/users/memberList.ftlh | 2 +- src/main/resources/templates/users/view.ftlh | 4 +- 149 files changed, 499 insertions(+), 231 deletions(-) create mode 100644 src/main/java/io/papermc/hangar/controller/validations/Validate.java rename src/main/java/io/papermc/hangar/model/{ => common}/Color.java (98%) rename src/main/java/io/papermc/hangar/model/{ => common}/Permission.java (99%) rename src/main/java/io/papermc/hangar/model/{ => common}/PermissionType.java (94%) rename src/main/java/io/papermc/hangar/model/{ => common}/Platform.java (98%) rename src/main/java/io/papermc/hangar/model/{ => common}/TagColor.java (96%) rename src/main/java/io/papermc/hangar/model/{ => common/projects}/Category.java (98%) rename src/main/java/io/papermc/hangar/model/{ => common/projects}/FlagReason.java (92%) rename src/main/java/io/papermc/hangar/model/{ => common/projects}/ReviewState.java (94%) rename src/main/java/io/papermc/hangar/model/{ => common/projects}/Visibility.java (96%) rename src/main/java/io/papermc/hangar/model/{ => common}/roles/GlobalRole.java (96%) rename src/main/java/io/papermc/hangar/model/{ => common}/roles/OrganizationRole.java (95%) rename src/main/java/io/papermc/hangar/model/{ => common}/roles/ProjectRole.java (95%) rename src/main/java/io/papermc/hangar/model/{ => common}/roles/Role.java (91%) create mode 100644 src/main/java/io/papermc/hangar/security/annotations/unlocked/Unlocked.java create mode 100644 src/main/java/io/papermc/hangar/security/annotations/unlocked/UnlockedMetadataExtractor.java create mode 100644 src/main/java/io/papermc/hangar/security/annotations/unlocked/UnlockedVoter.java create mode 100644 src/main/java/io/papermc/hangar/service/internal/factories/ProjectFactory.java diff --git a/frontend/pages/new.vue b/frontend/pages/new.vue index 46979c8e9..37dbcbf9f 100644 --- a/frontend/pages/new.vue +++ b/frontend/pages/new.vue @@ -216,7 +216,14 @@
{{ $t('project.new.step5.text') }}
diff --git a/src/main/java/io/papermc/hangar/config/WebConfig.java b/src/main/java/io/papermc/hangar/config/WebConfig.java index 4e69daacc..b9896dde4 100644 --- a/src/main/java/io/papermc/hangar/config/WebConfig.java +++ b/src/main/java/io/papermc/hangar/config/WebConfig.java @@ -10,8 +10,11 @@ import io.papermc.hangar.controller.extras.converters.StringToEnumConverterFacto import io.papermc.hangar.securityold.UserLockExceptionResolver; import no.api.freemarker.java8.Java8ObjectWrapper; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.expression.BeanFactoryResolver; +import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.format.FormatterRegistry; import org.springframework.http.CacheControl; import org.springframework.http.converter.HttpMessageConverter; @@ -163,4 +166,11 @@ public class WebConfig extends WebMvcConfigurationSupport { public UserLockExceptionResolver userLockExceptionResolver() { return new UserLockExceptionResolver(); } + + @Bean + public StandardEvaluationContext standardEvaluationContext(ApplicationContext applicationContext) { + StandardEvaluationContext evaluationContext = new StandardEvaluationContext(); + evaluationContext.setBeanResolver(new BeanFactoryResolver(applicationContext)); + return evaluationContext; + } } diff --git a/src/main/java/io/papermc/hangar/config/hangar/ChannelsConfig.java b/src/main/java/io/papermc/hangar/config/hangar/ChannelsConfig.java index b1df1ec08..22ac2cedb 100644 --- a/src/main/java/io/papermc/hangar/config/hangar/ChannelsConfig.java +++ b/src/main/java/io/papermc/hangar/config/hangar/ChannelsConfig.java @@ -1,6 +1,6 @@ package io.papermc.hangar.config.hangar; -import io.papermc.hangar.model.Color; +import io.papermc.hangar.model.common.Color; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -10,7 +10,7 @@ import org.springframework.stereotype.Component; public class ChannelsConfig { private int maxNameLen = 15; private String nameRegex = "^[a-zA-Z0-9]+$"; - @Value("#{T(io.papermc.hangar.model.Color).getById(${hangar.channels.color-default})}") + @Value("#{T(io.papermc.hangar.model.common.Color).getById(${hangar.channels.color-default})}") private Color colorDefault = Color.getById(7); private String nameDefault = "Release"; diff --git a/src/main/java/io/papermc/hangar/controller/api/v1/PermissionsController.java b/src/main/java/io/papermc/hangar/controller/api/v1/PermissionsController.java index 1f44bcf57..14a8655c1 100644 --- a/src/main/java/io/papermc/hangar/controller/api/v1/PermissionsController.java +++ b/src/main/java/io/papermc/hangar/controller/api/v1/PermissionsController.java @@ -3,10 +3,10 @@ package io.papermc.hangar.controller.api.v1; import io.papermc.hangar.controller.HangarController; import io.papermc.hangar.controller.api.v1.interfaces.IPermissionsController; import io.papermc.hangar.exceptions.HangarApiException; -import io.papermc.hangar.model.Permission; -import io.papermc.hangar.model.PermissionType; import io.papermc.hangar.model.api.permissions.PermissionCheck; import io.papermc.hangar.model.api.permissions.UserPermissions; +import io.papermc.hangar.model.common.Permission; +import io.papermc.hangar.model.common.PermissionType; import io.papermc.hangar.modelold.NamedPermission; import io.papermc.hangar.service.PermissionService; import org.apache.commons.lang3.tuple.ImmutablePair; diff --git a/src/main/java/io/papermc/hangar/controller/api/v1/ProjectsController.java b/src/main/java/io/papermc/hangar/controller/api/v1/ProjectsController.java index ca0a5ac3e..46429b778 100644 --- a/src/main/java/io/papermc/hangar/controller/api/v1/ProjectsController.java +++ b/src/main/java/io/papermc/hangar/controller/api/v1/ProjectsController.java @@ -2,11 +2,11 @@ package io.papermc.hangar.controller.api.v1; import io.papermc.hangar.controller.HangarController; import io.papermc.hangar.controller.api.v1.interfaces.IProjectsController; -import io.papermc.hangar.model.Category; import io.papermc.hangar.model.api.PaginatedResult; import io.papermc.hangar.model.api.project.Project; import io.papermc.hangar.model.api.project.ProjectMember; import io.papermc.hangar.model.api.requests.RequestPagination; +import io.papermc.hangar.model.common.projects.Category; import io.papermc.hangar.modelold.generated.ProjectSortingStrategy; import io.papermc.hangar.service.api.ProjectsApiService; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/IProjectsController.java b/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/IProjectsController.java index 96c50904a..049c7a2f3 100644 --- a/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/IProjectsController.java +++ b/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/IProjectsController.java @@ -1,10 +1,10 @@ package io.papermc.hangar.controller.api.v1.interfaces; -import io.papermc.hangar.model.Category; import io.papermc.hangar.model.api.PaginatedResult; import io.papermc.hangar.model.api.project.Project; import io.papermc.hangar.model.api.project.ProjectMember; import io.papermc.hangar.model.api.requests.RequestPagination; +import io.papermc.hangar.model.common.projects.Category; import io.papermc.hangar.modelold.generated.ProjectSortingStrategy; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -41,7 +41,7 @@ public interface IProjectsController { @ApiResponse(code = 403, message = "Not enough permissions to use this endpoint") }) @GetMapping( "/projects/{author}/{slug}") - @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") + @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.common.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") ResponseEntity getProject(@ApiParam("The author of the project to return") @PathVariable String author, @ApiParam("The slug of the project to return") @PathVariable String slug); @@ -58,7 +58,7 @@ public interface IProjectsController { @ApiResponse(code = 403, message = "Not enough permissions to use this endpoint") }) @GetMapping("/projects/{author}/{slug}/members") - @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") + @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.common.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") ResponseEntity> getProjectMembers( @ApiParam("The author of the project to return members for") @PathVariable("author") String author, @ApiParam("The slug of the project to return") @PathVariable("slug") String slug, @@ -78,7 +78,7 @@ public interface IProjectsController { @ApiResponse(code = 403, message = "Not enough permissions to use this endpoint") }) @GetMapping("/projects") - @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofGlobal())") + @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.common.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofGlobal())") ResponseEntity> getProjects( @ApiParam("The query to use when searching") @RequestParam(required = false) String q, @ApiParam("Restrict your search to a list of categories") @RequestParam(required = false) List categories, diff --git a/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/ISessionsController.java b/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/ISessionsController.java index a12531625..ff7f8d8b3 100644 --- a/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/ISessionsController.java +++ b/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/ISessionsController.java @@ -27,6 +27,6 @@ public interface ISessionsController { @ApiResponse(code = 401, message = "Api session missing, invalid or expired"), @ApiResponse(code = 403, message = "Not enough permissions to use this endpoint")}) @DeleteMapping("/sessions/current") - @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.Permission).None, T(io.papermc.hangar.controller.extras.ApiScope).ofGlobal())") + @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.common.Permission).None, T(io.papermc.hangar.controller.extras.ApiScope).ofGlobal())") ResponseEntity deleteSession(); } diff --git a/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/IVersionsController.java b/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/IVersionsController.java index 5f9aa6977..3819f8772 100644 --- a/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/IVersionsController.java +++ b/src/main/java/io/papermc/hangar/controller/api/v1/interfaces/IVersionsController.java @@ -55,7 +55,7 @@ public interface IVersionsController { @ApiResponse(code = 403, message = "Not enough permissions to use this endpoint") }) @GetMapping(value = "/projects/{author}/{slug}/versions/{name:.*}") - @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") + @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.common.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") ResponseEntity getVersion(@ApiParam("The author of the project to return the version for") @PathVariable String author, @ApiParam("The slug of the project to return") @PathVariable String slug, @ApiParam("The name of the version to return") @PathVariable String name @@ -74,7 +74,7 @@ public interface IVersionsController { @ApiResponse(code = 403, message = "Not enough permissions to use this endpoint") }) @GetMapping("/projects/{author}/{slug}/versions") - @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") + @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.common.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") ResponseEntity> getVersions(@ApiParam("The author of the project to return versions for") @PathVariable String author, @ApiParam("The slug of the project to return versions for") @PathVariable String slug, @ApiParam("A list of tags all the returned versions should have. Should be formatted either as `tagname` or `tagname:tagdata`.") @RequestParam(required = false) List tags, @@ -95,7 +95,7 @@ public interface IVersionsController { @ApiResponse(code = 403, message = "Not enough permissions to use this endpoint") }) @GetMapping(value = "/projects/{author}/{slug}/versions/{version}/stats", produces = MediaType.APPLICATION_JSON_VALUE) - @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.Permission).IsProjectMember, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") + @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.common.Permission).IsProjectMember, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") ResponseEntity> getVersionStats(@ApiParam("The author of the version to return the stats for") @PathVariable String author, @ApiParam("The slug of the project to return stats for") @PathVariable String slug, @ApiParam("The version to return the stats for") @PathVariable String version, diff --git a/src/main/java/io/papermc/hangar/controller/extras/HangarApiRequest.java b/src/main/java/io/papermc/hangar/controller/extras/HangarApiRequest.java index d3700bfb6..60d5e8593 100644 --- a/src/main/java/io/papermc/hangar/controller/extras/HangarApiRequest.java +++ b/src/main/java/io/papermc/hangar/controller/extras/HangarApiRequest.java @@ -1,6 +1,6 @@ package io.papermc.hangar.controller.extras; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.db.UserTable; import io.papermc.hangar.model.db.auth.ApiKeyTable; import org.jdbi.v3.core.mapper.Nested; diff --git a/src/main/java/io/papermc/hangar/controller/extras/HangarRequest.java b/src/main/java/io/papermc/hangar/controller/extras/HangarRequest.java index 5a2afac3a..d49beb8f3 100644 --- a/src/main/java/io/papermc/hangar/controller/extras/HangarRequest.java +++ b/src/main/java/io/papermc/hangar/controller/extras/HangarRequest.java @@ -1,6 +1,6 @@ package io.papermc.hangar.controller.extras; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.db.UserTable; public class HangarRequest { diff --git a/src/main/java/io/papermc/hangar/controller/extras/converters/ColorHexConverter.java b/src/main/java/io/papermc/hangar/controller/extras/converters/ColorHexConverter.java index b186d176f..7b84aa083 100644 --- a/src/main/java/io/papermc/hangar/controller/extras/converters/ColorHexConverter.java +++ b/src/main/java/io/papermc/hangar/controller/extras/converters/ColorHexConverter.java @@ -1,6 +1,6 @@ package io.papermc.hangar.controller.extras.converters; -import io.papermc.hangar.model.Color; +import io.papermc.hangar.model.common.Color; import org.jetbrains.annotations.NotNull; import org.springframework.core.convert.converter.Converter; diff --git a/src/main/java/io/papermc/hangar/controller/internal/BackendDataController.java b/src/main/java/io/papermc/hangar/controller/internal/BackendDataController.java index d466fb9bc..5932db654 100644 --- a/src/main/java/io/papermc/hangar/controller/internal/BackendDataController.java +++ b/src/main/java/io/papermc/hangar/controller/internal/BackendDataController.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.databind.introspect.Annotated; import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import io.papermc.hangar.model.Category; +import io.papermc.hangar.model.common.projects.Category; import io.papermc.hangar.modelold.NamedPermission; import io.papermc.hangar.security.annotations.Anyone; import org.apache.commons.lang3.NotImplementedException; diff --git a/src/main/java/io/papermc/hangar/controller/internal/HangarUsersController.java b/src/main/java/io/papermc/hangar/controller/internal/HangarUsersController.java index 544d08d5f..fc1f3675e 100644 --- a/src/main/java/io/papermc/hangar/controller/internal/HangarUsersController.java +++ b/src/main/java/io/papermc/hangar/controller/internal/HangarUsersController.java @@ -4,10 +4,10 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import io.papermc.hangar.controller.HangarController; import io.papermc.hangar.exceptions.HangarApiException; +import io.papermc.hangar.model.common.roles.Role; import io.papermc.hangar.model.db.roles.ExtendedRoleTable; import io.papermc.hangar.model.internal.user.HangarUser; import io.papermc.hangar.model.internal.user.notifications.HangarNotification; -import io.papermc.hangar.model.roles.Role; import io.papermc.hangar.security.HangarAuthenticationToken; import io.papermc.hangar.service.api.UsersApiService; import io.papermc.hangar.service.internal.InviteService; diff --git a/src/main/java/io/papermc/hangar/controller/internal/ProjectController.java b/src/main/java/io/papermc/hangar/controller/internal/ProjectController.java index d2879a116..a4e6185ca 100644 --- a/src/main/java/io/papermc/hangar/controller/internal/ProjectController.java +++ b/src/main/java/io/papermc/hangar/controller/internal/ProjectController.java @@ -1,9 +1,10 @@ package io.papermc.hangar.controller.internal; import io.papermc.hangar.controller.HangarController; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.internal.api.requests.projects.NewProject; import io.papermc.hangar.model.internal.api.responses.PossibleProjectOwner; +import io.papermc.hangar.security.annotations.unlocked.Unlocked; import io.papermc.hangar.service.internal.OrganizationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -48,6 +49,7 @@ public class ProjectController extends HangarController { return ResponseEntity.ok(possibleProjectOwners); } + @Unlocked @PostMapping(value = "/create", consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity createProject(@RequestBody @Valid NewProject newProject) { System.out.println(newProject); diff --git a/src/main/java/io/papermc/hangar/controller/validations/Validate.java b/src/main/java/io/papermc/hangar/controller/validations/Validate.java new file mode 100644 index 000000000..1d586444b --- /dev/null +++ b/src/main/java/io/papermc/hangar/controller/validations/Validate.java @@ -0,0 +1,57 @@ +package io.papermc.hangar.controller.validations; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.expression.Expression; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; + +import javax.validation.Constraint; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.Payload; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Constraint(validatedBy = Validate.ValidateValueMatchValidator.class) +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +@Repeatable(Validate.List.class) +public @interface Validate { + String SpEL() default ""; + String message() default "Invalid field"; + Class[] groups() default {}; + Class[] payload() default {}; + + class ValidateValueMatchValidator implements ConstraintValidator { + + @Autowired + StandardEvaluationContext evaluationContext; + private Expression expression; + + @Override + public void initialize(Validate constraintAnnotation) { + ExpressionParser expressionParser = new SpelExpressionParser(); + expression = expressionParser.parseExpression(constraintAnnotation.SpEL()); + } + + @Override + public boolean isValid(Object value, ConstraintValidatorContext context) { + if (value == null) return false; + Boolean bool = expression.getValue(evaluationContext, value, boolean.class); + return bool != null && bool; + } + } + + @Target(ElementType.FIELD) + @Retention(RetentionPolicy.RUNTIME) + @Documented + @interface List { + Validate[] value(); + } +} diff --git a/src/main/java/io/papermc/hangar/controllerold/Apiv1Controller.java b/src/main/java/io/papermc/hangar/controllerold/Apiv1Controller.java index 71cda4b7e..0d26cc9bf 100644 --- a/src/main/java/io/papermc/hangar/controllerold/Apiv1Controller.java +++ b/src/main/java/io/papermc/hangar/controllerold/Apiv1Controller.java @@ -47,7 +47,7 @@ public class Apiv1Controller extends HangarController { this.projectsTable = projectsTable; } - @PreAuthorize("@authenticationService.authV1ApiRequest(T(io.papermc.hangar.model.Permission).EditApiKeys, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") + @PreAuthorize("@authenticationService.authV1ApiRequest(T(io.papermc.hangar.model.common.Permission).EditApiKeys, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") @UserLock @Secured("ROLE_USER") @PostMapping("/v1/projects/{author}/{slug}/keys/new") // USED IN project settings (deployment key) @@ -67,7 +67,7 @@ public class Apiv1Controller extends HangarController { return ResponseEntity.ok(apiKeyObj); } - @PreAuthorize("@authenticationService.authV1ApiRequest(T(io.papermc.hangar.model.Permission).EditApiKeys, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") + @PreAuthorize("@authenticationService.authV1ApiRequest(T(io.papermc.hangar.model.common.Permission).EditApiKeys, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") @UserLock @Secured("ROLE_USER") @PostMapping("/v1/projects/{author}/{slug}/keys/revoke") // USED in project settings (deployment key) diff --git a/src/main/java/io/papermc/hangar/controllerold/ApplicationController.java b/src/main/java/io/papermc/hangar/controllerold/ApplicationController.java index 16e3b3697..304900f86 100644 --- a/src/main/java/io/papermc/hangar/controllerold/ApplicationController.java +++ b/src/main/java/io/papermc/hangar/controllerold/ApplicationController.java @@ -17,9 +17,9 @@ import io.papermc.hangar.db.modelold.RoleTable; import io.papermc.hangar.db.modelold.Stats; import io.papermc.hangar.db.modelold.UserOrganizationRolesTable; import io.papermc.hangar.db.modelold.UserProjectRolesTable; -import io.papermc.hangar.model.Permission; -import io.papermc.hangar.model.Platform; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.Permission; +import io.papermc.hangar.model.common.Platform; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.modelold.NamedPermission; import io.papermc.hangar.modelold.Role; import io.papermc.hangar.modelold.viewhelpers.Activity; diff --git a/src/main/java/io/papermc/hangar/controllerold/ChannelsController.java b/src/main/java/io/papermc/hangar/controllerold/ChannelsController.java index 1f3c37c78..75d6a6106 100644 --- a/src/main/java/io/papermc/hangar/controllerold/ChannelsController.java +++ b/src/main/java/io/papermc/hangar/controllerold/ChannelsController.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import io.papermc.hangar.db.modelold.ProjectsTable; -import io.papermc.hangar.model.Color; +import io.papermc.hangar.model.common.Color; import io.papermc.hangar.modelold.NamedPermission; import io.papermc.hangar.modelold.viewhelpers.ProjectData; import io.papermc.hangar.securityold.annotations.ProjectPermission; diff --git a/src/main/java/io/papermc/hangar/controllerold/ProjectsController.java b/src/main/java/io/papermc/hangar/controllerold/ProjectsController.java index f0713d30b..327af3a12 100644 --- a/src/main/java/io/papermc/hangar/controllerold/ProjectsController.java +++ b/src/main/java/io/papermc/hangar/controllerold/ProjectsController.java @@ -22,10 +22,10 @@ import io.papermc.hangar.db.modelold.ProjectsTable; import io.papermc.hangar.db.modelold.UserProjectRolesTable; import io.papermc.hangar.db.modelold.UsersTable; import io.papermc.hangar.exceptions.HangarException; -import io.papermc.hangar.model.Category; -import io.papermc.hangar.model.FlagReason; -import io.papermc.hangar.model.Permission; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.Permission; +import io.papermc.hangar.model.common.projects.Category; +import io.papermc.hangar.model.common.projects.FlagReason; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.model.internal.user.notifications.NotificationType; import io.papermc.hangar.modelold.NamedPermission; import io.papermc.hangar.modelold.generated.Note; diff --git a/src/main/java/io/papermc/hangar/controllerold/ReviewsController.java b/src/main/java/io/papermc/hangar/controllerold/ReviewsController.java index 849cc6607..ea4925456 100644 --- a/src/main/java/io/papermc/hangar/controllerold/ReviewsController.java +++ b/src/main/java/io/papermc/hangar/controllerold/ReviewsController.java @@ -6,8 +6,8 @@ import io.papermc.hangar.db.customtypes.LoggedActionType.VersionContext; import io.papermc.hangar.db.modelold.ProjectVersionReviewsTable; import io.papermc.hangar.db.modelold.ProjectVersionsTable; import io.papermc.hangar.db.modelold.UsersTable; -import io.papermc.hangar.model.Permission; -import io.papermc.hangar.model.ReviewState; +import io.papermc.hangar.model.common.Permission; +import io.papermc.hangar.model.common.projects.ReviewState; import io.papermc.hangar.model.internal.user.notifications.NotificationType; import io.papermc.hangar.modelold.NamedPermission; import io.papermc.hangar.modelold.viewhelpers.VersionData; diff --git a/src/main/java/io/papermc/hangar/controllerold/VersionsController.java b/src/main/java/io/papermc/hangar/controllerold/VersionsController.java index d45ffcc76..948d13df4 100644 --- a/src/main/java/io/papermc/hangar/controllerold/VersionsController.java +++ b/src/main/java/io/papermc/hangar/controllerold/VersionsController.java @@ -17,8 +17,8 @@ import io.papermc.hangar.db.modelold.ProjectVersionsTable; import io.papermc.hangar.db.modelold.ProjectsTable; import io.papermc.hangar.db.modelold.UsersTable; import io.papermc.hangar.exceptions.HangarException; -import io.papermc.hangar.model.ReviewState; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.ReviewState; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.modelold.DownloadType; import io.papermc.hangar.modelold.NamedPermission; import io.papermc.hangar.modelold.viewhelpers.ProjectData; diff --git a/src/main/java/io/papermc/hangar/controllerold/api/KeysApiController.java b/src/main/java/io/papermc/hangar/controllerold/api/KeysApiController.java index 9a70091bc..6d54a694f 100644 --- a/src/main/java/io/papermc/hangar/controllerold/api/KeysApiController.java +++ b/src/main/java/io/papermc/hangar/controllerold/api/KeysApiController.java @@ -3,7 +3,7 @@ package io.papermc.hangar.controllerold.api; import io.papermc.hangar.db.customtypes.LoggedActionType; import io.papermc.hangar.db.customtypes.LoggedActionType.UserContext; import io.papermc.hangar.exceptions.HangarApiException; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.modelold.ApiAuthInfo; import io.papermc.hangar.modelold.NamedPermission; import io.papermc.hangar.modelold.generated.ApiKeyRequest; @@ -39,7 +39,7 @@ public class KeysApiController implements KeysApi { } @Override - @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.Permission).EditApiKeys, T(io.papermc.hangar.controller.extras.ApiScope).ofGlobal())") + @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.common.Permission).EditApiKeys, T(io.papermc.hangar.controller.extras.ApiScope).ofGlobal())") public ResponseEntity createKey(ApiKeyRequest body) { List perms; try { @@ -72,7 +72,7 @@ public class KeysApiController implements KeysApi { } @Override - @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.Permission).EditApiKeys, T(io.papermc.hangar.controller.extras.ApiScope).ofGlobal())") + @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.common.Permission).EditApiKeys, T(io.papermc.hangar.controller.extras.ApiScope).ofGlobal())") public ResponseEntity deleteKey(String name) { if (apiAuthInfo.getUser() == null) { throw new HangarApiException(HttpStatus.BAD_REQUEST, "Public keys can't be used to delete"); diff --git a/src/main/java/io/papermc/hangar/controllerold/api/ProjectsApiController.java b/src/main/java/io/papermc/hangar/controllerold/api/ProjectsApiController.java index 4749b0088..f9759eebf 100644 --- a/src/main/java/io/papermc/hangar/controllerold/api/ProjectsApiController.java +++ b/src/main/java/io/papermc/hangar/controllerold/api/ProjectsApiController.java @@ -2,7 +2,7 @@ package io.papermc.hangar.controllerold.api; import io.papermc.hangar.config.hangar.HangarConfig; import io.papermc.hangar.exceptions.HangarApiException; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.modelold.ApiAuthInfo; import io.papermc.hangar.modelold.generated.Project; import io.papermc.hangar.modelold.generated.ProjectStatsDay; @@ -38,7 +38,7 @@ public class ProjectsApiController implements ProjectsApi { } // @Override -// @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") +// @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.common.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") // public ResponseEntity> showMembers(String author, String slug, Long inLimit, Long inOffset) { // long limit = ApiUtil.limitOrDefault(inLimit, hangarConfig.getProjects().getInitLoad()); // long offset = ApiUtil.offsetOrZero(inOffset); @@ -51,7 +51,7 @@ public class ProjectsApiController implements ProjectsApi { // } @Override - @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#id))") + @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.common.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#id))") public ResponseEntity showProject(long id) { boolean seeHidden = apiAuthInfo.getGlobalPerms().has(Permission.SeeHidden); Project project = projectApiService.getProject(id, seeHidden, apiAuthInfo.getUserId()); @@ -63,7 +63,7 @@ public class ProjectsApiController implements ProjectsApi { } @Override - @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.Permission).IsProjectMember, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") + @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.common.Permission).IsProjectMember, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") public ResponseEntity> showProjectStats(String author, String slug, @NotNull @Valid String fromDate, @NotNull @Valid String toDate) { LocalDate from = ApiUtil.parseDate(fromDate); LocalDate to = ApiUtil.parseDate(toDate); diff --git a/src/main/java/io/papermc/hangar/controllerold/api/VersionsApiController.java b/src/main/java/io/papermc/hangar/controllerold/api/VersionsApiController.java index c6ab3a9a7..3d44cf6d8 100644 --- a/src/main/java/io/papermc/hangar/controllerold/api/VersionsApiController.java +++ b/src/main/java/io/papermc/hangar/controllerold/api/VersionsApiController.java @@ -53,7 +53,7 @@ public class VersionsApiController implements VersionsApi { } @Override - @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.Permission).None, T(io.papermc.hangar.controller.extras.ApiScope).ofGlobal())") + @PreAuthorize("@authenticationService.handleApiRequest(T(io.papermc.hangar.model.common.Permission).None, T(io.papermc.hangar.controller.extras.ApiScope).ofGlobal())") public ResponseEntity> showPlatforms() { List platformInfoList = new ArrayList<>(); for (Platform platform : Platform.getValues()) { @@ -69,7 +69,7 @@ public class VersionsApiController implements VersionsApi { // moved from versions controller @Override - @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") + @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.common.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") public Object download(String author, String slug, String name, String token) { // ProjectsTable project = projectsTable.get(); // ProjectVersionsTable pvt = projectVersionsTable.get(); @@ -86,7 +86,7 @@ public class VersionsApiController implements VersionsApi { } @Override - @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") + @PreAuthorize("@authenticationService.authApiRequest(T(io.papermc.hangar.model.common.Permission).ViewPublicInfo, T(io.papermc.hangar.controller.extras.ApiScope).ofProject(#author, #slug))") public Object downloadRecommended(String author, String slug, String token) { // ProjectsTable project = projectsTable.get(); // ProjectVersionsTable recommendedVersion = versionService.getRecommendedVersion(project); diff --git a/src/main/java/io/papermc/hangar/controllerold/forms/SaveProjectForm.java b/src/main/java/io/papermc/hangar/controllerold/forms/SaveProjectForm.java index 80a9b00d7..34261dac3 100644 --- a/src/main/java/io/papermc/hangar/controllerold/forms/SaveProjectForm.java +++ b/src/main/java/io/papermc/hangar/controllerold/forms/SaveProjectForm.java @@ -5,7 +5,7 @@ import com.fasterxml.jackson.annotation.JsonCreator.Mode; import com.fasterxml.jackson.annotation.JsonProperty; import io.papermc.hangar.controllerold.forms.objects.License; import io.papermc.hangar.controllerold.forms.objects.ProjectLinks; -import io.papermc.hangar.model.Category; +import io.papermc.hangar.model.common.projects.Category; import org.jetbrains.annotations.NotNull; import java.util.Collection; diff --git a/src/main/java/io/papermc/hangar/controllerold/forms/objects/Channel.java b/src/main/java/io/papermc/hangar/controllerold/forms/objects/Channel.java index dd39bd812..609d81b2e 100644 --- a/src/main/java/io/papermc/hangar/controllerold/forms/objects/Channel.java +++ b/src/main/java/io/papermc/hangar/controllerold/forms/objects/Channel.java @@ -1,7 +1,7 @@ package io.papermc.hangar.controllerold.forms.objects; import com.fasterxml.jackson.annotation.JsonProperty; -import io.papermc.hangar.model.Color; +import io.papermc.hangar.model.common.Color; import org.jetbrains.annotations.NotNull; import java.util.Objects; diff --git a/src/main/java/io/papermc/hangar/db/dao/PermissionsDAO.java b/src/main/java/io/papermc/hangar/db/dao/PermissionsDAO.java index 3bf9e5d4f..d2f17700f 100644 --- a/src/main/java/io/papermc/hangar/db/dao/PermissionsDAO.java +++ b/src/main/java/io/papermc/hangar/db/dao/PermissionsDAO.java @@ -1,6 +1,6 @@ package io.papermc.hangar.db.dao; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; import org.jdbi.v3.sqlobject.statement.SqlQuery; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/io/papermc/hangar/db/dao/internal/table/OrganizationDAO.java b/src/main/java/io/papermc/hangar/db/dao/internal/table/OrganizationDAO.java index 4983d3fbf..ef5830ada 100644 --- a/src/main/java/io/papermc/hangar/db/dao/internal/table/OrganizationDAO.java +++ b/src/main/java/io/papermc/hangar/db/dao/internal/table/OrganizationDAO.java @@ -1,6 +1,6 @@ package io.papermc.hangar.db.dao.internal.table; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.db.OrganizationTable; import org.jdbi.v3.sqlobject.config.RegisterConstructorMapper; import org.jdbi.v3.sqlobject.customizer.BindBean; diff --git a/src/main/java/io/papermc/hangar/db/dao/internal/table/roles/RoleDAO.java b/src/main/java/io/papermc/hangar/db/dao/internal/table/roles/RoleDAO.java index 66a985de5..d10646315 100644 --- a/src/main/java/io/papermc/hangar/db/dao/internal/table/roles/RoleDAO.java +++ b/src/main/java/io/papermc/hangar/db/dao/internal/table/roles/RoleDAO.java @@ -1,7 +1,7 @@ package io.papermc.hangar.db.dao.internal.table.roles; +import io.papermc.hangar.model.common.roles.Role; import io.papermc.hangar.model.db.roles.RoleTable; -import io.papermc.hangar.model.roles.Role; public interface RoleDAO>> { diff --git a/src/main/java/io/papermc/hangar/db/dao/v1/VersionsApiDAO.java b/src/main/java/io/papermc/hangar/db/dao/v1/VersionsApiDAO.java index 21f37a2d3..9f6ff7f39 100644 --- a/src/main/java/io/papermc/hangar/db/dao/v1/VersionsApiDAO.java +++ b/src/main/java/io/papermc/hangar/db/dao/v1/VersionsApiDAO.java @@ -1,10 +1,10 @@ package io.papermc.hangar.db.dao.v1; -import io.papermc.hangar.model.Color; import io.papermc.hangar.model.api.color.TagColor; import io.papermc.hangar.model.api.project.version.Tag; import io.papermc.hangar.model.api.project.version.Version; import io.papermc.hangar.model.api.project.version.VersionStats; +import io.papermc.hangar.model.common.Color; import io.papermc.hangar.util.StringUtils; import org.jdbi.v3.core.result.LinkedHashMapRowReducer; import org.jdbi.v3.core.result.RowView; @@ -138,7 +138,7 @@ public interface VersionsApiDAO { List tags = new ArrayList<>(); for (int i = 0; i < tagNames.length; i++) { TagColor apiTagColor; - io.papermc.hangar.model.TagColor tagColor = io.papermc.hangar.model.TagColor.getByName(tagNames[i]); + io.papermc.hangar.model.common.TagColor tagColor = io.papermc.hangar.model.common.TagColor.getByName(tagNames[i]); if (tagColor == null) { Color color = Color.VALUES[tagColors[i]]; apiTagColor = new TagColor(null, color.getHex()); diff --git a/src/main/java/io/papermc/hangar/db/daoold/OrganizationDao.java b/src/main/java/io/papermc/hangar/db/daoold/OrganizationDao.java index d3af031b4..ef55f48db 100644 --- a/src/main/java/io/papermc/hangar/db/daoold/OrganizationDao.java +++ b/src/main/java/io/papermc/hangar/db/daoold/OrganizationDao.java @@ -3,7 +3,7 @@ package io.papermc.hangar.db.daoold; import io.papermc.hangar.db.modelold.OrganizationsTable; import io.papermc.hangar.db.modelold.UserOrganizationRolesTable; import io.papermc.hangar.db.modelold.UsersTable; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; import org.jdbi.v3.sqlobject.customizer.BindBean; import org.jdbi.v3.sqlobject.customizer.Timestamped; diff --git a/src/main/java/io/papermc/hangar/db/daoold/PlatformVersionsDao.java b/src/main/java/io/papermc/hangar/db/daoold/PlatformVersionsDao.java index a3b7c8e1c..51575cda8 100644 --- a/src/main/java/io/papermc/hangar/db/daoold/PlatformVersionsDao.java +++ b/src/main/java/io/papermc/hangar/db/daoold/PlatformVersionsDao.java @@ -1,7 +1,7 @@ package io.papermc.hangar.db.daoold; import io.papermc.hangar.db.modelold.PlatformVersionsTable; -import io.papermc.hangar.model.Platform; +import io.papermc.hangar.model.common.Platform; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.enums.EnumStrategy; import org.jdbi.v3.sqlobject.config.KeyColumn; diff --git a/src/main/java/io/papermc/hangar/db/daoold/ProjectChannelDao.java b/src/main/java/io/papermc/hangar/db/daoold/ProjectChannelDao.java index cbe8ec959..e74b6e0d0 100644 --- a/src/main/java/io/papermc/hangar/db/daoold/ProjectChannelDao.java +++ b/src/main/java/io/papermc/hangar/db/daoold/ProjectChannelDao.java @@ -1,7 +1,7 @@ package io.papermc.hangar.db.daoold; import io.papermc.hangar.db.modelold.ProjectChannelsTable; -import io.papermc.hangar.model.Color; +import io.papermc.hangar.model.common.Color; import io.papermc.hangar.serviceold.project.ChannelService; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; diff --git a/src/main/java/io/papermc/hangar/db/daoold/ProjectDao.java b/src/main/java/io/papermc/hangar/db/daoold/ProjectDao.java index 0d95536d4..0f23f90f5 100644 --- a/src/main/java/io/papermc/hangar/db/daoold/ProjectDao.java +++ b/src/main/java/io/papermc/hangar/db/daoold/ProjectDao.java @@ -3,7 +3,7 @@ package io.papermc.hangar.db.daoold; import io.papermc.hangar.db.modelold.ProjectsTable; import io.papermc.hangar.db.modelold.UserProjectRolesTable; import io.papermc.hangar.db.modelold.UsersTable; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.modelold.generated.ProjectStatsAll; import io.papermc.hangar.modelold.viewhelpers.ProjectApprovalData; import io.papermc.hangar.modelold.viewhelpers.ProjectMissingFile; diff --git a/src/main/java/io/papermc/hangar/db/daoold/ProjectVersionDao.java b/src/main/java/io/papermc/hangar/db/daoold/ProjectVersionDao.java index 80fda2692..4ee269b51 100644 --- a/src/main/java/io/papermc/hangar/db/daoold/ProjectVersionDao.java +++ b/src/main/java/io/papermc/hangar/db/daoold/ProjectVersionDao.java @@ -4,7 +4,7 @@ import io.papermc.hangar.db.mappers.PlatformDependencyMapper; import io.papermc.hangar.db.mappers.VersionDependenciesMapper; import io.papermc.hangar.db.modelold.ProjectVersionTagsTable; import io.papermc.hangar.db.modelold.ProjectVersionsTable; -import io.papermc.hangar.model.ReviewState; +import io.papermc.hangar.model.common.projects.ReviewState; import io.papermc.hangar.modelold.viewhelpers.ReviewQueueEntry; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; diff --git a/src/main/java/io/papermc/hangar/db/daoold/api/mappers/VersionMapper.java b/src/main/java/io/papermc/hangar/db/daoold/api/mappers/VersionMapper.java index 2601a24ef..2af079b1a 100644 --- a/src/main/java/io/papermc/hangar/db/daoold/api/mappers/VersionMapper.java +++ b/src/main/java/io/papermc/hangar/db/daoold/api/mappers/VersionMapper.java @@ -1,8 +1,8 @@ package io.papermc.hangar.db.daoold.api.mappers; -import io.papermc.hangar.model.Color; -import io.papermc.hangar.model.ReviewState; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.Color; +import io.papermc.hangar.model.common.projects.ReviewState; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.modelold.generated.FileInfo; import io.papermc.hangar.modelold.generated.Tag; import io.papermc.hangar.modelold.generated.TagColor; @@ -38,7 +38,7 @@ public class VersionMapper implements RowMapper { List tags = new ArrayList<>(); for (int i = 0; i < tagNames.length; i++) { - io.papermc.hangar.model.TagColor tagColor = io.papermc.hangar.model.TagColor.getByName(tagNames[i]); + io.papermc.hangar.model.common.TagColor tagColor = io.papermc.hangar.model.common.TagColor.getByName(tagNames[i]); Tag newTag = new Tag().name(tagNames[i]); if (tagData[i] != null) { newTag.data(StringUtils.formatVersionNumbers(Arrays.asList(tagData[i].split(", ")))); diff --git a/src/main/java/io/papermc/hangar/db/mappers/PermissionMapper.java b/src/main/java/io/papermc/hangar/db/mappers/PermissionMapper.java index 4dc7f0b79..394afbb8d 100644 --- a/src/main/java/io/papermc/hangar/db/mappers/PermissionMapper.java +++ b/src/main/java/io/papermc/hangar/db/mappers/PermissionMapper.java @@ -1,6 +1,6 @@ package io.papermc.hangar.db.mappers; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import org.jdbi.v3.core.mapper.ColumnMapper; import org.jdbi.v3.core.statement.StatementContext; diff --git a/src/main/java/io/papermc/hangar/db/mappers/PromotedVersionMapper.java b/src/main/java/io/papermc/hangar/db/mappers/PromotedVersionMapper.java index b6932b63a..c494681c4 100644 --- a/src/main/java/io/papermc/hangar/db/mappers/PromotedVersionMapper.java +++ b/src/main/java/io/papermc/hangar/db/mappers/PromotedVersionMapper.java @@ -6,9 +6,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.NullNode; import io.papermc.hangar.db.customtypes.JSONB; -import io.papermc.hangar.model.TagColor; import io.papermc.hangar.model.api.project.version.PromotedVersion; import io.papermc.hangar.model.api.project.version.PromotedVersionTag; +import io.papermc.hangar.model.common.TagColor; import io.papermc.hangar.util.StringUtils; import org.jdbi.v3.core.mapper.ColumnMapper; import org.jdbi.v3.core.statement.StatementContext; diff --git a/src/main/java/io/papermc/hangar/db/mappers/RoleMapperFactory.java b/src/main/java/io/papermc/hangar/db/mappers/RoleMapperFactory.java index 680306f5e..448d403a8 100644 --- a/src/main/java/io/papermc/hangar/db/mappers/RoleMapperFactory.java +++ b/src/main/java/io/papermc/hangar/db/mappers/RoleMapperFactory.java @@ -1,7 +1,7 @@ package io.papermc.hangar.db.mappers; -import io.papermc.hangar.model.roles.GlobalRole; -import io.papermc.hangar.model.roles.Role; +import io.papermc.hangar.model.common.roles.GlobalRole; +import io.papermc.hangar.model.common.roles.Role; import org.jdbi.v3.core.config.ConfigRegistry; import org.jdbi.v3.core.mapper.ColumnMapper; import org.jdbi.v3.core.mapper.ColumnMapperFactory; diff --git a/src/main/java/io/papermc/hangar/db/modelold/ApiKeysTable.java b/src/main/java/io/papermc/hangar/db/modelold/ApiKeysTable.java index ab9162c44..c0c6fc9ce 100644 --- a/src/main/java/io/papermc/hangar/db/modelold/ApiKeysTable.java +++ b/src/main/java/io/papermc/hangar/db/modelold/ApiKeysTable.java @@ -1,7 +1,7 @@ package io.papermc.hangar.db.modelold; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import org.jdbi.v3.core.mapper.Nested; import java.time.OffsetDateTime; diff --git a/src/main/java/io/papermc/hangar/db/modelold/PlatformVersionsTable.java b/src/main/java/io/papermc/hangar/db/modelold/PlatformVersionsTable.java index f735656ca..07aca9cb8 100644 --- a/src/main/java/io/papermc/hangar/db/modelold/PlatformVersionsTable.java +++ b/src/main/java/io/papermc/hangar/db/modelold/PlatformVersionsTable.java @@ -1,6 +1,6 @@ package io.papermc.hangar.db.modelold; -import io.papermc.hangar.model.Platform; +import io.papermc.hangar.model.common.Platform; import org.jdbi.v3.core.enums.EnumByOrdinal; import java.time.OffsetDateTime; diff --git a/src/main/java/io/papermc/hangar/db/modelold/ProjectChannelsTable.java b/src/main/java/io/papermc/hangar/db/modelold/ProjectChannelsTable.java index 015842c19..24d497808 100644 --- a/src/main/java/io/papermc/hangar/db/modelold/ProjectChannelsTable.java +++ b/src/main/java/io/papermc/hangar/db/modelold/ProjectChannelsTable.java @@ -1,7 +1,7 @@ package io.papermc.hangar.db.modelold; -import io.papermc.hangar.model.Color; +import io.papermc.hangar.model.common.Color; import org.jdbi.v3.core.enums.EnumByOrdinal; import java.time.OffsetDateTime; diff --git a/src/main/java/io/papermc/hangar/db/modelold/ProjectFlagsTable.java b/src/main/java/io/papermc/hangar/db/modelold/ProjectFlagsTable.java index 28bf0d18d..7521b07b8 100644 --- a/src/main/java/io/papermc/hangar/db/modelold/ProjectFlagsTable.java +++ b/src/main/java/io/papermc/hangar/db/modelold/ProjectFlagsTable.java @@ -1,7 +1,7 @@ package io.papermc.hangar.db.modelold; -import io.papermc.hangar.model.FlagReason; +import io.papermc.hangar.model.common.projects.FlagReason; import org.jdbi.v3.core.enums.EnumByOrdinal; import java.time.OffsetDateTime; diff --git a/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionTagsTable.java b/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionTagsTable.java index 1428e1e7a..4671a2721 100644 --- a/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionTagsTable.java +++ b/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionTagsTable.java @@ -1,6 +1,6 @@ package io.papermc.hangar.db.modelold; -import io.papermc.hangar.model.TagColor; +import io.papermc.hangar.model.common.TagColor; import org.jdbi.v3.core.enums.EnumByOrdinal; import java.util.List; diff --git a/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionVisibilityChangesTable.java b/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionVisibilityChangesTable.java index c5d0e5040..896c34499 100644 --- a/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionVisibilityChangesTable.java +++ b/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionVisibilityChangesTable.java @@ -1,7 +1,7 @@ package io.papermc.hangar.db.modelold; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.Visibility; import org.jdbi.v3.core.enums.EnumByOrdinal; import java.time.OffsetDateTime; diff --git a/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionsTable.java b/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionsTable.java index c7f36a375..f5b5b3e6b 100644 --- a/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionsTable.java +++ b/src/main/java/io/papermc/hangar/db/modelold/ProjectVersionsTable.java @@ -1,9 +1,9 @@ package io.papermc.hangar.db.modelold; -import io.papermc.hangar.model.ReviewState; -import io.papermc.hangar.model.Visibility; import io.papermc.hangar.model.Visible; +import io.papermc.hangar.model.common.projects.ReviewState; +import io.papermc.hangar.model.common.projects.Visibility; import org.jdbi.v3.core.annotation.Unmappable; import org.jdbi.v3.core.enums.EnumByOrdinal; diff --git a/src/main/java/io/papermc/hangar/db/modelold/ProjectVisibilityChangesTable.java b/src/main/java/io/papermc/hangar/db/modelold/ProjectVisibilityChangesTable.java index f8f0c69de..450971941 100644 --- a/src/main/java/io/papermc/hangar/db/modelold/ProjectVisibilityChangesTable.java +++ b/src/main/java/io/papermc/hangar/db/modelold/ProjectVisibilityChangesTable.java @@ -1,12 +1,11 @@ package io.papermc.hangar.db.modelold; +import io.papermc.hangar.model.common.projects.Visibility; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.springframework.lang.Nullable; import java.time.OffsetDateTime; -import io.papermc.hangar.model.Visibility; - public class ProjectVisibilityChangesTable { private long id; diff --git a/src/main/java/io/papermc/hangar/db/modelold/ProjectsTable.java b/src/main/java/io/papermc/hangar/db/modelold/ProjectsTable.java index f1887f7a1..da9c355c0 100644 --- a/src/main/java/io/papermc/hangar/db/modelold/ProjectsTable.java +++ b/src/main/java/io/papermc/hangar/db/modelold/ProjectsTable.java @@ -3,10 +3,10 @@ package io.papermc.hangar.db.modelold; import io.papermc.hangar.controllerold.forms.NewProjectForm; import io.papermc.hangar.db.customtypes.JSONB; -import io.papermc.hangar.model.Category; -import io.papermc.hangar.model.Visibility; import io.papermc.hangar.model.Visible; import io.papermc.hangar.model.Visitable; +import io.papermc.hangar.model.common.projects.Category; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.util.StringUtils; import org.jdbi.v3.core.annotation.Unmappable; import org.jdbi.v3.core.enums.EnumByOrdinal; diff --git a/src/main/java/io/papermc/hangar/model/Visible.java b/src/main/java/io/papermc/hangar/model/Visible.java index 0baa6fb59..0a51b8399 100644 --- a/src/main/java/io/papermc/hangar/model/Visible.java +++ b/src/main/java/io/papermc/hangar/model/Visible.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.Visibility; import org.jdbi.v3.core.enums.EnumByOrdinal; public interface Visible { diff --git a/src/main/java/io/papermc/hangar/model/api/User.java b/src/main/java/io/papermc/hangar/model/api/User.java index f39e3e031..f8dc72212 100644 --- a/src/main/java/io/papermc/hangar/model/api/User.java +++ b/src/main/java/io/papermc/hangar/model/api/User.java @@ -2,7 +2,7 @@ package io.papermc.hangar.model.api; import io.papermc.hangar.model.Model; import io.papermc.hangar.model.Named; -import io.papermc.hangar.model.roles.GlobalRole; +import io.papermc.hangar.model.common.roles.GlobalRole; import org.jdbi.v3.core.mapper.reflect.JdbiConstructor; import java.time.OffsetDateTime; diff --git a/src/main/java/io/papermc/hangar/model/api/permissions/PermissionCheck.java b/src/main/java/io/papermc/hangar/model/api/permissions/PermissionCheck.java index 5b155a588..2543f6816 100644 --- a/src/main/java/io/papermc/hangar/model/api/permissions/PermissionCheck.java +++ b/src/main/java/io/papermc/hangar/model/api/permissions/PermissionCheck.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model.api.permissions; -import io.papermc.hangar.model.PermissionType; +import io.papermc.hangar.model.common.PermissionType; public class PermissionCheck { diff --git a/src/main/java/io/papermc/hangar/model/api/permissions/UserPermissions.java b/src/main/java/io/papermc/hangar/model/api/permissions/UserPermissions.java index 27e2b1af6..3a8c9dc32 100644 --- a/src/main/java/io/papermc/hangar/model/api/permissions/UserPermissions.java +++ b/src/main/java/io/papermc/hangar/model/api/permissions/UserPermissions.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model.api.permissions; -import io.papermc.hangar.model.PermissionType; +import io.papermc.hangar.model.common.PermissionType; import io.papermc.hangar.modelold.NamedPermission; import java.util.List; diff --git a/src/main/java/io/papermc/hangar/model/api/project/Project.java b/src/main/java/io/papermc/hangar/model/api/project/Project.java index 9b509e337..405be5d79 100644 --- a/src/main/java/io/papermc/hangar/model/api/project/Project.java +++ b/src/main/java/io/papermc/hangar/model/api/project/Project.java @@ -1,8 +1,8 @@ package io.papermc.hangar.model.api.project; -import io.papermc.hangar.model.Category; -import io.papermc.hangar.model.Visibility; import io.papermc.hangar.model.api.project.version.PromotedVersion; +import io.papermc.hangar.model.common.projects.Category; +import io.papermc.hangar.model.common.projects.Visibility; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.mapper.Nested; import org.jdbi.v3.core.mapper.reflect.JdbiConstructor; diff --git a/src/main/java/io/papermc/hangar/model/api/project/ProjectCompact.java b/src/main/java/io/papermc/hangar/model/api/project/ProjectCompact.java index 7e646eb2a..9fe23da03 100644 --- a/src/main/java/io/papermc/hangar/model/api/project/ProjectCompact.java +++ b/src/main/java/io/papermc/hangar/model/api/project/ProjectCompact.java @@ -1,11 +1,11 @@ package io.papermc.hangar.model.api.project; -import io.papermc.hangar.model.Category; import io.papermc.hangar.model.Model; import io.papermc.hangar.model.Named; -import io.papermc.hangar.model.Visibility; import io.papermc.hangar.model.Visible; import io.papermc.hangar.model.api.project.version.PromotedVersion; +import io.papermc.hangar.model.common.projects.Category; +import io.papermc.hangar.model.common.projects.Visibility; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.mapper.Nested; diff --git a/src/main/java/io/papermc/hangar/model/api/project/ProjectMember.java b/src/main/java/io/papermc/hangar/model/api/project/ProjectMember.java index 54990d38a..039668632 100644 --- a/src/main/java/io/papermc/hangar/model/api/project/ProjectMember.java +++ b/src/main/java/io/papermc/hangar/model/api/project/ProjectMember.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model.api.project; -import io.papermc.hangar.model.roles.ProjectRole; +import io.papermc.hangar.model.common.roles.ProjectRole; import java.util.List; diff --git a/src/main/java/io/papermc/hangar/model/api/project/version/PromotedVersionTag.java b/src/main/java/io/papermc/hangar/model/api/project/version/PromotedVersionTag.java index 23c8aefb3..84c25603a 100644 --- a/src/main/java/io/papermc/hangar/model/api/project/version/PromotedVersionTag.java +++ b/src/main/java/io/papermc/hangar/model/api/project/version/PromotedVersionTag.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model.api.project.version; -import io.papermc.hangar.model.TagColor; +import io.papermc.hangar.model.common.TagColor; public class PromotedVersionTag extends Tag { diff --git a/src/main/java/io/papermc/hangar/model/api/project/version/Version.java b/src/main/java/io/papermc/hangar/model/api/project/version/Version.java index 42b601ec1..700bde7f5 100644 --- a/src/main/java/io/papermc/hangar/model/api/project/version/Version.java +++ b/src/main/java/io/papermc/hangar/model/api/project/version/Version.java @@ -2,10 +2,10 @@ package io.papermc.hangar.model.api.project.version; import io.papermc.hangar.model.Model; import io.papermc.hangar.model.Named; -import io.papermc.hangar.model.Platform; -import io.papermc.hangar.model.ReviewState; -import io.papermc.hangar.model.Visibility; import io.papermc.hangar.model.Visible; +import io.papermc.hangar.model.common.Platform; +import io.papermc.hangar.model.common.projects.ReviewState; +import io.papermc.hangar.model.common.projects.Visibility; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.mapper.Nested; import org.jdbi.v3.core.mapper.reflect.ColumnName; diff --git a/src/main/java/io/papermc/hangar/model/Color.java b/src/main/java/io/papermc/hangar/model/common/Color.java similarity index 98% rename from src/main/java/io/papermc/hangar/model/Color.java rename to src/main/java/io/papermc/hangar/model/common/Color.java index bd91ec4b8..0a952529f 100644 --- a/src/main/java/io/papermc/hangar/model/Color.java +++ b/src/main/java/io/papermc/hangar/model/common/Color.java @@ -1,4 +1,4 @@ -package io.papermc.hangar.model; +package io.papermc.hangar.model.common; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonFormat; diff --git a/src/main/java/io/papermc/hangar/model/Permission.java b/src/main/java/io/papermc/hangar/model/common/Permission.java similarity index 99% rename from src/main/java/io/papermc/hangar/model/Permission.java rename to src/main/java/io/papermc/hangar/model/common/Permission.java index 36f63bf0c..70bb4b0fe 100644 --- a/src/main/java/io/papermc/hangar/model/Permission.java +++ b/src/main/java/io/papermc/hangar/model/common/Permission.java @@ -1,4 +1,4 @@ -package io.papermc.hangar.model; +package io.papermc.hangar.model.common; import com.fasterxml.jackson.annotation.JsonValue; import io.papermc.hangar.modelold.NamedPermission; diff --git a/src/main/java/io/papermc/hangar/model/PermissionType.java b/src/main/java/io/papermc/hangar/model/common/PermissionType.java similarity index 94% rename from src/main/java/io/papermc/hangar/model/PermissionType.java rename to src/main/java/io/papermc/hangar/model/common/PermissionType.java index a7ddaf4b5..37e7eda08 100644 --- a/src/main/java/io/papermc/hangar/model/PermissionType.java +++ b/src/main/java/io/papermc/hangar/model/common/PermissionType.java @@ -1,4 +1,4 @@ -package io.papermc.hangar.model; +package io.papermc.hangar.model.common; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; diff --git a/src/main/java/io/papermc/hangar/model/Platform.java b/src/main/java/io/papermc/hangar/model/common/Platform.java similarity index 98% rename from src/main/java/io/papermc/hangar/model/Platform.java rename to src/main/java/io/papermc/hangar/model/common/Platform.java index ad6f7c67e..4fdd4b215 100644 --- a/src/main/java/io/papermc/hangar/model/Platform.java +++ b/src/main/java/io/papermc/hangar/model/common/Platform.java @@ -1,4 +1,4 @@ -package io.papermc.hangar.model; +package io.papermc.hangar.model.common; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonValue; diff --git a/src/main/java/io/papermc/hangar/model/TagColor.java b/src/main/java/io/papermc/hangar/model/common/TagColor.java similarity index 96% rename from src/main/java/io/papermc/hangar/model/TagColor.java rename to src/main/java/io/papermc/hangar/model/common/TagColor.java index 270a67a2f..87a7e84f4 100644 --- a/src/main/java/io/papermc/hangar/model/TagColor.java +++ b/src/main/java/io/papermc/hangar/model/common/TagColor.java @@ -1,4 +1,4 @@ -package io.papermc.hangar.model; +package io.papermc.hangar.model.common; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat.Shape; diff --git a/src/main/java/io/papermc/hangar/model/Category.java b/src/main/java/io/papermc/hangar/model/common/projects/Category.java similarity index 98% rename from src/main/java/io/papermc/hangar/model/Category.java rename to src/main/java/io/papermc/hangar/model/common/projects/Category.java index 22cdfe6d4..f3c77966a 100644 --- a/src/main/java/io/papermc/hangar/model/Category.java +++ b/src/main/java/io/papermc/hangar/model/common/projects/Category.java @@ -1,4 +1,4 @@ -package io.papermc.hangar.model; +package io.papermc.hangar.model.common.projects; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonFormat; diff --git a/src/main/java/io/papermc/hangar/model/FlagReason.java b/src/main/java/io/papermc/hangar/model/common/projects/FlagReason.java similarity index 92% rename from src/main/java/io/papermc/hangar/model/FlagReason.java rename to src/main/java/io/papermc/hangar/model/common/projects/FlagReason.java index dca92fdaa..e20641b99 100644 --- a/src/main/java/io/papermc/hangar/model/FlagReason.java +++ b/src/main/java/io/papermc/hangar/model/common/projects/FlagReason.java @@ -1,4 +1,4 @@ -package io.papermc.hangar.model; +package io.papermc.hangar.model.common.projects; public enum FlagReason { diff --git a/src/main/java/io/papermc/hangar/model/ReviewState.java b/src/main/java/io/papermc/hangar/model/common/projects/ReviewState.java similarity index 94% rename from src/main/java/io/papermc/hangar/model/ReviewState.java rename to src/main/java/io/papermc/hangar/model/common/projects/ReviewState.java index 509eeaf30..ba01a58e1 100644 --- a/src/main/java/io/papermc/hangar/model/ReviewState.java +++ b/src/main/java/io/papermc/hangar/model/common/projects/ReviewState.java @@ -1,4 +1,4 @@ -package io.papermc.hangar.model; +package io.papermc.hangar.model.common.projects; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; diff --git a/src/main/java/io/papermc/hangar/model/Visibility.java b/src/main/java/io/papermc/hangar/model/common/projects/Visibility.java similarity index 96% rename from src/main/java/io/papermc/hangar/model/Visibility.java rename to src/main/java/io/papermc/hangar/model/common/projects/Visibility.java index b713af271..76fea44af 100644 --- a/src/main/java/io/papermc/hangar/model/Visibility.java +++ b/src/main/java/io/papermc/hangar/model/common/projects/Visibility.java @@ -1,4 +1,4 @@ -package io.papermc.hangar.model; +package io.papermc.hangar.model.common.projects; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; diff --git a/src/main/java/io/papermc/hangar/model/roles/GlobalRole.java b/src/main/java/io/papermc/hangar/model/common/roles/GlobalRole.java similarity index 96% rename from src/main/java/io/papermc/hangar/model/roles/GlobalRole.java rename to src/main/java/io/papermc/hangar/model/common/roles/GlobalRole.java index ffefdb9a0..c397be838 100644 --- a/src/main/java/io/papermc/hangar/model/roles/GlobalRole.java +++ b/src/main/java/io/papermc/hangar/model/common/roles/GlobalRole.java @@ -1,9 +1,9 @@ -package io.papermc.hangar.model.roles; +package io.papermc.hangar.model.common.roles; import com.fasterxml.jackson.annotation.JsonFormat; import io.papermc.hangar.db.customtypes.RoleCategory; -import io.papermc.hangar.model.Color; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Color; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.db.roles.GlobalRoleTable; import org.jdbi.v3.core.statement.StatementContext; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/io/papermc/hangar/model/roles/OrganizationRole.java b/src/main/java/io/papermc/hangar/model/common/roles/OrganizationRole.java similarity index 95% rename from src/main/java/io/papermc/hangar/model/roles/OrganizationRole.java rename to src/main/java/io/papermc/hangar/model/common/roles/OrganizationRole.java index a60df551e..03db2c737 100644 --- a/src/main/java/io/papermc/hangar/model/roles/OrganizationRole.java +++ b/src/main/java/io/papermc/hangar/model/common/roles/OrganizationRole.java @@ -1,8 +1,8 @@ -package io.papermc.hangar.model.roles; +package io.papermc.hangar.model.common.roles; import io.papermc.hangar.db.customtypes.RoleCategory; -import io.papermc.hangar.model.Color; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Color; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.db.roles.OrganizationRoleTable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/io/papermc/hangar/model/roles/ProjectRole.java b/src/main/java/io/papermc/hangar/model/common/roles/ProjectRole.java similarity index 95% rename from src/main/java/io/papermc/hangar/model/roles/ProjectRole.java rename to src/main/java/io/papermc/hangar/model/common/roles/ProjectRole.java index 374fb794c..37ff91ec9 100644 --- a/src/main/java/io/papermc/hangar/model/roles/ProjectRole.java +++ b/src/main/java/io/papermc/hangar/model/common/roles/ProjectRole.java @@ -1,8 +1,8 @@ -package io.papermc.hangar.model.roles; +package io.papermc.hangar.model.common.roles; import io.papermc.hangar.db.customtypes.RoleCategory; -import io.papermc.hangar.model.Color; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Color; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.db.roles.ProjectRoleTable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/io/papermc/hangar/model/roles/Role.java b/src/main/java/io/papermc/hangar/model/common/roles/Role.java similarity index 91% rename from src/main/java/io/papermc/hangar/model/roles/Role.java rename to src/main/java/io/papermc/hangar/model/common/roles/Role.java index 1123cf928..3e1c319f4 100644 --- a/src/main/java/io/papermc/hangar/model/roles/Role.java +++ b/src/main/java/io/papermc/hangar/model/common/roles/Role.java @@ -1,8 +1,8 @@ -package io.papermc.hangar.model.roles; +package io.papermc.hangar.model.common.roles; import io.papermc.hangar.db.customtypes.RoleCategory; -import io.papermc.hangar.model.Color; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Color; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.db.roles.RoleTable; import org.jdbi.v3.core.argument.Argument; import org.jdbi.v3.core.statement.StatementContext; diff --git a/src/main/java/io/papermc/hangar/model/db/auth/ApiKeyTable.java b/src/main/java/io/papermc/hangar/model/db/auth/ApiKeyTable.java index bf7fbe362..4013e3e06 100644 --- a/src/main/java/io/papermc/hangar/model/db/auth/ApiKeyTable.java +++ b/src/main/java/io/papermc/hangar/model/db/auth/ApiKeyTable.java @@ -1,7 +1,7 @@ package io.papermc.hangar.model.db.auth; import io.papermc.hangar.model.Named; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.db.Table; import org.jdbi.v3.core.mapper.PropagateNull; import org.jdbi.v3.core.mapper.reflect.JdbiConstructor; diff --git a/src/main/java/io/papermc/hangar/model/db/projects/ProjectFlagTable.java b/src/main/java/io/papermc/hangar/model/db/projects/ProjectFlagTable.java index 7be9c63cb..4f1f05e1a 100644 --- a/src/main/java/io/papermc/hangar/model/db/projects/ProjectFlagTable.java +++ b/src/main/java/io/papermc/hangar/model/db/projects/ProjectFlagTable.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model.db.projects; -import io.papermc.hangar.model.FlagReason; +import io.papermc.hangar.model.common.projects.FlagReason; import io.papermc.hangar.model.db.Table; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.mapper.reflect.JdbiConstructor; diff --git a/src/main/java/io/papermc/hangar/model/db/projects/ProjectTable.java b/src/main/java/io/papermc/hangar/model/db/projects/ProjectTable.java index ac2167b7e..cb6a4333f 100644 --- a/src/main/java/io/papermc/hangar/model/db/projects/ProjectTable.java +++ b/src/main/java/io/papermc/hangar/model/db/projects/ProjectTable.java @@ -2,10 +2,10 @@ package io.papermc.hangar.model.db.projects; import io.papermc.hangar.controllerold.forms.NewProjectForm; import io.papermc.hangar.db.customtypes.JSONB; -import io.papermc.hangar.model.Category; -import io.papermc.hangar.model.Visibility; import io.papermc.hangar.model.Visible; import io.papermc.hangar.model.Visitable; +import io.papermc.hangar.model.common.projects.Category; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.model.db.Table; import io.papermc.hangar.util.StringUtils; import org.jdbi.v3.core.enums.EnumByOrdinal; diff --git a/src/main/java/io/papermc/hangar/model/db/projects/ProjectVisibilityChangeTable.java b/src/main/java/io/papermc/hangar/model/db/projects/ProjectVisibilityChangeTable.java index 2b16b81c0..87b38ad68 100644 --- a/src/main/java/io/papermc/hangar/model/db/projects/ProjectVisibilityChangeTable.java +++ b/src/main/java/io/papermc/hangar/model/db/projects/ProjectVisibilityChangeTable.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model.db.projects; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.model.db.Table; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.mapper.reflect.JdbiConstructor; diff --git a/src/main/java/io/papermc/hangar/model/db/roles/ExtendedRoleTable.java b/src/main/java/io/papermc/hangar/model/db/roles/ExtendedRoleTable.java index 974d23cea..b4dbfb40c 100644 --- a/src/main/java/io/papermc/hangar/model/db/roles/ExtendedRoleTable.java +++ b/src/main/java/io/papermc/hangar/model/db/roles/ExtendedRoleTable.java @@ -1,7 +1,7 @@ package io.papermc.hangar.model.db.roles; +import io.papermc.hangar.model.common.roles.Role; import io.papermc.hangar.model.db.Table; -import io.papermc.hangar.model.roles.Role; import java.time.OffsetDateTime; diff --git a/src/main/java/io/papermc/hangar/model/db/roles/GlobalRoleTable.java b/src/main/java/io/papermc/hangar/model/db/roles/GlobalRoleTable.java index 8ce7e788f..2a9c1e662 100644 --- a/src/main/java/io/papermc/hangar/model/db/roles/GlobalRoleTable.java +++ b/src/main/java/io/papermc/hangar/model/db/roles/GlobalRoleTable.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model.db.roles; -import io.papermc.hangar.model.roles.GlobalRole; +import io.papermc.hangar.model.common.roles.GlobalRole; import org.jdbi.v3.core.mapper.reflect.ColumnName; public class GlobalRoleTable implements RoleTable { diff --git a/src/main/java/io/papermc/hangar/model/db/roles/OrganizationRoleTable.java b/src/main/java/io/papermc/hangar/model/db/roles/OrganizationRoleTable.java index 1a6bdf686..c6a52410c 100644 --- a/src/main/java/io/papermc/hangar/model/db/roles/OrganizationRoleTable.java +++ b/src/main/java/io/papermc/hangar/model/db/roles/OrganizationRoleTable.java @@ -1,7 +1,7 @@ package io.papermc.hangar.model.db.roles; -import io.papermc.hangar.model.roles.OrganizationRole; +import io.papermc.hangar.model.common.roles.OrganizationRole; import java.time.OffsetDateTime; diff --git a/src/main/java/io/papermc/hangar/model/db/roles/ProjectRoleTable.java b/src/main/java/io/papermc/hangar/model/db/roles/ProjectRoleTable.java index 667f69384..d0a6b82c1 100644 --- a/src/main/java/io/papermc/hangar/model/db/roles/ProjectRoleTable.java +++ b/src/main/java/io/papermc/hangar/model/db/roles/ProjectRoleTable.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model.db.roles; -import io.papermc.hangar.model.roles.ProjectRole; +import io.papermc.hangar.model.common.roles.ProjectRole; import org.jdbi.v3.core.mapper.reflect.JdbiConstructor; import java.time.OffsetDateTime; diff --git a/src/main/java/io/papermc/hangar/model/db/roles/RoleTable.java b/src/main/java/io/papermc/hangar/model/db/roles/RoleTable.java index 530134fa9..d90e78215 100644 --- a/src/main/java/io/papermc/hangar/model/db/roles/RoleTable.java +++ b/src/main/java/io/papermc/hangar/model/db/roles/RoleTable.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model.db.roles; -import io.papermc.hangar.model.roles.Role; +import io.papermc.hangar.model.common.roles.Role; public interface RoleTable>> { diff --git a/src/main/java/io/papermc/hangar/model/db/versions/ProjectVersionDependencyTable.java b/src/main/java/io/papermc/hangar/model/db/versions/ProjectVersionDependencyTable.java index 0ee3d7ae0..cc6922f4b 100644 --- a/src/main/java/io/papermc/hangar/model/db/versions/ProjectVersionDependencyTable.java +++ b/src/main/java/io/papermc/hangar/model/db/versions/ProjectVersionDependencyTable.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model.db.versions; -import io.papermc.hangar.model.Platform; +import io.papermc.hangar.model.common.Platform; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.mapper.reflect.JdbiConstructor; diff --git a/src/main/java/io/papermc/hangar/model/db/versions/ProjectVersionTable.java b/src/main/java/io/papermc/hangar/model/db/versions/ProjectVersionTable.java index e6179b7a2..599ec6758 100644 --- a/src/main/java/io/papermc/hangar/model/db/versions/ProjectVersionTable.java +++ b/src/main/java/io/papermc/hangar/model/db/versions/ProjectVersionTable.java @@ -1,9 +1,9 @@ package io.papermc.hangar.model.db.versions; import io.papermc.hangar.model.Named; -import io.papermc.hangar.model.ReviewState; -import io.papermc.hangar.model.Visibility; import io.papermc.hangar.model.Visible; +import io.papermc.hangar.model.common.projects.ReviewState; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.model.db.Table; import io.papermc.hangar.modelold.generated.PlatformDependency; import io.papermc.hangar.modelold.viewhelpers.VersionDependencies; diff --git a/src/main/java/io/papermc/hangar/model/internal/HangarProjectFlag.java b/src/main/java/io/papermc/hangar/model/internal/HangarProjectFlag.java index eca923649..2858480c6 100644 --- a/src/main/java/io/papermc/hangar/model/internal/HangarProjectFlag.java +++ b/src/main/java/io/papermc/hangar/model/internal/HangarProjectFlag.java @@ -1,7 +1,7 @@ package io.papermc.hangar.model.internal; -import io.papermc.hangar.model.FlagReason; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.FlagReason; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.model.db.projects.ProjectFlagTable; import org.jdbi.v3.core.enums.EnumByOrdinal; diff --git a/src/main/java/io/papermc/hangar/model/internal/api/requests/projects/NewProject.java b/src/main/java/io/papermc/hangar/model/internal/api/requests/projects/NewProject.java index 1df6a0c09..b37fe13f9 100644 --- a/src/main/java/io/papermc/hangar/model/internal/api/requests/projects/NewProject.java +++ b/src/main/java/io/papermc/hangar/model/internal/api/requests/projects/NewProject.java @@ -1,21 +1,56 @@ package io.papermc.hangar.model.internal.api.requests.projects; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.papermc.hangar.controller.validations.Validate; +import io.papermc.hangar.model.common.projects.Category; +import io.papermc.hangar.util.StringUtils; -import javax.validation.constraints.Size; +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Map; public class NewProject { private final long ownerId; - @Size(min = 7, message = "Name has to be at least 7 characters") + @NotNull + @Validate(SpEL = "#root.length le @hangarConfig.projects.maxNameLen", message = "Project name too long") // TODO i18n + @Validate(SpEL = "#root matches @hangarConfig.projects.nameRegex", message = "Invalid project name") // TODO i18n private final String name; + @NotNull + @Validate(SpEL = "#root.length le @hangarConfig.projects.maxDescLen", message = "Project description too long") // TODO i18n private final String description; + @NotNull + private final Category category; + private final String pageContent; + private final String homepageUrl; + private final String issuesUrl; + private final String sourceUrl; + private final String supportUrl; + private final String licenseName; + private final String licenseUrl; + @NotNull + @Validate(SpEL = "#root.length le @hangarConfig.projects.maxKeywords", message = "Too many keywords") // TODO i18n + private final List keywords; @JsonCreator - public NewProject(long ownerId, String name, String description) { + public NewProject(long ownerId, @NotNull String name, @NotNull String description, @NotNull Category category, String pageContent, @JsonProperty("links") Map linkMap, @JsonProperty("license") Map licenseMap, @NotNull List keywords) { this.ownerId = ownerId; - this.name = name; + this.name = StringUtils.compact(name); this.description = description; + this.category = category; + this.pageContent = pageContent; + this.homepageUrl = linkMap.get("homepage"); + this.issuesUrl = linkMap.get("issues"); + this.sourceUrl = linkMap.get("source"); + this.supportUrl = linkMap.get("support"); + String licenseName = StringUtils.stringOrNull(licenseMap.get("customName")); + if (licenseName == null) { + licenseName = licenseMap.get("type"); + } + this.licenseName = licenseName; + this.licenseUrl = licenseMap.get("url"); + this.keywords = keywords; } public long getOwnerId() { @@ -30,12 +65,57 @@ public class NewProject { return description; } + public Category getCategory() { + return category; + } + + public String getPageContent() { + return pageContent; + } + + public String getHomepageUrl() { + return homepageUrl; + } + + public String getIssuesUrl() { + return issuesUrl; + } + + public String getSourceUrl() { + return sourceUrl; + } + + public String getSupportUrl() { + return supportUrl; + } + + public String getLicenseName() { + return licenseName; + } + + public String getLicenseUrl() { + return licenseUrl; + } + + public List getKeywords() { + return keywords; + } + @Override public String toString() { return "NewProject{" + "ownerId=" + ownerId + ", name='" + name + '\'' + ", description='" + description + '\'' + + ", category=" + category + + ", pageContent='" + pageContent + '\'' + + ", homepageUrl='" + homepageUrl + '\'' + + ", issuesUrl='" + issuesUrl + '\'' + + ", sourceUrl='" + sourceUrl + '\'' + + ", supportUrl='" + supportUrl + '\'' + + ", licenseName='" + licenseName + '\'' + + ", licenseUrl='" + licenseUrl + '\'' + + ", keywords=" + keywords + '}'; } } diff --git a/src/main/java/io/papermc/hangar/model/internal/sso/AuthUser.java b/src/main/java/io/papermc/hangar/model/internal/sso/AuthUser.java index 8bf480a06..78b1ec2a4 100644 --- a/src/main/java/io/papermc/hangar/model/internal/sso/AuthUser.java +++ b/src/main/java/io/papermc/hangar/model/internal/sso/AuthUser.java @@ -1,8 +1,8 @@ package io.papermc.hangar.model.internal.sso; import com.fasterxml.jackson.annotation.JsonCreator; -import io.papermc.hangar.model.roles.GlobalRole; -import io.papermc.hangar.model.roles.Role; +import io.papermc.hangar.model.common.roles.GlobalRole; +import io.papermc.hangar.model.common.roles.Role; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/io/papermc/hangar/model/internal/sso/SsoSyncData.java b/src/main/java/io/papermc/hangar/model/internal/sso/SsoSyncData.java index 557755db5..644bfa455 100644 --- a/src/main/java/io/papermc/hangar/model/internal/sso/SsoSyncData.java +++ b/src/main/java/io/papermc/hangar/model/internal/sso/SsoSyncData.java @@ -1,6 +1,6 @@ package io.papermc.hangar.model.internal.sso; -import io.papermc.hangar.model.roles.GlobalRole; +import io.papermc.hangar.model.common.roles.GlobalRole; import io.papermc.hangar.util.SsoUtil; import java.util.List; diff --git a/src/main/java/io/papermc/hangar/model/internal/user/HangarUser.java b/src/main/java/io/papermc/hangar/model/internal/user/HangarUser.java index 3e9ada67a..938ede814 100644 --- a/src/main/java/io/papermc/hangar/model/internal/user/HangarUser.java +++ b/src/main/java/io/papermc/hangar/model/internal/user/HangarUser.java @@ -1,9 +1,9 @@ package io.papermc.hangar.model.internal.user; import io.papermc.hangar.model.Identified; -import io.papermc.hangar.model.Permission; import io.papermc.hangar.model.api.User; -import io.papermc.hangar.model.roles.GlobalRole; +import io.papermc.hangar.model.common.Permission; +import io.papermc.hangar.model.common.roles.GlobalRole; import java.time.OffsetDateTime; import java.util.List; diff --git a/src/main/java/io/papermc/hangar/model/internal/user/notifications/HangarInvite.java b/src/main/java/io/papermc/hangar/model/internal/user/notifications/HangarInvite.java index 9f90c5855..cccfdca9d 100644 --- a/src/main/java/io/papermc/hangar/model/internal/user/notifications/HangarInvite.java +++ b/src/main/java/io/papermc/hangar/model/internal/user/notifications/HangarInvite.java @@ -1,9 +1,9 @@ package io.papermc.hangar.model.internal.user.notifications; +import io.papermc.hangar.model.common.roles.OrganizationRole; +import io.papermc.hangar.model.common.roles.ProjectRole; +import io.papermc.hangar.model.common.roles.Role; import io.papermc.hangar.model.db.roles.RoleTable; -import io.papermc.hangar.model.roles.OrganizationRole; -import io.papermc.hangar.model.roles.ProjectRole; -import io.papermc.hangar.model.roles.Role; public abstract class HangarInvite>> { diff --git a/src/main/java/io/papermc/hangar/modelold/ApiAuthInfo.java b/src/main/java/io/papermc/hangar/modelold/ApiAuthInfo.java index 08576c6de..fd44d207f 100644 --- a/src/main/java/io/papermc/hangar/modelold/ApiAuthInfo.java +++ b/src/main/java/io/papermc/hangar/modelold/ApiAuthInfo.java @@ -1,7 +1,7 @@ package io.papermc.hangar.modelold; import io.papermc.hangar.db.modelold.UsersTable; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.modelold.generated.ApiKey; import org.jdbi.v3.core.mapper.Nested; diff --git a/src/main/java/io/papermc/hangar/modelold/NamedPermission.java b/src/main/java/io/papermc/hangar/modelold/NamedPermission.java index 67ae1fc25..f47a7288b 100644 --- a/src/main/java/io/papermc/hangar/modelold/NamedPermission.java +++ b/src/main/java/io/papermc/hangar/modelold/NamedPermission.java @@ -3,7 +3,7 @@ package io.papermc.hangar.modelold; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonValue; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/io/papermc/hangar/modelold/Platform.java b/src/main/java/io/papermc/hangar/modelold/Platform.java index f67e082b4..f19b89264 100644 --- a/src/main/java/io/papermc/hangar/modelold/Platform.java +++ b/src/main/java/io/papermc/hangar/modelold/Platform.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonValue; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.daoold.PlatformVersionsDao; import io.papermc.hangar.db.modelold.ProjectVersionTagsTable; -import io.papermc.hangar.model.TagColor; +import io.papermc.hangar.model.common.TagColor; import io.papermc.hangar.modelold.generated.PlatformDependency; import io.papermc.hangar.serviceold.VersionService; import org.apache.commons.lang3.tuple.ImmutablePair; diff --git a/src/main/java/io/papermc/hangar/modelold/Role.java b/src/main/java/io/papermc/hangar/modelold/Role.java index 84f046f94..2acb9f328 100644 --- a/src/main/java/io/papermc/hangar/modelold/Role.java +++ b/src/main/java/io/papermc/hangar/modelold/Role.java @@ -7,8 +7,8 @@ import com.fasterxml.jackson.annotation.JsonFormat.Shape; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.papermc.hangar.db.customtypes.RoleCategory; -import io.papermc.hangar.model.Color; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Color; +import io.papermc.hangar.model.common.Permission; @JsonFormat(shape = Shape.OBJECT) public enum Role { diff --git a/src/main/java/io/papermc/hangar/modelold/generated/ApiKey.java b/src/main/java/io/papermc/hangar/modelold/generated/ApiKey.java index 33632a6b0..aacac1ba8 100644 --- a/src/main/java/io/papermc/hangar/modelold/generated/ApiKey.java +++ b/src/main/java/io/papermc/hangar/modelold/generated/ApiKey.java @@ -1,6 +1,6 @@ package io.papermc.hangar.modelold.generated; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import org.jdbi.v3.core.annotation.Unmappable; import org.jdbi.v3.core.mapper.Nested; diff --git a/src/main/java/io/papermc/hangar/modelold/generated/Project.java b/src/main/java/io/papermc/hangar/modelold/generated/Project.java index 72256ddc4..0fe0ab67a 100644 --- a/src/main/java/io/papermc/hangar/modelold/generated/Project.java +++ b/src/main/java/io/papermc/hangar/modelold/generated/Project.java @@ -2,8 +2,8 @@ package io.papermc.hangar.modelold.generated; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; -import io.papermc.hangar.model.Category; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.Category; +import io.papermc.hangar.model.common.projects.Visibility; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.mapper.Nested; import org.springframework.validation.annotation.Validated; diff --git a/src/main/java/io/papermc/hangar/modelold/generated/ProjectCompact.java b/src/main/java/io/papermc/hangar/modelold/generated/ProjectCompact.java index e85732a47..fafa37fd4 100644 --- a/src/main/java/io/papermc/hangar/modelold/generated/ProjectCompact.java +++ b/src/main/java/io/papermc/hangar/modelold/generated/ProjectCompact.java @@ -3,7 +3,7 @@ package io.papermc.hangar.modelold.generated; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonValue; -import io.papermc.hangar.model.Category; +import io.papermc.hangar.model.common.projects.Category; import io.swagger.annotations.ApiModelProperty; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.mapper.Nested; diff --git a/src/main/java/io/papermc/hangar/modelold/generated/Version.java b/src/main/java/io/papermc/hangar/modelold/generated/Version.java index 7e6474a01..2e4990d2d 100644 --- a/src/main/java/io/papermc/hangar/modelold/generated/Version.java +++ b/src/main/java/io/papermc/hangar/modelold/generated/Version.java @@ -3,8 +3,8 @@ package io.papermc.hangar.modelold.generated; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat.Shape; import com.fasterxml.jackson.annotation.JsonProperty; -import io.papermc.hangar.model.ReviewState; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.ReviewState; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.modelold.Platform; import io.swagger.annotations.ApiModelProperty; import org.jdbi.v3.core.enums.EnumByOrdinal; diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ApiKey.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ApiKey.java index 16b4d7e5c..eb18f473e 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ApiKey.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ApiKey.java @@ -1,7 +1,7 @@ package io.papermc.hangar.modelold.viewhelpers; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.modelold.NamedPermission; -import io.papermc.hangar.model.Permission; import org.jdbi.v3.core.mapper.Nested; import java.util.Collection; diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/HeaderData.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/HeaderData.java index d6faccbae..2a726bfe6 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/HeaderData.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/HeaderData.java @@ -1,7 +1,7 @@ package io.papermc.hangar.modelold.viewhelpers; import io.papermc.hangar.db.modelold.UsersTable; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; public class HeaderData { diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/JoinableData.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/JoinableData.java index 9d1f335fe..a1ac7c094 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/JoinableData.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/JoinableData.java @@ -3,7 +3,7 @@ package io.papermc.hangar.modelold.viewhelpers; import io.papermc.hangar.db.customtypes.RoleCategory; import io.papermc.hangar.db.modelold.RoleTable; import io.papermc.hangar.db.modelold.UsersTable; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import java.util.Map; import java.util.Map.Entry; diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectApprovalData.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectApprovalData.java index 180a51008..9405d67da 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectApprovalData.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectApprovalData.java @@ -1,8 +1,7 @@ package io.papermc.hangar.modelold.viewhelpers; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.modelold.generated.ProjectNamespace; - import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.mapper.Nested; diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectData.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectData.java index 34e1f4fd1..d3bc0b11b 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectData.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectData.java @@ -6,7 +6,7 @@ import io.papermc.hangar.db.modelold.ProjectVisibilityChangesTable; import io.papermc.hangar.db.modelold.ProjectsTable; import io.papermc.hangar.db.modelold.UserProjectRolesTable; import io.papermc.hangar.db.modelold.UsersTable; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.serviceold.MarkdownService; import java.util.List; diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectFlag.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectFlag.java index cadc487bc..c49b54682 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectFlag.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ProjectFlag.java @@ -1,7 +1,7 @@ package io.papermc.hangar.modelold.viewhelpers; import io.papermc.hangar.db.modelold.ProjectFlagsTable; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.Visibility; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.mapper.Nested; diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ReviewQueueEntry.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ReviewQueueEntry.java index c3047cdfa..e50ce8aaf 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ReviewQueueEntry.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ReviewQueueEntry.java @@ -1,6 +1,6 @@ package io.papermc.hangar.modelold.viewhelpers; -import io.papermc.hangar.model.Color; +import io.papermc.hangar.model.common.Color; import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ScopedOrganizationData.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ScopedOrganizationData.java index f461cba81..6d870a436 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ScopedOrganizationData.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ScopedOrganizationData.java @@ -1,6 +1,6 @@ package io.papermc.hangar.modelold.viewhelpers; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; public class ScopedOrganizationData { private final Permission permissions; diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ScopedProjectData.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ScopedProjectData.java index 4edbdc13d..5860c446a 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ScopedProjectData.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ScopedProjectData.java @@ -1,6 +1,6 @@ package io.papermc.hangar.modelold.viewhelpers; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import org.jdbi.v3.core.annotation.Unmappable; public class ScopedProjectData { diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/UnhealthyProject.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/UnhealthyProject.java index 2bd003cf3..cfeac0800 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/UnhealthyProject.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/UnhealthyProject.java @@ -1,8 +1,7 @@ package io.papermc.hangar.modelold.viewhelpers; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.modelold.generated.ProjectNamespace; - import org.jdbi.v3.core.enums.EnumByOrdinal; import org.jdbi.v3.core.mapper.Nested; diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/UserData.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/UserData.java index 65f10fa09..6ac574cc8 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/UserData.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/UserData.java @@ -2,7 +2,7 @@ package io.papermc.hangar.modelold.viewhelpers; import io.papermc.hangar.db.modelold.UserOrganizationRolesTable; import io.papermc.hangar.db.modelold.UsersTable; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.modelold.Role; import java.util.ArrayList; diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/VersionData.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/VersionData.java index 8057d0faf..7b67fce6c 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/VersionData.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/VersionData.java @@ -3,8 +3,8 @@ package io.papermc.hangar.modelold.viewhelpers; import io.papermc.hangar.db.modelold.PlatformVersionsTable; import io.papermc.hangar.db.modelold.ProjectChannelsTable; import io.papermc.hangar.db.modelold.ProjectVersionsTable; -import io.papermc.hangar.model.Platform; import io.papermc.hangar.model.api.project.version.Dependency; +import io.papermc.hangar.model.common.Platform; import io.papermc.hangar.modelold.generated.PlatformDependency; import java.util.HashMap; diff --git a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ViewTag.java b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ViewTag.java index ad7f40c5f..76179c1ac 100644 --- a/src/main/java/io/papermc/hangar/modelold/viewhelpers/ViewTag.java +++ b/src/main/java/io/papermc/hangar/modelold/viewhelpers/ViewTag.java @@ -1,7 +1,7 @@ package io.papermc.hangar.modelold.viewhelpers; import io.papermc.hangar.db.modelold.ProjectVersionTagsTable; -import io.papermc.hangar.model.TagColor; +import io.papermc.hangar.model.common.TagColor; import java.util.List; diff --git a/src/main/java/io/papermc/hangar/security/HangarPrincipal.java b/src/main/java/io/papermc/hangar/security/HangarPrincipal.java index ed4d2c8ba..17bfefb5e 100644 --- a/src/main/java/io/papermc/hangar/security/HangarPrincipal.java +++ b/src/main/java/io/papermc/hangar/security/HangarPrincipal.java @@ -1,17 +1,19 @@ package io.papermc.hangar.security; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.db.projects.ProjectOwner; public class HangarPrincipal implements ProjectOwner { private final long id; - private final String userName; + private final String name; + private final boolean locked; private final Permission globalPermissions; - public HangarPrincipal(long id, String userName, Permission globalPermissions) { + public HangarPrincipal(long id, String name, boolean locked, Permission globalPermissions) { this.id = id; - this.userName = userName; + this.name = name; + this.locked = locked; this.globalPermissions = globalPermissions; } @@ -22,7 +24,7 @@ public class HangarPrincipal implements ProjectOwner { @Override public String getName() { - return userName; + return name; } @Override @@ -30,6 +32,10 @@ public class HangarPrincipal implements ProjectOwner { return id; } + public boolean isLocked() { + return locked; + } + public Permission getGlobalPermissions() { return globalPermissions; } @@ -38,7 +44,8 @@ public class HangarPrincipal implements ProjectOwner { public String toString() { return "HangarPrincipal{" + "id=" + id + - ", userName='" + userName + '\'' + + ", name='" + name + '\'' + + ", locked=" + locked + ", globalPermissions=" + globalPermissions + '}'; } diff --git a/src/main/java/io/papermc/hangar/security/annotations/unlocked/Unlocked.java b/src/main/java/io/papermc/hangar/security/annotations/unlocked/Unlocked.java new file mode 100644 index 000000000..9e7620797 --- /dev/null +++ b/src/main/java/io/papermc/hangar/security/annotations/unlocked/Unlocked.java @@ -0,0 +1,17 @@ +package io.papermc.hangar.security.annotations.unlocked; + +import org.springframework.security.access.annotation.Secured; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Require the user be logged in AND unlocked + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Secured("USER_ROLE") +public @interface Unlocked { +} diff --git a/src/main/java/io/papermc/hangar/security/annotations/unlocked/UnlockedMetadataExtractor.java b/src/main/java/io/papermc/hangar/security/annotations/unlocked/UnlockedMetadataExtractor.java new file mode 100644 index 000000000..af51907a1 --- /dev/null +++ b/src/main/java/io/papermc/hangar/security/annotations/unlocked/UnlockedMetadataExtractor.java @@ -0,0 +1,27 @@ +package io.papermc.hangar.security.annotations.unlocked; + +import org.springframework.security.access.ConfigAttribute; +import org.springframework.security.access.annotation.AnnotationMetadataExtractor; + +import java.util.Collection; +import java.util.Set; + +public class UnlockedMetadataExtractor implements AnnotationMetadataExtractor { + + @Override + public Collection extractAttributes(Unlocked securityAnnotation) { + return Set.of(UnlockedAttribute.INSTANCE); + } + + static class UnlockedAttribute implements ConfigAttribute { + + static final UnlockedAttribute INSTANCE = new UnlockedAttribute(); + + private UnlockedAttribute() { } + + @Override + public String getAttribute() { + return "UNLOCKED"; + } + } +} diff --git a/src/main/java/io/papermc/hangar/security/annotations/unlocked/UnlockedVoter.java b/src/main/java/io/papermc/hangar/security/annotations/unlocked/UnlockedVoter.java new file mode 100644 index 000000000..c6e63e58c --- /dev/null +++ b/src/main/java/io/papermc/hangar/security/annotations/unlocked/UnlockedVoter.java @@ -0,0 +1,35 @@ +package io.papermc.hangar.security.annotations.unlocked; + +import io.papermc.hangar.exceptions.HangarApiException; +import io.papermc.hangar.security.HangarAuthenticationToken; +import org.aopalliance.intercept.MethodInvocation; +import org.springframework.http.HttpStatus; +import org.springframework.security.access.AccessDecisionVoter; +import org.springframework.security.access.ConfigAttribute; +import org.springframework.security.core.Authentication; + +import java.util.Collection; + +public class UnlockedVoter implements AccessDecisionVoter { + + @Override + public boolean supports(ConfigAttribute attribute) { + return attribute instanceof UnlockedMetadataExtractor.UnlockedAttribute; + } + + @Override + public boolean supports(Class clazz) { + return MethodInvocation.class.isAssignableFrom(clazz); + } + + @Override + public int vote(Authentication authentication, MethodInvocation object, Collection attributes) { + if (!(authentication instanceof HangarAuthenticationToken)) { + return ACCESS_DENIED; + } + if (((HangarAuthenticationToken) authentication).getPrincipal().isLocked()) { + throw new HangarApiException(HttpStatus.UNAUTHORIZED, "error.user.locked"); + } + return ACCESS_ABSTAIN; + } +} diff --git a/src/main/java/io/papermc/hangar/securityold/UserLockException.java b/src/main/java/io/papermc/hangar/securityold/UserLockException.java index b4bfbe0af..513b9d5aa 100644 --- a/src/main/java/io/papermc/hangar/securityold/UserLockException.java +++ b/src/main/java/io/papermc/hangar/securityold/UserLockException.java @@ -4,6 +4,7 @@ import io.papermc.hangar.exceptions.HangarException; import io.papermc.hangar.util.Routes; import org.springframework.web.servlet.ModelAndView; +@Deprecated public class UserLockException extends HangarException { private final Routes redirectRoute; diff --git a/src/main/java/io/papermc/hangar/service/AuthenticationService.java b/src/main/java/io/papermc/hangar/service/AuthenticationService.java index 00559b418..068e46eb3 100644 --- a/src/main/java/io/papermc/hangar/service/AuthenticationService.java +++ b/src/main/java/io/papermc/hangar/service/AuthenticationService.java @@ -10,14 +10,14 @@ import io.papermc.hangar.db.dao.internal.table.auth.ApiKeyDAO; import io.papermc.hangar.db.dao.internal.table.auth.ApiSessionDAO; import io.papermc.hangar.db.dao.session.HangarRequestDAO; import io.papermc.hangar.exceptions.HangarApiException; -import io.papermc.hangar.model.Permission; import io.papermc.hangar.model.api.auth.ApiSession; +import io.papermc.hangar.model.common.Permission; +import io.papermc.hangar.model.common.roles.GlobalRole; import io.papermc.hangar.model.db.OrganizationTable; import io.papermc.hangar.model.db.UserTable; import io.papermc.hangar.model.db.auth.ApiKeyTable; import io.papermc.hangar.model.db.auth.ApiSessionTable; import io.papermc.hangar.model.db.projects.ProjectTable; -import io.papermc.hangar.model.roles.GlobalRole; import io.papermc.hangar.security.HangarAuthenticationToken; import io.papermc.hangar.service.internal.OrganizationService; import io.papermc.hangar.service.internal.UserService; diff --git a/src/main/java/io/papermc/hangar/service/PermissionService.java b/src/main/java/io/papermc/hangar/service/PermissionService.java index 9c0e3b049..28348366c 100644 --- a/src/main/java/io/papermc/hangar/service/PermissionService.java +++ b/src/main/java/io/papermc/hangar/service/PermissionService.java @@ -2,7 +2,7 @@ package io.papermc.hangar.service; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.dao.PermissionsDAO; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; diff --git a/src/main/java/io/papermc/hangar/service/TokenService.java b/src/main/java/io/papermc/hangar/service/TokenService.java index 685c8d21e..a5481edc0 100644 --- a/src/main/java/io/papermc/hangar/service/TokenService.java +++ b/src/main/java/io/papermc/hangar/service/TokenService.java @@ -9,7 +9,7 @@ import io.papermc.hangar.controller.utils.CookieUtils; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.dao.internal.table.auth.UserRefreshTokenDAO; import io.papermc.hangar.exceptions.HangarApiException; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.db.UserTable; import io.papermc.hangar.model.db.auth.UserRefreshToken; import io.papermc.hangar.security.HangarPrincipal; @@ -87,17 +87,19 @@ public class TokenService extends HangarService { .withSubject(userTable.getName()) .withClaim("id", userTable.getId()) .withClaim("permissions", globalPermission.toBinString()) + .withClaim("locked", userTable.isLocked()) .sign(getAlgo()); } public HangarPrincipal parseHangarPrincipal(DecodedJWT decodedJWT) { String subject = decodedJWT.getSubject(); Long userId = decodedJWT.getClaim("id").asLong(); + boolean locked = decodedJWT.getClaim("locked").asBoolean(); Permission globalPermission = Permission.fromBinString(decodedJWT.getClaim("permissions").asString()); if (subject == null || userId == null || globalPermission == null) { throw new BadCredentialsException("Malformed jwt"); } - return new HangarPrincipal(userId, subject, globalPermission); + return new HangarPrincipal(userId, subject, locked, globalPermission); } private JWTVerifier getVerifier() { diff --git a/src/main/java/io/papermc/hangar/service/VisibilityService.java b/src/main/java/io/papermc/hangar/service/VisibilityService.java index f71e906c0..67b729c21 100644 --- a/src/main/java/io/papermc/hangar/service/VisibilityService.java +++ b/src/main/java/io/papermc/hangar/service/VisibilityService.java @@ -1,8 +1,8 @@ package io.papermc.hangar.service; -import io.papermc.hangar.model.Permission; -import io.papermc.hangar.model.Visibility; import io.papermc.hangar.model.Visible; +import io.papermc.hangar.model.common.Permission; +import io.papermc.hangar.model.common.projects.Visibility; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/io/papermc/hangar/service/api/ProjectsApiService.java b/src/main/java/io/papermc/hangar/service/api/ProjectsApiService.java index 90be56bb4..48903c2f7 100644 --- a/src/main/java/io/papermc/hangar/service/api/ProjectsApiService.java +++ b/src/main/java/io/papermc/hangar/service/api/ProjectsApiService.java @@ -4,13 +4,13 @@ import io.papermc.hangar.config.hangar.HangarConfig; import io.papermc.hangar.controller.extras.HangarApiRequest; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.dao.v1.ProjectsApiDAO; -import io.papermc.hangar.model.Category; -import io.papermc.hangar.model.Permission; import io.papermc.hangar.model.api.PaginatedResult; import io.papermc.hangar.model.api.Pagination; import io.papermc.hangar.model.api.project.Project; import io.papermc.hangar.model.api.project.ProjectMember; import io.papermc.hangar.model.api.requests.RequestPagination; +import io.papermc.hangar.model.common.Permission; +import io.papermc.hangar.model.common.projects.Category; import io.papermc.hangar.modelold.generated.ProjectSortingStrategy; import io.papermc.hangar.modelold.generated.Tag; import io.papermc.hangar.service.HangarService; diff --git a/src/main/java/io/papermc/hangar/service/api/UsersApiService.java b/src/main/java/io/papermc/hangar/service/api/UsersApiService.java index c9525d483..22e6ea5fa 100644 --- a/src/main/java/io/papermc/hangar/service/api/UsersApiService.java +++ b/src/main/java/io/papermc/hangar/service/api/UsersApiService.java @@ -6,12 +6,12 @@ import io.papermc.hangar.db.dao.UsersDAO; import io.papermc.hangar.db.dao.internal.table.NotificationsDAO; import io.papermc.hangar.db.dao.v1.UsersApiDAO; import io.papermc.hangar.exceptions.HangarApiException; -import io.papermc.hangar.model.Permission; import io.papermc.hangar.model.api.PaginatedResult; import io.papermc.hangar.model.api.Pagination; import io.papermc.hangar.model.api.User; import io.papermc.hangar.model.api.project.ProjectCompact; import io.papermc.hangar.model.api.requests.RequestPagination; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.internal.user.HangarUser; import io.papermc.hangar.model.internal.user.HangarUser.HeaderData; import io.papermc.hangar.modelold.UserOrdering; diff --git a/src/main/java/io/papermc/hangar/service/api/VersionsApiService.java b/src/main/java/io/papermc/hangar/service/api/VersionsApiService.java index 7daa992d4..a982dba22 100644 --- a/src/main/java/io/papermc/hangar/service/api/VersionsApiService.java +++ b/src/main/java/io/papermc/hangar/service/api/VersionsApiService.java @@ -3,12 +3,12 @@ package io.papermc.hangar.service.api; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.dao.v1.VersionsApiDAO; import io.papermc.hangar.exceptions.HangarApiException; -import io.papermc.hangar.model.Permission; import io.papermc.hangar.model.api.PaginatedResult; import io.papermc.hangar.model.api.Pagination; import io.papermc.hangar.model.api.project.version.Version; import io.papermc.hangar.model.api.project.version.VersionStats; import io.papermc.hangar.model.api.requests.RequestPagination; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.service.HangarService; import io.papermc.hangar.util.StringUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/io/papermc/hangar/service/internal/MemberService.java b/src/main/java/io/papermc/hangar/service/internal/MemberService.java index 2ec3727ba..844a1391f 100644 --- a/src/main/java/io/papermc/hangar/service/internal/MemberService.java +++ b/src/main/java/io/papermc/hangar/service/internal/MemberService.java @@ -7,6 +7,9 @@ import io.papermc.hangar.db.dao.internal.table.members.ProjectMembersDAO; import io.papermc.hangar.db.dao.internal.table.roles.OrganizationRoleDAO; import io.papermc.hangar.db.dao.internal.table.roles.ProjectRoleDAO; import io.papermc.hangar.db.dao.internal.table.roles.RoleDAO; +import io.papermc.hangar.model.common.roles.OrganizationRole; +import io.papermc.hangar.model.common.roles.ProjectRole; +import io.papermc.hangar.model.common.roles.Role; import io.papermc.hangar.model.db.members.MemberTable; import io.papermc.hangar.model.db.members.OrganizationMemberTable; import io.papermc.hangar.model.db.members.ProjectMemberTable; @@ -14,9 +17,6 @@ import io.papermc.hangar.model.db.roles.ExtendedRoleTable; import io.papermc.hangar.model.db.roles.OrganizationRoleTable; import io.papermc.hangar.model.db.roles.ProjectRoleTable; import io.papermc.hangar.model.db.roles.RoleTable; -import io.papermc.hangar.model.roles.OrganizationRole; -import io.papermc.hangar.model.roles.ProjectRole; -import io.papermc.hangar.model.roles.Role; import io.papermc.hangar.service.HangarService; import io.papermc.hangar.service.internal.roles.OrganizationRoleService; import io.papermc.hangar.service.internal.roles.ProjectRoleService; diff --git a/src/main/java/io/papermc/hangar/service/internal/OrganizationService.java b/src/main/java/io/papermc/hangar/service/internal/OrganizationService.java index 27c323ad3..7fe28bcf6 100644 --- a/src/main/java/io/papermc/hangar/service/internal/OrganizationService.java +++ b/src/main/java/io/papermc/hangar/service/internal/OrganizationService.java @@ -2,7 +2,7 @@ package io.papermc.hangar.service.internal; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.dao.internal.table.OrganizationDAO; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.model.db.OrganizationTable; import io.papermc.hangar.service.HangarService; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/io/papermc/hangar/service/internal/ProjectService.java b/src/main/java/io/papermc/hangar/service/internal/ProjectService.java index c90d81c0c..a9c117d65 100644 --- a/src/main/java/io/papermc/hangar/service/internal/ProjectService.java +++ b/src/main/java/io/papermc/hangar/service/internal/ProjectService.java @@ -2,6 +2,8 @@ package io.papermc.hangar.service.internal; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.dao.internal.table.ProjectDAO; +import io.papermc.hangar.model.common.Permission; +import io.papermc.hangar.model.db.projects.ProjectOwner; import io.papermc.hangar.model.db.projects.ProjectTable; import io.papermc.hangar.service.HangarService; import io.papermc.hangar.service.VisibilityService; @@ -10,6 +12,7 @@ import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Objects; import java.util.function.BiFunction; import java.util.function.Function; @@ -21,24 +24,15 @@ public class ProjectService extends HangarService { private final ProjectDAO projectDAO; private final VisibilityService visibilityService; + private final OrganizationService organizationService; @Autowired - public ProjectService(HangarDao projectDAO, VisibilityService visibilityService) { + public ProjectService(HangarDao projectDAO, VisibilityService visibilityService, OrganizationService organizationService) { this.projectDAO = projectDAO.get(); this.visibilityService = visibilityService; + this.organizationService = organizationService; } -// @Bean -// @RequestScope -// public Supplier projectTableSupplier() { -// Optional projectTable = RequestUtil.requirePathParams(List.of(AUTHOR, SLUG), params -> this.getProjectTable(params[0], params[1])); -// if (projectTable.isPresent()) { -// return projectTable::get; -// } else { -// throw new ResponseStatusException(HttpStatus.NOT_FOUND); -// } -// } - @Nullable public ProjectTable getProjectTable(@Nullable Long projectId) { return getProjectTable(projectId, projectDAO::getById); @@ -48,6 +42,13 @@ public class ProjectService extends HangarService { return getProjectTable(author, name, projectDAO::getBySlug); } + @Nullable + public ProjectOwner getProjectOwner(long userId) { + if (Objects.equals(getHangarUserId(), userId)) { + return getHangarPrincipal(); + } + return organizationService.getOrganizationTablesWithPermission(userId, Permission.CreateProject).stream().filter(ot -> ot.getUserId() == userId).findFirst().orElse(null); + } @Nullable private ProjectTable getProjectTable(@Nullable T identifier, @NotNull Function projectTableFunction) { @@ -64,6 +65,4 @@ public class ProjectService extends HangarService { } return visibilityService.checkVisibility(projectTableFunction.apply(identifierOne, identifierTwo), ProjectTable::getId); } - - } diff --git a/src/main/java/io/papermc/hangar/service/internal/UserService.java b/src/main/java/io/papermc/hangar/service/internal/UserService.java index dc3975dae..3cefc75c3 100644 --- a/src/main/java/io/papermc/hangar/service/internal/UserService.java +++ b/src/main/java/io/papermc/hangar/service/internal/UserService.java @@ -2,10 +2,10 @@ package io.papermc.hangar.service.internal; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.dao.internal.table.UserDAO; +import io.papermc.hangar.model.common.roles.GlobalRole; import io.papermc.hangar.model.db.UserTable; import io.papermc.hangar.model.internal.sso.AuthUser; import io.papermc.hangar.model.internal.sso.SsoSyncData; -import io.papermc.hangar.model.roles.GlobalRole; import io.papermc.hangar.service.HangarService; import io.papermc.hangar.service.internal.roles.GlobalRoleService; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/io/papermc/hangar/service/internal/VersionDependencyService.java b/src/main/java/io/papermc/hangar/service/internal/VersionDependencyService.java index cd6ac7249..c020a87d4 100644 --- a/src/main/java/io/papermc/hangar/service/internal/VersionDependencyService.java +++ b/src/main/java/io/papermc/hangar/service/internal/VersionDependencyService.java @@ -5,7 +5,7 @@ import io.papermc.hangar.db.dao.internal.table.ProjectVersionDependencyDAO; import io.papermc.hangar.db.dao.internal.table.ProjectVersionPlatformDependencyDAO; import io.papermc.hangar.db.daoold.PlatformVersionsDao; import io.papermc.hangar.db.modelold.PlatformVersionsTable; -import io.papermc.hangar.model.Platform; +import io.papermc.hangar.model.common.Platform; import io.papermc.hangar.model.db.versions.ProjectVersionDependencyTable; import io.papermc.hangar.model.db.versions.ProjectVersionPlatformDependencyTable; import io.papermc.hangar.service.HangarService; diff --git a/src/main/java/io/papermc/hangar/service/internal/factories/ProjectFactory.java b/src/main/java/io/papermc/hangar/service/internal/factories/ProjectFactory.java new file mode 100644 index 000000000..5f88de342 --- /dev/null +++ b/src/main/java/io/papermc/hangar/service/internal/factories/ProjectFactory.java @@ -0,0 +1,27 @@ +package io.papermc.hangar.service.internal.factories; + +import io.papermc.hangar.exceptions.HangarApiException; +import io.papermc.hangar.model.db.projects.ProjectOwner; +import io.papermc.hangar.model.internal.api.requests.projects.NewProject; +import io.papermc.hangar.service.HangarService; +import io.papermc.hangar.service.internal.ProjectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; + +public class ProjectFactory extends HangarService { + + private final ProjectService projectService; + + @Autowired + public ProjectFactory(ProjectService projectService) { + this.projectService = projectService; + } + + public void createProject(NewProject newProject) { + ProjectOwner projectOwner = projectService.getProjectOwner(newProject.getOwnerId()); + if (projectOwner == null) { + throw new HangarApiException(HttpStatus.BAD_REQUEST, "error.project.ownerNotFound"); + } + + } +} diff --git a/src/main/java/io/papermc/hangar/service/internal/roles/GlobalRoleService.java b/src/main/java/io/papermc/hangar/service/internal/roles/GlobalRoleService.java index a880348e2..ce7efc0a0 100644 --- a/src/main/java/io/papermc/hangar/service/internal/roles/GlobalRoleService.java +++ b/src/main/java/io/papermc/hangar/service/internal/roles/GlobalRoleService.java @@ -2,8 +2,8 @@ package io.papermc.hangar.service.internal.roles; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.dao.internal.table.roles.GlobalRoleDAO; +import io.papermc.hangar.model.common.roles.GlobalRole; import io.papermc.hangar.model.db.roles.GlobalRoleTable; -import io.papermc.hangar.model.roles.GlobalRole; import org.springframework.stereotype.Service; import java.util.List; diff --git a/src/main/java/io/papermc/hangar/service/internal/roles/OrganizationRoleService.java b/src/main/java/io/papermc/hangar/service/internal/roles/OrganizationRoleService.java index d2a62d6e2..704228571 100644 --- a/src/main/java/io/papermc/hangar/service/internal/roles/OrganizationRoleService.java +++ b/src/main/java/io/papermc/hangar/service/internal/roles/OrganizationRoleService.java @@ -2,8 +2,8 @@ package io.papermc.hangar.service.internal.roles; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.dao.internal.table.roles.OrganizationRoleDAO; +import io.papermc.hangar.model.common.roles.OrganizationRole; import io.papermc.hangar.model.db.roles.OrganizationRoleTable; -import io.papermc.hangar.model.roles.OrganizationRole; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/src/main/java/io/papermc/hangar/service/internal/roles/ProjectRoleService.java b/src/main/java/io/papermc/hangar/service/internal/roles/ProjectRoleService.java index a127dbd5a..263807b9d 100644 --- a/src/main/java/io/papermc/hangar/service/internal/roles/ProjectRoleService.java +++ b/src/main/java/io/papermc/hangar/service/internal/roles/ProjectRoleService.java @@ -2,8 +2,8 @@ package io.papermc.hangar.service.internal.roles; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.dao.internal.table.roles.ProjectRoleDAO; +import io.papermc.hangar.model.common.roles.ProjectRole; import io.papermc.hangar.model.db.roles.ProjectRoleTable; -import io.papermc.hangar.model.roles.ProjectRole; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/src/main/java/io/papermc/hangar/service/internal/roles/RoleService.java b/src/main/java/io/papermc/hangar/service/internal/roles/RoleService.java index 5b092b9f7..702b27b97 100644 --- a/src/main/java/io/papermc/hangar/service/internal/roles/RoleService.java +++ b/src/main/java/io/papermc/hangar/service/internal/roles/RoleService.java @@ -1,8 +1,8 @@ package io.papermc.hangar.service.internal.roles; import io.papermc.hangar.db.dao.internal.table.roles.RoleDAO; +import io.papermc.hangar.model.common.roles.Role; import io.papermc.hangar.model.db.roles.RoleTable; -import io.papermc.hangar.model.roles.Role; import io.papermc.hangar.service.HangarService; public abstract class RoleService, R extends Role, D extends RoleDAO> extends HangarService { diff --git a/src/main/java/io/papermc/hangar/serviceold/ApiKeyService.java b/src/main/java/io/papermc/hangar/serviceold/ApiKeyService.java index 6e2e2a808..b83fd36e9 100644 --- a/src/main/java/io/papermc/hangar/serviceold/ApiKeyService.java +++ b/src/main/java/io/papermc/hangar/serviceold/ApiKeyService.java @@ -4,7 +4,7 @@ import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.daoold.ApiKeyDao; import io.papermc.hangar.db.modelold.ApiKeysTable; import io.papermc.hangar.db.modelold.ProjectApiKeysTable; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.modelold.viewhelpers.ApiKey; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/src/main/java/io/papermc/hangar/serviceold/AuthenticationService.java b/src/main/java/io/papermc/hangar/serviceold/AuthenticationService.java index f0159131e..872b4a8ec 100644 --- a/src/main/java/io/papermc/hangar/serviceold/AuthenticationService.java +++ b/src/main/java/io/papermc/hangar/serviceold/AuthenticationService.java @@ -16,7 +16,7 @@ import io.papermc.hangar.db.modelold.OrganizationsTable; import io.papermc.hangar.db.modelold.ProjectsTable; import io.papermc.hangar.db.modelold.UsersTable; import io.papermc.hangar.exceptions.HangarApiException; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.modelold.ApiAuthInfo; import io.papermc.hangar.modelold.Role; import io.papermc.hangar.modelold.generated.ApiSessionResponse; diff --git a/src/main/java/io/papermc/hangar/serviceold/OrgService.java b/src/main/java/io/papermc/hangar/serviceold/OrgService.java index 284bb8048..b7d5f19ca 100644 --- a/src/main/java/io/papermc/hangar/serviceold/OrgService.java +++ b/src/main/java/io/papermc/hangar/serviceold/OrgService.java @@ -10,7 +10,7 @@ import io.papermc.hangar.db.modelold.OrganizationMembersTable; import io.papermc.hangar.db.modelold.OrganizationsTable; import io.papermc.hangar.db.modelold.UserOrganizationRolesTable; import io.papermc.hangar.db.modelold.UsersTable; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.modelold.viewhelpers.OrgMember; import io.papermc.hangar.modelold.viewhelpers.OrganizationData; import io.papermc.hangar.modelold.viewhelpers.ScopedOrganizationData; diff --git a/src/main/java/io/papermc/hangar/serviceold/PopulationService.java b/src/main/java/io/papermc/hangar/serviceold/PopulationService.java index b7dfd056b..bd077f2d5 100644 --- a/src/main/java/io/papermc/hangar/serviceold/PopulationService.java +++ b/src/main/java/io/papermc/hangar/serviceold/PopulationService.java @@ -5,7 +5,7 @@ import io.papermc.hangar.db.daoold.PlatformVersionsDao; import io.papermc.hangar.db.daoold.RoleDao; import io.papermc.hangar.db.modelold.PlatformVersionsTable; import io.papermc.hangar.db.modelold.RolesTable; -import io.papermc.hangar.model.Platform; +import io.papermc.hangar.model.common.Platform; import io.papermc.hangar.modelold.Role; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/io/papermc/hangar/serviceold/UserService.java b/src/main/java/io/papermc/hangar/serviceold/UserService.java index dc30eb8d6..72730f977 100644 --- a/src/main/java/io/papermc/hangar/serviceold/UserService.java +++ b/src/main/java/io/papermc/hangar/serviceold/UserService.java @@ -11,7 +11,7 @@ import io.papermc.hangar.db.daoold.UserDao; import io.papermc.hangar.db.modelold.OrganizationsTable; import io.papermc.hangar.db.modelold.UserOrganizationRolesTable; import io.papermc.hangar.db.modelold.UsersTable; -import io.papermc.hangar.model.Permission; +import io.papermc.hangar.model.common.Permission; import io.papermc.hangar.modelold.Prompt; import io.papermc.hangar.modelold.Role; import io.papermc.hangar.modelold.viewhelpers.FlagActivity; diff --git a/src/main/java/io/papermc/hangar/serviceold/VersionService.java b/src/main/java/io/papermc/hangar/serviceold/VersionService.java index 87681f229..0c44f7b34 100644 --- a/src/main/java/io/papermc/hangar/serviceold/VersionService.java +++ b/src/main/java/io/papermc/hangar/serviceold/VersionService.java @@ -10,11 +10,11 @@ import io.papermc.hangar.db.modelold.ProjectVersionVisibilityChangesTable; import io.papermc.hangar.db.modelold.ProjectVersionsTable; import io.papermc.hangar.db.modelold.ProjectsTable; import io.papermc.hangar.exceptions.HangarException; -import io.papermc.hangar.model.Platform; -import io.papermc.hangar.model.ReviewState; -import io.papermc.hangar.model.TagColor; -import io.papermc.hangar.model.Visibility; import io.papermc.hangar.model.api.project.version.Dependency; +import io.papermc.hangar.model.common.Platform; +import io.papermc.hangar.model.common.TagColor; +import io.papermc.hangar.model.common.projects.ReviewState; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.modelold.viewhelpers.ProjectData; import io.papermc.hangar.modelold.viewhelpers.ReviewQueueEntry; import io.papermc.hangar.modelold.viewhelpers.UserData; diff --git a/src/main/java/io/papermc/hangar/serviceold/pluginupload/PendingVersion.java b/src/main/java/io/papermc/hangar/serviceold/pluginupload/PendingVersion.java index 8b84c7578..cc2e2ecb4 100644 --- a/src/main/java/io/papermc/hangar/serviceold/pluginupload/PendingVersion.java +++ b/src/main/java/io/papermc/hangar/serviceold/pluginupload/PendingVersion.java @@ -3,7 +3,7 @@ package io.papermc.hangar.serviceold.pluginupload; import com.fasterxml.jackson.annotation.JsonIgnore; import io.papermc.hangar.controllerold.forms.NewVersion; import io.papermc.hangar.db.modelold.ProjectVersionsTable; -import io.papermc.hangar.model.Color; +import io.papermc.hangar.model.common.Color; import io.papermc.hangar.modelold.generated.PlatformDependency; import io.papermc.hangar.modelold.viewhelpers.ProjectData; import io.papermc.hangar.modelold.viewhelpers.VersionDependencies; diff --git a/src/main/java/io/papermc/hangar/serviceold/project/ChannelFactory.java b/src/main/java/io/papermc/hangar/serviceold/project/ChannelFactory.java index e5f1ccc98..08a5440cb 100644 --- a/src/main/java/io/papermc/hangar/serviceold/project/ChannelFactory.java +++ b/src/main/java/io/papermc/hangar/serviceold/project/ChannelFactory.java @@ -5,7 +5,7 @@ import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.daoold.ProjectChannelDao; import io.papermc.hangar.db.modelold.ProjectChannelsTable; import io.papermc.hangar.exceptions.HangarException; -import io.papermc.hangar.model.Color; +import io.papermc.hangar.model.common.Color; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/src/main/java/io/papermc/hangar/serviceold/project/ChannelService.java b/src/main/java/io/papermc/hangar/serviceold/project/ChannelService.java index cbdecfcd4..e34f60cda 100644 --- a/src/main/java/io/papermc/hangar/serviceold/project/ChannelService.java +++ b/src/main/java/io/papermc/hangar/serviceold/project/ChannelService.java @@ -6,7 +6,7 @@ import io.papermc.hangar.db.daoold.ProjectChannelDao; import io.papermc.hangar.db.modelold.ProjectChannelsTable; import io.papermc.hangar.db.modelold.ProjectsTable; import io.papermc.hangar.exceptions.HangarException; -import io.papermc.hangar.model.Color; +import io.papermc.hangar.model.common.Color; import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/src/main/java/io/papermc/hangar/serviceold/project/FlagService.java b/src/main/java/io/papermc/hangar/serviceold/project/FlagService.java index 92feb5dcc..5041e6340 100644 --- a/src/main/java/io/papermc/hangar/serviceold/project/FlagService.java +++ b/src/main/java/io/papermc/hangar/serviceold/project/FlagService.java @@ -3,7 +3,7 @@ package io.papermc.hangar.serviceold.project; import io.papermc.hangar.db.dao.HangarDao; import io.papermc.hangar.db.daoold.FlagDao; import io.papermc.hangar.db.modelold.ProjectFlagsTable; -import io.papermc.hangar.model.FlagReason; +import io.papermc.hangar.model.common.projects.FlagReason; import io.papermc.hangar.modelold.viewhelpers.ProjectFlag; import io.papermc.hangar.serviceold.HangarService; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/io/papermc/hangar/serviceold/project/ProjectFactory.java b/src/main/java/io/papermc/hangar/serviceold/project/ProjectFactory.java index 67bd296b6..c03751b46 100644 --- a/src/main/java/io/papermc/hangar/serviceold/project/ProjectFactory.java +++ b/src/main/java/io/papermc/hangar/serviceold/project/ProjectFactory.java @@ -21,8 +21,8 @@ import io.papermc.hangar.db.modelold.ProjectVersionsTable; import io.papermc.hangar.db.modelold.ProjectsTable; import io.papermc.hangar.db.modelold.UsersTable; import io.papermc.hangar.exceptions.HangarException; -import io.papermc.hangar.model.Category; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.projects.Category; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.model.db.versions.ProjectVersionDependencyTable; import io.papermc.hangar.model.db.versions.ProjectVersionPlatformDependencyTable; import io.papermc.hangar.model.internal.user.notifications.NotificationType; @@ -211,7 +211,7 @@ public class ProjectFactory { List projectVersionDependencyTables = new ArrayList<>(); for (Map.Entry> entry : pendingVersion.getDependencies().entrySet()) { for (Dependency dependency : entry.getValue()) { - projectVersionDependencyTables.add(new ProjectVersionDependencyTable(version.getId(), io.papermc.hangar.model.Platform.valueOf(entry.getKey().name()), dependency.getName(), dependency.isRequired(), dependency.getNamespace() != null ? projectService.getProjectsTable(dependency.getNamespace().getOwner(), dependency.getNamespace().getSlug()).getId() : null, dependency.getExternalUrl())); + projectVersionDependencyTables.add(new ProjectVersionDependencyTable(version.getId(), io.papermc.hangar.model.common.Platform.valueOf(entry.getKey().name()), dependency.getName(), dependency.isRequired(), dependency.getNamespace() != null ? projectService.getProjectsTable(dependency.getNamespace().getOwner(), dependency.getNamespace().getSlug()).getId() : null, dependency.getExternalUrl())); } } projectVersionDependencyDAO.get().insertAll(projectVersionDependencyTables); diff --git a/src/main/java/io/papermc/hangar/serviceold/project/ProjectService.java b/src/main/java/io/papermc/hangar/serviceold/project/ProjectService.java index 9fc9e4694..0f78ef4af 100644 --- a/src/main/java/io/papermc/hangar/serviceold/project/ProjectService.java +++ b/src/main/java/io/papermc/hangar/serviceold/project/ProjectService.java @@ -12,8 +12,8 @@ import io.papermc.hangar.db.modelold.ProjectVisibilityChangesTable; import io.papermc.hangar.db.modelold.ProjectsTable; import io.papermc.hangar.db.modelold.UserProjectRolesTable; import io.papermc.hangar.db.modelold.UsersTable; -import io.papermc.hangar.model.Permission; -import io.papermc.hangar.model.Visibility; +import io.papermc.hangar.model.common.Permission; +import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.modelold.viewhelpers.ProjectApprovalData; import io.papermc.hangar.modelold.viewhelpers.ProjectData; import io.papermc.hangar.modelold.viewhelpers.ProjectFlag; diff --git a/src/main/resources/templates/layout/header.ftlh b/src/main/resources/templates/layout/header.ftlh index 7a926498c..3d9245967 100644 --- a/src/main/resources/templates/layout/header.ftlh +++ b/src/main/resources/templates/layout/header.ftlh @@ -47,7 +47,7 @@ <#-- Right navbar --> <#assign Permission=@helper["io.papermc.hangar.model.Permission"] /> - <#-- @ftlvariable name="Permission" type="io.papermc.hangar.model.Permission" --> + <#-- @ftlvariable name="Permission" type="io.papermc.hangar.model.common.Permission" --> <#if authEnabled>