diff --git a/src/main/java/freemarker_implicit.ftl b/src/main/java/freemarker_implicit.ftl index 79e35209a..b4645f797 100644 --- a/src/main/java/freemarker_implicit.ftl +++ b/src/main/java/freemarker_implicit.ftl @@ -1,5 +1,7 @@ [#ftl] [#-- @implicitly included --] [#-- @ftlvariable name="routes" type="me.minidigger.hangar.util.RouteHelper" --] +[#-- @ftlvariable name="templateHelper" type="me.minidigger.hangar.util.TemplateHelper" --] [#-- @ftlvariable name="modelData" type="me.minidigger.hangar.model.ModelData" --] [#-- @ftlvariable name="rc" type="org.springframework.web.servlet.support.RequestContext" --] +[#-- @ftlvariable name="user" type="me.minidigger.hangar.model.User" --] diff --git a/src/main/java/me/minidigger/hangar/controller/HangarController.java b/src/main/java/me/minidigger/hangar/controller/HangarController.java index 808f6f103..086f88676 100644 --- a/src/main/java/me/minidigger/hangar/controller/HangarController.java +++ b/src/main/java/me/minidigger/hangar/controller/HangarController.java @@ -6,21 +6,32 @@ import freemarker.template.Configuration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.ModelAndView; -import me.minidigger.hangar.model.ModelData; +import me.minidigger.hangar.service.UserService; import me.minidigger.hangar.util.RouteHelper; +import me.minidigger.hangar.util.TemplateHelper; public abstract class HangarController { @Autowired private RouteHelper routeHelper; + @Autowired + private UserService userService; + @Autowired + private TemplateHelper templateHelper; protected ModelAndView fillModel(ModelAndView mav) { - mav.addObject("modelData", new ModelData()); + // helpers mav.addObject("routes", routeHelper); + mav.addObject("templateHelper", templateHelper); BeansWrapperBuilder builder = new BeansWrapperBuilder(Configuration.VERSION_2_3_30); builder.setExposeFields(true); builder.setUseModelCache(true); mav.addObject("@helper", builder.build().getStaticModels()); + + // user data + mav.addObject("user", userService.getCurrentUser()); + mav.addObject("modelData", userService.getModelData()); + return mav; } } diff --git a/src/main/java/me/minidigger/hangar/controller/ProjectsController.java b/src/main/java/me/minidigger/hangar/controller/ProjectsController.java index 723b0c25f..b46844115 100644 --- a/src/main/java/me/minidigger/hangar/controller/ProjectsController.java +++ b/src/main/java/me/minidigger/hangar/controller/ProjectsController.java @@ -8,11 +8,21 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; -import me.minidigger.hangar.controller.HangarController; +import me.minidigger.hangar.model.Permission; +import me.minidigger.hangar.service.OrgService; +import me.minidigger.hangar.service.UserService; @Controller public class ProjectsController extends HangarController { + private final UserService userService; + private final OrgService orgService; + + public ProjectsController(UserService userService, OrgService orgService) { + this.userService = userService; + this.orgService = orgService; + } + @PostMapping("/") public Object createProject() { return null; // TODO implement createProject request controller @@ -30,7 +40,9 @@ public class ProjectsController extends HangarController { @RequestMapping("/new") public Object showCreator() { - return fillModel(new ModelAndView("projects/create")); + ModelAndView mav = new ModelAndView("projects/create"); + mav.addObject("createProjectOrgas", orgService.getOrgsWithPerm(userService.getCurrentUser(), Permission.CreateProject)); + return fillModel(mav); } @RequestMapping("/{author}/{slug}") diff --git a/src/main/java/me/minidigger/hangar/controller/UsersController.java b/src/main/java/me/minidigger/hangar/controller/UsersController.java index d94a58fb5..f974a3aad 100644 --- a/src/main/java/me/minidigger/hangar/controller/UsersController.java +++ b/src/main/java/me/minidigger/hangar/controller/UsersController.java @@ -13,8 +13,8 @@ import me.minidigger.hangar.controller.HangarController; public class UsersController extends HangarController { @RequestMapping("/authors") - public Object showAuthors(@RequestParam Object sort, @RequestParam Object page) { - return null; // TODO implement showAuthors request controller + public ModelAndView showAuthors(@RequestParam(required = false) Object sort, @RequestParam(required = false) Object page) { + return fillModel(new ModelAndView("users/authors")); // TODO implement showAuthors request controller } @RequestMapping("/login") diff --git a/src/main/java/me/minidigger/hangar/model/NamedPermission.java b/src/main/java/me/minidigger/hangar/model/NamedPermission.java index 6e1a46724..2b7b439a5 100644 --- a/src/main/java/me/minidigger/hangar/model/NamedPermission.java +++ b/src/main/java/me/minidigger/hangar/model/NamedPermission.java @@ -7,48 +7,50 @@ import com.fasterxml.jackson.annotation.JsonValue; * Gets or Sets NamedPermission */ public enum NamedPermission { - VIEW_PUBLIC_INFO("view_public_info", Permission.ViewPublicInfo), - EDIT_OWN_USER_SETTINGS("edit_own_user_settings", Permission.EditOwnUserSettings), - EDIT_API_KEYS("edit_api_keys", Permission.EditApiKeys), + VIEW_PUBLIC_INFO("view_public_info", Permission.ViewPublicInfo, "ViewPublicInfo"), + EDIT_OWN_USER_SETTINGS("edit_own_user_settings", Permission.EditOwnUserSettings, "EditOwnUserSettings"), + EDIT_API_KEYS("edit_api_keys", Permission.EditApiKeys, "EditApiKeys"), - EDIT_SUBJECT_SETTINGS("edit_subject_settings", Permission.EditSubjectSettings), - MANAGE_SUBJECT_MEMBERS("manage_subject_members", Permission.ManageSubjectMembers), - IS_SUBJECT_OWNER("is_subject_owner", Permission.IsSubjectOwner), - IS_SUBJECT_MEMBER("is_subject_member", Permission.IsSubjectMember), + EDIT_SUBJECT_SETTINGS("edit_subject_settings", Permission.EditSubjectSettings, "EditSubjectSettings"), + MANAGE_SUBJECT_MEMBERS("manage_subject_members", Permission.ManageSubjectMembers, "ManageSubjectMembers"), + IS_SUBJECT_OWNER("is_subject_owner", Permission.IsSubjectOwner, "IsSubjectOwner"), + IS_SUBJECT_MEMBER("is_subject_member", Permission.IsSubjectMember, "IsSubjectMember"), - CREATE_PROJECT("create_project", Permission.CreateProject), - EDIT_PAGE("edit_page", Permission.EditPage), - DELETE_PROJECT("delete_project", Permission.DeleteProject), + CREATE_PROJECT("create_project", Permission.CreateProject, "CreateProject"), + EDIT_PAGE("edit_page", Permission.EditPage, "EditPage"), + DELETE_PROJECT("delete_project", Permission.DeleteProject, "DeleteProject"), - CREATE_VERSION("create_version", Permission.CreateVersion), - EDIT_VERSION("edit_version", Permission.EditVersion), - DELETE_VERSION("delete_version", Permission.DeleteVersion), - EDIT_TAGS("edit_tags", Permission.EditTags), + CREATE_VERSION("create_version", Permission.CreateVersion, "CreateVersion"), + EDIT_VERSION("edit_version", Permission.EditVersion, "EditVersion"), + DELETE_VERSION("delete_version", Permission.DeleteVersion, "DeleteVersion"), + EDIT_TAGS("edit_tags", Permission.EditTags, "EditTags"), - CREATE_ORGANIZATION("create_organization", Permission.CreateOrganization), - POST_AS_ORGANIZATION("post_as_organization", Permission.PostAsOrganization), + CREATE_ORGANIZATION("create_organization", Permission.CreateOrganization, "CreateOrganization"), + POST_AS_ORGANIZATION("post_as_organization", Permission.PostAsOrganization, "PostAsOrganization"), - MOD_NOTES_AND_FLAGS("mod_notes_and_flags", Permission.ModNotesAndFlags), - SEE_HIDDEN("see_hidden", Permission.SeeHidden), - IS_STAFF("is_staff", Permission.IsStaff), - REVIEWER("reviewer", Permission.Reviewer), + MOD_NOTES_AND_FLAGS("mod_notes_and_flags", Permission.ModNotesAndFlags, "ModNotesAndFlags"), + SEE_HIDDEN("see_hidden", Permission.SeeHidden, "SeeHidden"), + IS_STAFF("is_staff", Permission.IsStaff, "IsStaff"), + REVIEWER("reviewer", Permission.Reviewer, "Reviewer"), - VIEW_HEALTH("view_health", Permission.ViewHealth), - VIEW_IP("view_ip", Permission.ViewIp), - VIEW_STATS("view_stats", Permission.ViewStats), - VIEW_LOGS("view_logs", Permission.ViewLogs), + VIEW_HEALTH("view_health", Permission.ViewHealth, "ViewHealth"), + VIEW_IP("view_ip", Permission.ViewIp, "ViewIp"), + VIEW_STATS("view_stats", Permission.ViewStats, "ViewStats"), + VIEW_LOGS("view_logs", Permission.ViewLogs, "ViewLogs"), - MANUAL_VALUE_CHANGES("manual_value_changes", Permission.ManualValueChanges), - HARD_DELETE_PROJECT("hard_delete_project", Permission.HardDeleteProject), - HARD_DELETE_VERSION("hard_delete_version", Permission.HardDeleteVersion), - EDIT_ALL_USER_SETTINGS("edit_all_user_settings", Permission.EditAllUserSettings); + MANUAL_VALUE_CHANGES("manual_value_changes", Permission.ManualValueChanges, "ManualValueChanges"), + HARD_DELETE_PROJECT("hard_delete_project", Permission.HardDeleteProject, "HardDeleteProject"), + HARD_DELETE_VERSION("hard_delete_version", Permission.HardDeleteVersion, "HardDeleteVersion"), + EDIT_ALL_USER_SETTINGS("edit_all_user_settings", Permission.EditAllUserSettings, "EditAllUserSettings"); private final String value; private final Permission permission; + private final String frontendName; - NamedPermission(String value, Permission permission) { + NamedPermission(String value, Permission permission, String frontendName) { this.value = value; this.permission = permission; + this.frontendName = frontendName; } @Override @@ -60,7 +62,16 @@ public enum NamedPermission { @JsonCreator public static NamedPermission fromValue(String text) { for (NamedPermission b : NamedPermission.values()) { - if (String.valueOf(b.value).equals(text)) { + if (b.value.equals(text)) { + return b; + } + } + return null; + } + + public static NamedPermission fromFrontendName(String text) { + for (NamedPermission b : NamedPermission.values()) { + if (b.frontendName.equals(text)) { return b; } } diff --git a/src/main/java/me/minidigger/hangar/model/Organization.java b/src/main/java/me/minidigger/hangar/model/Organization.java new file mode 100644 index 000000000..65514b032 --- /dev/null +++ b/src/main/java/me/minidigger/hangar/model/Organization.java @@ -0,0 +1,48 @@ +package me.minidigger.hangar.model; + +public class Organization { + + private int id; + private int userId; + private String name; + private int ownerId; + + public Organization(int id, int userId, String name, int ownerId) { + this.id = id; + this.userId = userId; + this.name = name; + this.ownerId = ownerId; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getOwnerId() { + return ownerId; + } + + public void setOwnerId(int ownerId) { + this.ownerId = ownerId; + } +} diff --git a/src/main/java/me/minidigger/hangar/model/User.java b/src/main/java/me/minidigger/hangar/model/User.java index 16cfb319d..cbaff999d 100644 --- a/src/main/java/me/minidigger/hangar/model/User.java +++ b/src/main/java/me/minidigger/hangar/model/User.java @@ -39,6 +39,25 @@ public class User { return this; } + private String avatarUrl; + private String id; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getAvatarUrl() { + return avatarUrl; + } + + public void setAvatarUrl(String avatarUrl) { + this.avatarUrl = avatarUrl; + } + /** * Get createdAt * @@ -56,11 +75,6 @@ public class User { this.createdAt = createdAt; } - public User name(String name) { - this.name = name; - return this; - } - /** * Get name * diff --git a/src/main/java/me/minidigger/hangar/service/OrgService.java b/src/main/java/me/minidigger/hangar/service/OrgService.java new file mode 100644 index 000000000..51a4c7851 --- /dev/null +++ b/src/main/java/me/minidigger/hangar/service/OrgService.java @@ -0,0 +1,17 @@ +package me.minidigger.hangar.service; + +import org.springframework.stereotype.Service; + +import java.util.List; + +import me.minidigger.hangar.model.Organization; +import me.minidigger.hangar.model.Permission; +import me.minidigger.hangar.model.User; + +@Service +public class OrgService { + + public List getOrgsWithPerm(User user, Permission permission) { + return List.of(new Organization(-1, -1, "TestOrg", -1)); + } +} diff --git a/src/main/java/me/minidigger/hangar/service/UserService.java b/src/main/java/me/minidigger/hangar/service/UserService.java new file mode 100644 index 000000000..71fff34b1 --- /dev/null +++ b/src/main/java/me/minidigger/hangar/service/UserService.java @@ -0,0 +1,24 @@ +package me.minidigger.hangar.service; + +import org.springframework.stereotype.Service; + +import me.minidigger.hangar.model.ModelData; +import me.minidigger.hangar.model.User; + +@Service +public class UserService { + + public User getCurrentUser() { + User user = new User(); + user.setName("Test"); + user.setAvatarUrl("https://paper.readthedocs.io/en/latest/_images/papermc_logomark_500.png"); + user.setId("dummyid"); + return user; + } + + public ModelData getModelData() { + ModelData modelData = new ModelData(); + + return modelData; + } +} diff --git a/src/main/java/me/minidigger/hangar/util/TemplateHelper.java b/src/main/java/me/minidigger/hangar/util/TemplateHelper.java new file mode 100644 index 000000000..e7404e6ae --- /dev/null +++ b/src/main/java/me/minidigger/hangar/util/TemplateHelper.java @@ -0,0 +1,14 @@ +package me.minidigger.hangar.util; + +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +public class TemplateHelper { + + public Map randomSponsor() { + // TODO implement random sponsor stuff + return Map.of("link", "https://minidigger.me", "image", "https://avatars2.githubusercontent.com/u/2185527?s=400&v=4"); + } +} diff --git a/src/main/resources/templates/createOrganization.ftlh b/src/main/resources/templates/createOrganization.ftlh index a456a82be..e15c4082d 100644 --- a/src/main/resources/templates/createOrganization.ftlh +++ b/src/main/resources/templates/createOrganization.ftlh @@ -38,8 +38,7 @@ <#import "*/users/invite/form.ftlh" as userForm> -<#-- <@userForm.form owner=request.headerData.currentUser roleCategory=RoleCategory.Organization />--> - <@userForm.form owner="" roleCategory="" /> + <@userForm.form owner=user roleCategory=@helper["me.minidigger.hangar.model.PermissionType"].ORGANIZATION />