From 7b41a49dd14d31c0608ad67a027f8aba7715e126 Mon Sep 17 00:00:00 2001 From: MiniDigger Date: Thu, 13 May 2021 15:39:37 +0200 Subject: [PATCH] minor stuff Signed-off-by: MiniDigger --- frontend/locales/en.ts | 2 + frontend/pages/_author/_slug/discuss.vue | 50 ++++++++++++------- .../versions/_version/_platform/index.vue | 4 +- frontend/types/api/projects.d.ts | 2 + .../hangar/controller/LoginController.java | 11 ++-- .../db/dao/internal/HangarUsersDAO.java | 2 - .../hangar/db/dao/v1/ProjectsApiDAO.java | 2 + .../exceptions/MultiHangarApiException.java | 1 - .../service/api/ProjectsApiService.java | 6 +-- 9 files changed, 46 insertions(+), 34 deletions(-) diff --git a/frontend/locales/en.ts b/frontend/locales/en.ts index 82d02ba64..1dfa43491 100644 --- a/frontend/locales/en.ts +++ b/frontend/locales/en.ts @@ -305,6 +305,8 @@ const msgs: LocaleMessageObject = { discuss: { login: 'Log in', toReply: 'to reply to this discussion', + noTopic: 'There is no discussion for this project', + send: 'Reply posted!', }, }, page: { diff --git a/frontend/pages/_author/_slug/discuss.vue b/frontend/pages/_author/_slug/discuss.vue index 5f698ecb3..769322c75 100644 --- a/frontend/pages/_author/_slug/discuss.vue +++ b/frontend/pages/_author/_slug/discuss.vue @@ -1,21 +1,28 @@ @@ -36,8 +43,13 @@ interface DiscourseEmbed { components: { MarkdownEditor }, }) export default class ProjectDiscussPage extends HangarProjectMixin { - // TODO get topic id from project, get discourse url from backend - DE: DiscourseEmbed = { discourseUrl: 'http://localhost/', topicId: 13, discourseUserName: null, discourseEmbedUrl: null }; + // TODO get discourse url from backend + DE: DiscourseEmbed = { + discourseUrl: 'http://localhost/', + topicId: this.project.topicId, + discourseUserName: null, + discourseEmbedUrl: null, + }; $refs!: { iframe: any; @@ -48,12 +60,12 @@ export default class ProjectDiscussPage extends HangarProjectMixin { window.addEventListener('message', this.postMessageReceived, false); } - // TODO implement async postReply(message: string) { await this.$api.requestInternal('discourse/' + this.project.id + '/comment', true, 'POST', { content: message }); this.$refs.editor.isEditing = true; this.$refs.editor.loading.save = false; this.$refs.editor.rawEdited = ''; + this.$util.success(this.$t('project.discuss.send')); } get url() { diff --git a/frontend/pages/_author/_slug/versions/_version/_platform/index.vue b/frontend/pages/_author/_slug/versions/_version/_platform/index.vue index 7baee028f..879b0b9c2 100644 --- a/frontend/pages/_author/_slug/versions/_version/_platform/index.vue +++ b/frontend/pages/_author/_slug/versions/_version/_platform/index.vue @@ -64,8 +64,8 @@ - - + + {{ $t('version.page.userAdminLogs') }} diff --git a/frontend/types/api/projects.d.ts b/frontend/types/api/projects.d.ts index d209592bb..608b35958 100644 --- a/frontend/types/api/projects.d.ts +++ b/frontend/types/api/projects.d.ts @@ -68,6 +68,8 @@ declare module 'hangar-api' { lastUpdated: Date; userActions: UserActions; settings: ProjectSettings; + postId: number; + topicId: number; promotedVersions: PromotedVersion[]; } } diff --git a/src/main/java/io/papermc/hangar/controller/LoginController.java b/src/main/java/io/papermc/hangar/controller/LoginController.java index d7a7a7cbe..c73979a19 100644 --- a/src/main/java/io/papermc/hangar/controller/LoginController.java +++ b/src/main/java/io/papermc/hangar/controller/LoginController.java @@ -84,6 +84,10 @@ public class LoginController extends HangarComponent { @ResponseStatus(HttpStatus.NO_CONTENT) public void invalidateRefreshToken(@CookieValue(name = SecurityConfig.AUTH_NAME_REFRESH_COOKIE) String refreshToken) { tokenService.invalidateToken(refreshToken); + HttpSession session = request.getSession(false); + if (session != null) { + session.invalidate(); + } } // TODO needed? @@ -95,13 +99,6 @@ public class LoginController extends HangarComponent { return redirectToSso(ssoService.getVerifyUrl(config.getBaseUrl() + returnPath)); } - // TODO needed? - @GetMapping("/logout") - public ModelAndView logout(HttpSession session) { - session.invalidate(); - return Routes.getRedirectToUrl(config.getAuthUrl() + "/accounts/logout/"); - } - @GetMapping("/signup") public RedirectView signUp(@RequestParam(defaultValue = "") String returnUrl) { if (config.fakeUser.isEnabled()) { diff --git a/src/main/java/io/papermc/hangar/db/dao/internal/HangarUsersDAO.java b/src/main/java/io/papermc/hangar/db/dao/internal/HangarUsersDAO.java index 82f048a8a..4f73c620e 100644 --- a/src/main/java/io/papermc/hangar/db/dao/internal/HangarUsersDAO.java +++ b/src/main/java/io/papermc/hangar/db/dao/internal/HangarUsersDAO.java @@ -29,12 +29,10 @@ public interface HangarUsersDAO { @SqlUpdate("DELETE FROM project_stars WHERE user_id = :userId AND project_id = :projectId") void setNotStarred(long projectId, long userId); - // TODO useful to have a un-star all for users @SqlUpdate("INSERT INTO project_watchers VALUES (:projectId, :userId)") void setWatching(long projectId, long userId); @SqlUpdate("DELETE FROM project_watchers WHERE project_id = :projectId AND user_id = :userId") void setNotWatching(long projectId, long userId); - // TODO useful to have an un-watch all for users } diff --git a/src/main/java/io/papermc/hangar/db/dao/v1/ProjectsApiDAO.java b/src/main/java/io/papermc/hangar/db/dao/v1/ProjectsApiDAO.java index 6cde84af9..78e12899d 100644 --- a/src/main/java/io/papermc/hangar/db/dao/v1/ProjectsApiDAO.java +++ b/src/main/java/io/papermc/hangar/db/dao/v1/ProjectsApiDAO.java @@ -94,6 +94,8 @@ public interface ProjectsApiDAO { " p.license_url," + " p.keywords," + " p.forum_sync," + + " p.topic_id," + + " p.post_id," + " p.donation_enabled," + " p.donation_email," + " p.donation_default_amount," + diff --git a/src/main/java/io/papermc/hangar/exceptions/MultiHangarApiException.java b/src/main/java/io/papermc/hangar/exceptions/MultiHangarApiException.java index 2073412e2..5fc0104fc 100644 --- a/src/main/java/io/papermc/hangar/exceptions/MultiHangarApiException.java +++ b/src/main/java/io/papermc/hangar/exceptions/MultiHangarApiException.java @@ -45,7 +45,6 @@ public class MultiHangarApiException extends ResponseStatusException { gen.writeBooleanField("isHangarApiException", true); gen.writeArrayFieldStart("exceptions"); for (HangarApiException exception : value.exceptions) { - // TODO for some reason, can't use serializers.defaultSerializeValue String message = exception.getReason(); if (message == null || message.isBlank()) { message = exception.getStatus().getReasonPhrase(); 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 11b4d4009..7d344c9f9 100644 --- a/src/main/java/io/papermc/hangar/service/api/ProjectsApiService.java +++ b/src/main/java/io/papermc/hangar/service/api/ProjectsApiService.java @@ -62,15 +62,15 @@ public class ProjectsApiService extends HangarComponent { relevance = "ts_rank(hp.search_words, websearch_to_tsquery('english', :query)) DESC"; } String orderingFirstHalf; - // 1483056000 is the Ore epoch TODO change to hangar epoch + // 1609459200 is the hangar epoch // 86400 seconds to days // 604800‬ seconds to weeks switch(sort){ case STARS: orderingFirstHalf = "hp.stars * "; break; case DOWNLOADS: orderingFirstHalf ="(hp.downloads / 100) * "; break; case VIEWS: orderingFirstHalf ="(hp.views / 200) *"; break; - case NEWEST: orderingFirstHalf ="((EXTRACT(EPOCH FROM hp.created_at) - 1483056000) / 86400) *"; break; - case UPDATED: orderingFirstHalf ="((EXTRACT(EPOCH FROM hp.last_updated) - 1483056000) / 604800) *"; break; + case NEWEST: orderingFirstHalf ="((EXTRACT(EPOCH FROM hp.created_at) - 1609459200) / 86400) *"; break; + case UPDATED: orderingFirstHalf ="((EXTRACT(EPOCH FROM hp.last_updated) - 1609459200) / 604800) *"; break; case ONLY_RELEVANCE: orderingFirstHalf = ""; break; case RECENT_DOWNLOADS : orderingFirstHalf ="hp.recent_views *"; break; case RECENT_VIEWS: orderingFirstHalf ="hp.recent_downloads *"; break;