diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/authentication/AuthenticationServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/authentication/AuthenticationServiceImpl.java index cb3104ccb..c82054153 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/authentication/AuthenticationServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/authentication/AuthenticationServiceImpl.java @@ -1,10 +1,13 @@ package org.lowcoder.domain.authentication; import lombok.extern.slf4j.Slf4j; +import org.lowcoder.domain.organization.service.OrgMemberService; import org.lowcoder.domain.organization.service.OrganizationService; import org.lowcoder.sdk.auth.AbstractAuthConfig; +import org.lowcoder.sdk.auth.EmailAuthConfig; import org.lowcoder.sdk.config.AuthProperties; import org.lowcoder.sdk.config.CommonConfig; +import org.lowcoder.sdk.constants.AuthSourceConstants; import org.lowcoder.sdk.constants.WorkspaceMode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -24,6 +27,10 @@ public class AuthenticationServiceImpl implements AuthenticationService { @Autowired private OrganizationService organizationService; + + @Autowired + private OrgMemberService orgMemberService; + @Autowired private CommonConfig commonConfig; @Autowired @@ -49,7 +56,16 @@ private Mono findAuthConfig(String orgId, Function findAllAuthConfigs(String orgId, boolean enableOnly) { - return findAllAuthConfigsByDomain() + + Mono emailAuthConfigMono = orgMemberService.doesAtleastOneAdminExist() + .map(doesAtleastOneAdminExist -> { + boolean shouldEnableRegister = !doesAtleastOneAdminExist && authProperties.getEmail().isEnableRegister(); + return new FindAuthConfig + (new EmailAuthConfig(AuthSourceConstants.EMAIL, authProperties.getEmail().isEnable(), shouldEnableRegister), null); + }); + + + Flux findAuthConfigFlux = findAllAuthConfigsByDomain() .switchIfEmpty(findAllAuthConfigsForEnterpriseMode()) .switchIfEmpty(findAllAuthConfigsForSaasMode(orgId)) .filter(findAuthConfig -> { @@ -57,8 +73,10 @@ public Flux findAllAuthConfigs(String orgId, boolean enableOnly) return findAuthConfig.authConfig().isEnable(); } return true; - }) - .concatWithValues(new FindAuthConfig(DEFAULT_AUTH_CONFIG, null)); + }); + + return Flux.concat(findAuthConfigFlux, emailAuthConfigMono); + } private Flux findAllAuthConfigsByDomain() { diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrgMemberService.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrgMemberService.java index e027efcf6..bc2627dd8 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrgMemberService.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrgMemberService.java @@ -24,6 +24,8 @@ public interface OrgMemberService { Mono getOrgMemberCount(String orgId); + Mono doesAtleastOneAdminExist(); + Mono countAllActiveOrgs(String userId); Mono getOrgMember(String orgId, String userId); diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrgMemberServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrgMemberServiceImpl.java index 5d0b4fd08..9e6fb1b23 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrgMemberServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrgMemberServiceImpl.java @@ -125,6 +125,13 @@ public Mono getOrgMemberCount(String orgId) { return biRelationService.countBySourceId(ORG_MEMBER, orgId); } + @Override + public Mono doesAtleastOneAdminExist() { + return biRelationService.countByRelation(ORG_MEMBER, MemberRole.ADMIN.getValue()) + .single() + .map(count -> count != 0); + } + @Override public Mono addMember(String orgId, String userId, MemberRole memberRole) { return biRelationService.addBiRelation(ORG_MEMBER, orgId, diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionService.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionService.java index 750b375f5..dc345993c 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionService.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionService.java @@ -48,7 +48,7 @@ public Mono executeQuery(Datasource datasource, Map { if (datasourceMetaInfoService.isJsDatasourcePlugin(datasource.getType())) { diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationRepository.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationRepository.java index 6a3a7c424..65eb27074 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationRepository.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationRepository.java @@ -26,6 +26,8 @@ public interface BiRelationRepository extends ReactiveMongoRepository findByBizTypeAndSourceIdAndRelation(BiRelationBizType bizType, String sourceId, String relation); + Mono countByBizTypeAndRelation(BiRelationBizType bizType, String relation); + Mono countByBizTypeAndSourceId(BiRelationBizType bizType, String sourceId); Mono countByBizTypeAndTargetId(BiRelationBizType bizType, String targetId); diff --git a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationService.java b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationService.java index 43dac65c9..ebb8d9c29 100644 --- a/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationService.java +++ b/server/api-service/lowcoder-infra/src/main/java/org/lowcoder/infra/birelation/BiRelationService.java @@ -166,6 +166,10 @@ public Flux getBySourceIdAndRelation(BiRelationBizType bizType, Stri return biRelationRepository.findByBizTypeAndSourceIdAndRelation(bizType, sourceId, relation); } + public Mono countByRelation(BiRelationBizType bizType, String relation) { + return biRelationRepository.countByBizTypeAndRelation(bizType, relation); + } + public Mono countBySourceId(BiRelationBizType bizType, String sourceId) { return biRelationRepository.countByBizTypeAndSourceId(bizType, sourceId); } diff --git a/server/api-service/lowcoder-server/src/main/resources/application-lowcoder.yml b/server/api-service/lowcoder-server/src/main/resources/application-lowcoder.yml index a6a3df204..3488bd1c0 100644 --- a/server/api-service/lowcoder-server/src/main/resources/application-lowcoder.yml +++ b/server/api-service/lowcoder-server/src/main/resources/application-lowcoder.yml @@ -3,9 +3,9 @@ spring: mongodb: authentication-database: admin auto-index-creation: false - uri: mongodb://lowcoder:secret123@127.0.0.1/lowcoder?authSource=admin + uri: mongodb://192.168.8.100:27017/lowcoder?authSource=admin redis: - url: redis://localhost:6379 + url: redis://192.168.8.100:6379 main: allow-bean-definition-overriding: true allow-circular-references: true @@ -41,6 +41,8 @@ common: - '*' version: 1.1.8 block-hound-enable: false + js-executor: + host: http://127.0.0.1:6060 material: mongodb-grid-fs: @@ -52,3 +54,8 @@ springdoc: swagger-ui: path: /api/docs/swagger-ui paths-to-exclude: /api/v1/** + +auth: + email: + enable: true + enable-register: false \ No newline at end of file