From f7f5128fa621a2435f78a0d380580e190d29edb1 Mon Sep 17 00:00:00 2001 From: Thomasr Date: Fri, 30 May 2025 17:03:02 -0400 Subject: [PATCH] When an anonymous user visits a published app, a log entry is added to the app_usage_log table. --- .../api/util/BusinessEventPublisher.java | 80 +++++++++---------- 1 file changed, 36 insertions(+), 44 deletions(-) diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/util/BusinessEventPublisher.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/util/BusinessEventPublisher.java index 9e0476253..eb2cf5d0a 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/util/BusinessEventPublisher.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/util/BusinessEventPublisher.java @@ -126,9 +126,6 @@ public Mono publishApplicationCommonEvent(ApplicationView originalApplicat public Mono publishApplicationCommonEvent(ApplicationView originalApplicationView, ApplicationView applicationView, EventType eventType) { return sessionUserService.isAnonymousUser() .flatMap(anonymous -> { - if (anonymous) { - return Mono.empty(); - } return sessionUserService.getVisitorOrgMemberCache() .zipWith(Mono.defer(() -> { String folderId = applicationView.getApplicationInfoView().getFolderId(); @@ -204,50 +201,45 @@ public Mono publishApplicationCommonEvent(ApplicationView originalApplicat }); }); } - + public Mono publishApplicationPermissionEvent(String applicationId, Set userIds, Set groupIds, String permissionId, String role) { return sessionUserService.isAnonymousUser() - .flatMap(anonymous -> { - if (anonymous) { - return Mono.empty(); - } - return sessionUserService.getVisitorOrgMemberCache() - .zipWith(sessionUserService.getVisitorToken()) - .zipWith(applicationService.findById(applicationId) - .zipWhen(application -> application.getCategory(applicationRecordServiceImpl)) - .zipWhen(application -> application.getT1().getDescription(applicationRecordServiceImpl))) - .flatMap(tuple -> { - OrgMember orgMember = tuple.getT1().getT1(); - String token = tuple.getT1().getT2(); - String category = tuple.getT2().getT1().getT2(); - String description = tuple.getT2().getT2(); - Application application = tuple.getT2().getT1().getT1(); - - ApplicationCommonEvent event = ApplicationCommonEvent.builder() - .orgId(orgMember.getOrgId()) - .userId(orgMember.getUserId()) - .applicationId(application.getId()) - .applicationGid(application.getGid()) - .applicationName(application.getName()) - .applicationCategory(category) - .applicationDescription(description) - .type(EventType.APPLICATION_PERMISSION_CHANGE) - .permissionId(permissionId) - .role(role) - .userIds(userIds) - .groupIds(groupIds) - .isAnonymous(anonymous) - .sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString()) - .build(); - - return Mono.deferContextual(contextView -> { - event.populateDetails(contextView); - applicationEventPublisher.publishEvent(event); - return Mono.empty(); - }).then(); // **Fix: Ensures Mono is returned** - }); - }) + .flatMap(anonymous -> sessionUserService.getVisitorOrgMemberCache() + .zipWith(sessionUserService.getVisitorToken()) + .zipWith(applicationService.findById(applicationId) + .zipWhen(application -> application.getCategory(applicationRecordServiceImpl)) + .zipWhen(application -> application.getT1().getDescription(applicationRecordServiceImpl))) + .flatMap(tuple -> { + OrgMember orgMember = tuple.getT1().getT1(); + String token = tuple.getT1().getT2(); + String category = tuple.getT2().getT1().getT2(); + String description = tuple.getT2().getT2(); + Application application = tuple.getT2().getT1().getT1(); + + ApplicationCommonEvent event = ApplicationCommonEvent.builder() + .orgId(orgMember.getOrgId()) + .userId(orgMember.getUserId()) + .applicationId(application.getId()) + .applicationGid(application.getGid()) + .applicationName(application.getName()) + .applicationCategory(category) + .applicationDescription(description) + .type(EventType.APPLICATION_PERMISSION_CHANGE) + .permissionId(permissionId) + .role(role) + .userIds(userIds) + .groupIds(groupIds) + .isAnonymous(anonymous) + .sessionHash(Hashing.sha512().hashString(token, StandardCharsets.UTF_8).toString()) + .build(); + + return Mono.deferContextual(contextView -> { + event.populateDetails(contextView); + applicationEventPublisher.publishEvent(event); + return Mono.empty(); + }).then(); // **Fix: Ensures Mono is returned** + })) .onErrorResume(throwable -> { log.error("publishApplicationPermissionEvent error. {}, {}, {}", applicationId, permissionId, role, throwable); return Mono.empty(); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy