|
23 | 23 | import org.lowcoder.domain.authentication.FindAuthConfig;
|
24 | 24 | import org.lowcoder.domain.authentication.context.AuthRequestContext;
|
25 | 25 | import org.lowcoder.domain.authentication.context.FormAuthRequestContext;
|
| 26 | +import org.lowcoder.domain.invitation.service.InvitationService; |
26 | 27 | import org.lowcoder.domain.organization.model.OrgMember;
|
27 | 28 | import org.lowcoder.domain.organization.model.Organization;
|
28 | 29 | import org.lowcoder.domain.organization.model.OrganizationDomain;
|
|
41 | 42 | import reactor.core.publisher.Flux;
|
42 | 43 | import reactor.core.publisher.Mono;
|
43 | 44 |
|
| 45 | +import java.time.Duration; |
| 46 | +import java.time.Instant; |
44 | 47 | import java.util.*;
|
45 | 48 | import java.util.function.Function;
|
46 | 49 | import java.util.function.Predicate;
|
@@ -69,6 +72,7 @@ public class AuthenticationApiServiceImpl implements AuthenticationApiService {
|
69 | 72 | private final OrgMemberService orgMemberService;
|
70 | 73 | private final JWTUtils jwtUtils;
|
71 | 74 | private final AuthProperties authProperties;
|
| 75 | + private final InvitationService invitationService; |
72 | 76 |
|
73 | 77 | @Override
|
74 | 78 | public Mono<AuthUser> authenticateByForm(String loginId, String password, String source, boolean register, String authId, String orgId) {
|
@@ -120,7 +124,18 @@ protected Mono<AuthUser> authenticate(String authId, @Deprecated String source,
|
120 | 124 | @Override
|
121 | 125 | public Mono<Void> loginOrRegister(AuthUser authUser, ServerWebExchange exchange,
|
122 | 126 | String invitationId, boolean linKExistingUser) {
|
123 |
| - return updateOrCreateUser(authUser, linKExistingUser, false) |
| 127 | + Mono<Boolean> expiryCheckMono; |
| 128 | + if(invitationId != null && !invitationId.trim().isEmpty()) { |
| 129 | + expiryCheckMono = invitationService.getById(invitationId) |
| 130 | + .handle((invitation, sink) -> { |
| 131 | + boolean expired = Instant.now().isAfter(invitation.getCreatedAt().plus(Duration.ofHours(12))); |
| 132 | + if(expired) sink.error(new BizException(LINK_EXPIRED, "LINK_EXPIRED")); |
| 133 | + sink.next(true); |
| 134 | + }); |
| 135 | + } else { |
| 136 | + expiryCheckMono = Mono.just(true); |
| 137 | + } |
| 138 | + return expiryCheckMono.then(updateOrCreateUser(authUser, linKExistingUser, false) |
124 | 139 | .delayUntil(user -> ReactiveSecurityContextHolder.getContext()
|
125 | 140 | .doOnNext(securityContext -> securityContext.setAuthentication(AuthenticationUtils.toAuthentication(user))))
|
126 | 141 | // save token and set cookie
|
@@ -148,7 +163,7 @@ public Mono<Void> loginOrRegister(AuthUser authUser, ServerWebExchange exchange,
|
148 | 163 | return invitationApiService.inviteUser(invitationId);
|
149 | 164 | })
|
150 | 165 | // publish event
|
151 |
| - .then(businessEventPublisher.publishUserLoginEvent(authUser.getSource())); |
| 166 | + .then(businessEventPublisher.publishUserLoginEvent(authUser.getSource()))); |
152 | 167 | }
|
153 | 168 |
|
154 | 169 | public Mono<User> updateOrCreateUser(AuthUser authUser, boolean linkExistingUser, boolean isSuperAdmin) {
|
|
0 commit comments