From 5069763e0b34fc2d4c485483cd17d7cb94779c3c Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sat, 3 Apr 2021 23:20:20 -0700 Subject: [PATCH] platform versions admin --- frontend/locales/en.ts | 1 + frontend/pages/admin/versions.vue | 89 +++++++---- frontend/pages/logged-out.vue | 2 + frontend/utils/perms.ts | 8 + .../admin/PlatformVersionTable.vue | 145 ------------------ .../src/entrypoints/platform-version-table.js | 9 -- .../controller/internal/AdminController.java | 36 +++++ .../internal/BackendDataController.java | 2 +- .../controllerold/ApplicationController.java | 48 +----- .../internal/table/PlatformVersionDAO.java | 11 +- .../hangar/db/daoold/PlatformVersionsDao.java | 34 ---- .../admin/ChangePlatformVersionsForm.java | 15 ++ .../service/internal/PlatformService.java | 56 +++++++ .../internal/defaults/PopulationService.java | 6 +- .../internal/projects/PlatformService.java | 25 --- .../versions/VersionDependencyService.java | 1 + .../internal/versions/VersionFactory.java | 2 +- .../users/admin/platformVersions.ftlh | 20 --- 18 files changed, 191 insertions(+), 319 deletions(-) delete mode 100644 src/main/frontend-old/src/components/entrypoints/admin/PlatformVersionTable.vue delete mode 100644 src/main/frontend-old/src/entrypoints/platform-version-table.js create mode 100644 src/main/java/io/papermc/hangar/controller/internal/AdminController.java create mode 100644 src/main/java/io/papermc/hangar/model/internal/api/requests/admin/ChangePlatformVersionsForm.java create mode 100644 src/main/java/io/papermc/hangar/service/internal/PlatformService.java delete mode 100644 src/main/java/io/papermc/hangar/service/internal/projects/PlatformService.java delete mode 100644 src/main/resources/templates/users/admin/platformVersions.ftlh diff --git a/frontend/locales/en.ts b/frontend/locales/en.ts index 33fae19f..47095bee 100644 --- a/frontend/locales/en.ts +++ b/frontend/locales/en.ts @@ -625,6 +625,7 @@ const msgs: LocaleMessageObject = { versions: 'Versions', addVersion: 'Add Version', saveChanges: 'Save Changes', + success: 'Updated platform versions', }, flagReview: { title: 'Flags', diff --git a/frontend/pages/admin/versions.vue b/frontend/pages/admin/versions.vue index 0f9594fc..4810164c 100644 --- a/frontend/pages/admin/versions.vue +++ b/frontend/pages/admin/versions.vue @@ -3,35 +3,35 @@ {{ $t('platformVersions.title') }} - + + + {{ $t('platformVersions.platform') }} + {{ $t('platformVersions.versions') }} + + + + + {{ platform.name }} + + + + + - {{ $t('platformVersions.saveChanges') }} + {{ $t('general.reset') }} + {{ $t('platformVersions.saveChanges') }} @@ -39,7 +39,8 @@ diff --git a/frontend/pages/logged-out.vue b/frontend/pages/logged-out.vue index ac5dbe0a..9828c958 100644 --- a/frontend/pages/logged-out.vue +++ b/frontend/pages/logged-out.vue @@ -5,8 +5,10 @@ diff --git a/frontend/utils/perms.ts b/frontend/utils/perms.ts index 8bee39c1..95b6dcd6 100644 --- a/frontend/utils/perms.ts +++ b/frontend/utils/perms.ts @@ -12,6 +12,14 @@ const loggedInMiddleware = (code: number, msg?: string): Middleware => ({ store, } }; +export function NotLoggedIn(constructor: Function) { + addMiddleware(constructor, ({ store, redirect }) => { + if (store.state.auth.authenticated) { + redirect('/'); + } + }); +} + export function LoggedIn(constructor: Function) { addMiddleware(constructor, loggedInMiddleware(401, 'You must be logged in to perform this action')); } diff --git a/src/main/frontend-old/src/components/entrypoints/admin/PlatformVersionTable.vue b/src/main/frontend-old/src/components/entrypoints/admin/PlatformVersionTable.vue deleted file mode 100644 index 88ce6ebe..00000000 --- a/src/main/frontend-old/src/components/entrypoints/admin/PlatformVersionTable.vue +++ /dev/null @@ -1,145 +0,0 @@ - - - diff --git a/src/main/frontend-old/src/entrypoints/platform-version-table.js b/src/main/frontend-old/src/entrypoints/platform-version-table.js deleted file mode 100644 index c81eab11..00000000 --- a/src/main/frontend-old/src/entrypoints/platform-version-table.js +++ /dev/null @@ -1,9 +0,0 @@ -import { createApp } from 'vue'; -import axios from 'axios'; -import PlatformVersionTable from '@/components/entrypoints/admin/PlatformVersionTable'; - -axios.defaults.headers.post[window.csrfInfo.headerName] = window.csrfInfo.token; - -createApp(PlatformVersionTable, { - platforms: window.PLATFORMS, -}).mount('#platform-version-table'); diff --git a/src/main/java/io/papermc/hangar/controller/internal/AdminController.java b/src/main/java/io/papermc/hangar/controller/internal/AdminController.java new file mode 100644 index 00000000..71fbca20 --- /dev/null +++ b/src/main/java/io/papermc/hangar/controller/internal/AdminController.java @@ -0,0 +1,36 @@ +package io.papermc.hangar.controller.internal; + +import io.papermc.hangar.controller.HangarController; +import io.papermc.hangar.model.common.NamedPermission; +import io.papermc.hangar.model.internal.api.requests.admin.ChangePlatformVersionsForm; +import io.papermc.hangar.security.annotations.permission.PermissionRequired; +import io.papermc.hangar.service.internal.PlatformService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; + +import javax.validation.Valid; + +@Controller +@RequestMapping("/api/internal/admin") +public class AdminController extends HangarController { + + private final PlatformService platformService; + + @Autowired + public AdminController(PlatformService platformService) { + this.platformService = platformService; + } + + @ResponseStatus(HttpStatus.OK) + @PostMapping(path = "/platformVersions", consumes = MediaType.APPLICATION_JSON_VALUE) + @PermissionRequired(perms = NamedPermission.MANUAL_VALUE_CHANGES) + public void changePlatformVersions(@RequestBody @Valid ChangePlatformVersionsForm form) { + platformService.updatePlatformVersions(form); + } +} 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 97d1a3d7..3bd7bca1 100644 --- a/src/main/java/io/papermc/hangar/controller/internal/BackendDataController.java +++ b/src/main/java/io/papermc/hangar/controller/internal/BackendDataController.java @@ -19,7 +19,7 @@ import io.papermc.hangar.model.common.projects.Visibility; import io.papermc.hangar.model.common.roles.OrganizationRole; import io.papermc.hangar.model.common.roles.ProjectRole; import io.papermc.hangar.security.annotations.Anyone; -import io.papermc.hangar.service.internal.projects.PlatformService; +import io.papermc.hangar.service.internal.PlatformService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; diff --git a/src/main/java/io/papermc/hangar/controllerold/ApplicationController.java b/src/main/java/io/papermc/hangar/controllerold/ApplicationController.java index 562f9926..7e0145fb 100644 --- a/src/main/java/io/papermc/hangar/controllerold/ApplicationController.java +++ b/src/main/java/io/papermc/hangar/controllerold/ApplicationController.java @@ -1,21 +1,14 @@ package io.papermc.hangar.controllerold; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; import com.vladsch.flexmark.ext.admonition.AdmonitionExtension; import io.papermc.hangar.controllerold.forms.UserAdminForm; import io.papermc.hangar.db.customtypes.RoleCategory; -import io.papermc.hangar.db.dao.HangarDao; -import io.papermc.hangar.db.daoold.PlatformVersionsDao; -import io.papermc.hangar.db.modelold.PlatformVersionsTable; 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.common.NamedPermission; 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.model.internal.logs.HangarLoggedAction; import io.papermc.hangar.modelold.Role; @@ -51,7 +44,6 @@ import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -59,7 +51,6 @@ import java.util.stream.Collectors; @Deprecated(forRemoval = true) public class ApplicationController extends HangarController { - private final HangarDao platformVersionsDao; private final UserService userService; private final ProjectService projectService; private final OrgService orgService; @@ -67,20 +58,17 @@ public class ApplicationController extends HangarController { private final JobService jobService; private final StatsService statsService; private final RoleService roleService; - private final ObjectMapper mapper; private final Supplier userData; @Autowired - public ApplicationController(HangarDao platformVersionsDao, UserService userService, ProjectService projectService, OrgService orgService, UserActionLogService userActionLogService, JobService jobService, StatsService statsService, RoleService roleService, ObjectMapper mapper, Supplier userData) { - this.platformVersionsDao = platformVersionsDao; + public ApplicationController(UserService userService, ProjectService projectService, OrgService orgService, UserActionLogService userActionLogService, JobService jobService, StatsService statsService, RoleService roleService, Supplier userData) { this.userService = userService; this.projectService = projectService; this.orgService = orgService; this.userActionLogService = userActionLogService; this.jobService = jobService; this.roleService = roleService; - this.mapper = mapper; this.statsService = statsService; this.userData = userData; } @@ -173,40 +161,6 @@ public class ApplicationController extends HangarController { return fillModel(mav); } - @GlobalPermission(NamedPermission.MANUAL_VALUE_CHANGES) - @Secured("ROLE_USER") - @GetMapping("/admin/versions") - public ModelAndView showPlatformVersions() { - ModelAndView mav = new ModelAndView("users/admin/platformVersions"); - Map> versions = platformVersionsDao.get().getVersions(); - for (Platform p : Platform.getValues()) { - versions.putIfAbsent(p, new ArrayList<>()); - } - mav.addObject("platformVersions", mapper.valueToTree(versions)); - return fillModel(mav); - } - - @SuppressWarnings("unchecked") - @GlobalPermission(NamedPermission.MANUAL_VALUE_CHANGES) - @Secured("ROLE_USER") - @PostMapping("/admin/versions/") - @ResponseStatus(HttpStatus.OK) - public void updatePlatformVersions(@RequestBody ObjectNode object) { - Map> additions; - Map> removals; - try { - additions = mapper.treeToValue(object.get("additions"), (Class>>) (Class) Map.class); - removals = mapper.treeToValue(object.get("removals"), (Class>>) (Class) Map.class); - } catch (JsonProcessingException e) { - throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Bad formatting", e); - } - if (additions == null || removals == null) { - throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Bad formatting"); - } - additions.forEach((platform, versions) -> platformVersionsDao.get().insert(versions.stream().map(v -> new PlatformVersionsTable(Platform.valueOf(platform), v)).collect(Collectors.toList()))); - removals.forEach((platform, versions) -> platformVersionsDao.get().delete(versions, Platform.valueOf(platform).ordinal())); - } - @GlobalPermission(NamedPermission.EDIT_ALL_USER_SETTINGS) @Secured("ROLE_USER") @GetMapping("/admin/user/{user}") diff --git a/src/main/java/io/papermc/hangar/db/dao/internal/table/PlatformVersionDAO.java b/src/main/java/io/papermc/hangar/db/dao/internal/table/PlatformVersionDAO.java index 053a1250..dfd4d6b9 100644 --- a/src/main/java/io/papermc/hangar/db/dao/internal/table/PlatformVersionDAO.java +++ b/src/main/java/io/papermc/hangar/db/dao/internal/table/PlatformVersionDAO.java @@ -16,6 +16,7 @@ import org.springframework.stereotype.Repository; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.TreeMap; @Repository @@ -25,7 +26,10 @@ public interface PlatformVersionDAO { @Timestamped @SqlBatch("INSERT INTO platform_versions (created_at, platform, version) VALUES (:now, :platform, :version)") - void insert(@BindBean Collection platformVersionTables); + void insertAll(@BindBean Collection platformVersionTables); + + @SqlBatch("DELETE FROM platform_versions WHERE id = :id") + void deleteAll(@BindBean Collection platformVersionTables); @SqlQuery("SELECT * FROM platform_versions WHERE version = :version AND platform = :platform") PlatformVersionTable getByPlatformAndVersion(@EnumByOrdinal Platform platform, String version); @@ -45,6 +49,7 @@ public interface PlatformVersionDAO { " WHERE p.version_string = :versionString AND p.project_id = :projectId") List getPlatformsForVersionString(long projectId, String versionString); - // TODO -// Map> getPlatformVersionsForVersion(long versionId); + @KeyColumn("version") + @SqlQuery("SELECT * FROM platform_versions WHERE platform = :platform") + Map getForPlatform(@EnumByOrdinal Platform platform); } 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 c89973ae..3e52c961 100644 --- a/src/main/java/io/papermc/hangar/db/daoold/PlatformVersionsDao.java +++ b/src/main/java/io/papermc/hangar/db/daoold/PlatformVersionsDao.java @@ -1,48 +1,14 @@ package io.papermc.hangar.db.daoold; -import io.papermc.hangar.db.modelold.PlatformVersionsTable; -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; -import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; -import org.jdbi.v3.sqlobject.config.UseEnumStrategy; -import org.jdbi.v3.sqlobject.config.ValueColumn; -import org.jdbi.v3.sqlobject.customizer.BindBean; -import org.jdbi.v3.sqlobject.customizer.Timestamped; -import org.jdbi.v3.sqlobject.statement.SqlBatch; import org.jdbi.v3.sqlobject.statement.SqlQuery; import org.springframework.stereotype.Repository; -import java.util.Collection; import java.util.List; -import java.util.TreeMap; @Repository -@RegisterBeanMapper(PlatformVersionsTable.class) @Deprecated(forRemoval = true) public interface PlatformVersionsDao { - @Timestamped - @SqlBatch("INSERT INTO platform_versions (created_at, platform, version) VALUES (:now, :platform, :version)") - void insert(@BindBean Collection platformVersionsTableCollection); - - @SqlBatch("DELETE FROM platform_versions WHERE version = :version AND platform = :platform") - void delete(List version, int platform); - - @KeyColumn("platform") - @ValueColumn("versions") - @UseEnumStrategy(EnumStrategy.BY_ORDINAL) - @SqlQuery("SELECT platform, (array_agg(version ORDER BY string_to_array(version, '.')::INT[])) versions FROM platform_versions GROUP BY platform") - TreeMap> getVersions(); - @SqlQuery("SELECT version FROM platform_versions WHERE platform = :platform ORDER BY string_to_array(version, '.')::INT[]") List getVersionsForPlatform(int platform); - - @SqlQuery("SELECT * FROM platform_versions WHERE platform = :platform") - List getVersionsForPlatform(@EnumByOrdinal io.papermc.hangar.modelold.Platform platform); - - @SqlQuery("SELECT pv.* FROM project_version_platform_dependencies pvpd JOIN platform_versions pv ON pv.id = pvpd.platform_version_id WHERE pvpd.version_id = :versionId") - List getPlatformVersionsForVersion(long versionId); - } diff --git a/src/main/java/io/papermc/hangar/model/internal/api/requests/admin/ChangePlatformVersionsForm.java b/src/main/java/io/papermc/hangar/model/internal/api/requests/admin/ChangePlatformVersionsForm.java new file mode 100644 index 00000000..f2dcd863 --- /dev/null +++ b/src/main/java/io/papermc/hangar/model/internal/api/requests/admin/ChangePlatformVersionsForm.java @@ -0,0 +1,15 @@ +package io.papermc.hangar.model.internal.api.requests.admin; + +import io.papermc.hangar.model.common.Platform; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.EnumMap; +import java.util.List; + +public class ChangePlatformVersionsForm extends EnumMap> { + + public ChangePlatformVersionsForm() { + super(Platform.class); + } +} diff --git a/src/main/java/io/papermc/hangar/service/internal/PlatformService.java b/src/main/java/io/papermc/hangar/service/internal/PlatformService.java new file mode 100644 index 00000000..c0e2201d --- /dev/null +++ b/src/main/java/io/papermc/hangar/service/internal/PlatformService.java @@ -0,0 +1,56 @@ +package io.papermc.hangar.service.internal; + +import io.papermc.hangar.db.dao.HangarDao; +import io.papermc.hangar.db.dao.internal.table.PlatformVersionDAO; +import io.papermc.hangar.model.common.Platform; +import io.papermc.hangar.model.db.PlatformVersionTable; +import io.papermc.hangar.service.HangarService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class PlatformService extends HangarService { + + private final PlatformVersionDAO platformVersionDAO; + + @Autowired + public PlatformService(HangarDao platformVersionDAO) { + this.platformVersionDAO = platformVersionDAO.get(); + } + + public List getVersionsForPlatform(Platform platform) { + return platformVersionDAO.getVersionsForPlatform(platform); + } + + @Transactional + public void updatePlatformVersions(Map> platformVersions) { + final Map> toBeRemovedMap = new EnumMap<>(Platform.class); + final Map> toBeAddedMap = new EnumMap<>(Platform.class); + platformVersions.forEach((platform, versions) -> { + Map platformVersionTables = platformVersionDAO.getForPlatform(platform); + final Map toBeRemoved = new HashMap<>(); + final Map toBeAdded = new HashMap<>(); + platformVersionTables.forEach((version, pvt) -> { + if (!versions.contains(version)) { + toBeRemoved.put(version, pvt); + } + }); + versions.forEach(v -> { + if (!platformVersionTables.containsKey(v)) { + toBeAdded.put(v, new PlatformVersionTable(platform, v)); + } + }); + platformVersionDAO.deleteAll(toBeRemoved.values()); + platformVersionDAO.insertAll(toBeAdded.values()); + toBeRemovedMap.put(platform, toBeRemoved); + toBeAddedMap.put(platform, toBeAdded); + }); + // TODO logging + } +} diff --git a/src/main/java/io/papermc/hangar/service/internal/defaults/PopulationService.java b/src/main/java/io/papermc/hangar/service/internal/defaults/PopulationService.java index fbd86ed0..6ffe9038 100644 --- a/src/main/java/io/papermc/hangar/service/internal/defaults/PopulationService.java +++ b/src/main/java/io/papermc/hangar/service/internal/defaults/PopulationService.java @@ -65,9 +65,9 @@ public class PopulationService { Map> platformVersions = platformVersionDAO.getVersions(); if (platformVersions.isEmpty()) { log.info("Populating 'platform_versions' table with initial values"); - platformVersionDAO.insert(paperVersions.stream().map(v -> new PlatformVersionTable(Platform.PAPER, v)).collect(Collectors.toList())); - platformVersionDAO.insert(velocityVersions.stream().map(v -> new PlatformVersionTable(Platform.VELOCITY, v)).collect(Collectors.toList())); - platformVersionDAO.insert(waterfallVersions.stream().map(v -> new PlatformVersionTable(Platform.WATERFALL, v)).collect(Collectors.toList())); + platformVersionDAO.insertAll(paperVersions.stream().map(v -> new PlatformVersionTable(Platform.PAPER, v)).collect(Collectors.toList())); + platformVersionDAO.insertAll(velocityVersions.stream().map(v -> new PlatformVersionTable(Platform.VELOCITY, v)).collect(Collectors.toList())); + platformVersionDAO.insertAll(waterfallVersions.stream().map(v -> new PlatformVersionTable(Platform.WATERFALL, v)).collect(Collectors.toList())); } else { log.info("The 'platform_versions' table is already populated"); } diff --git a/src/main/java/io/papermc/hangar/service/internal/projects/PlatformService.java b/src/main/java/io/papermc/hangar/service/internal/projects/PlatformService.java deleted file mode 100644 index 60ad3244..00000000 --- a/src/main/java/io/papermc/hangar/service/internal/projects/PlatformService.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.papermc.hangar.service.internal.projects; - -import io.papermc.hangar.db.dao.HangarDao; -import io.papermc.hangar.db.dao.internal.table.PlatformVersionDAO; -import io.papermc.hangar.model.common.Platform; -import io.papermc.hangar.service.HangarService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class PlatformService extends HangarService { - - private final PlatformVersionDAO platformVersionDAO; - - @Autowired - public PlatformService(HangarDao platformVersionDAO) { - this.platformVersionDAO = platformVersionDAO.get(); - } - - public List getVersionsForPlatform(Platform platform) { - return platformVersionDAO.getVersionsForPlatform(platform); - } -} diff --git a/src/main/java/io/papermc/hangar/service/internal/versions/VersionDependencyService.java b/src/main/java/io/papermc/hangar/service/internal/versions/VersionDependencyService.java index 6a8bbc14..8b1f6610 100644 --- a/src/main/java/io/papermc/hangar/service/internal/versions/VersionDependencyService.java +++ b/src/main/java/io/papermc/hangar/service/internal/versions/VersionDependencyService.java @@ -118,6 +118,7 @@ public class VersionDependencyService extends HangarService { versionTagService.updateTag(projectVersionTagTable); } + @Transactional public void updateVersionPluginDependencies(long projectId, long versionId, UpdatePluginDependencies form) { Map projectVersionDependencies = projectVersionDependenciesDAO.getForVersionAndPlatform(versionId, form.getPlatform()); final Set toBeRemoved = new HashSet<>(); diff --git a/src/main/java/io/papermc/hangar/service/internal/versions/VersionFactory.java b/src/main/java/io/papermc/hangar/service/internal/versions/VersionFactory.java index 98c3e69c..343a2091 100644 --- a/src/main/java/io/papermc/hangar/service/internal/versions/VersionFactory.java +++ b/src/main/java/io/papermc/hangar/service/internal/versions/VersionFactory.java @@ -23,8 +23,8 @@ import io.papermc.hangar.model.internal.logs.contexts.VersionContext; import io.papermc.hangar.model.internal.versions.PendingVersion; import io.papermc.hangar.service.HangarService; import io.papermc.hangar.service.api.UsersApiService; +import io.papermc.hangar.service.internal.PlatformService; import io.papermc.hangar.service.internal.projects.ChannelService; -import io.papermc.hangar.service.internal.projects.PlatformService; import io.papermc.hangar.service.internal.projects.ProjectService; import io.papermc.hangar.service.internal.uploads.ProjectFiles; import io.papermc.hangar.service.internal.users.NotificationService; diff --git a/src/main/resources/templates/users/admin/platformVersions.ftlh b/src/main/resources/templates/users/admin/platformVersions.ftlh deleted file mode 100644 index a6df03a6..00000000 --- a/src/main/resources/templates/users/admin/platformVersions.ftlh +++ /dev/null @@ -1,20 +0,0 @@ -<#import "/spring.ftl" as spring /> -<#import "*/utils/hangar.ftlh" as hangar /> -<#import "*/utils/form.ftlh" as form /> -<#import "*/utils/csrf.ftlh" as csrf /> -<#import "*/layout/base.ftlh" as base /> - -<#assign scriptsVar> - - - - - -<#assign message><@spring.message "admin.platformVersions.title" /> -<@base.base title="${message}" additionalScripts=scriptsVar> -
-